mirror of https://github.com/flutter/pinball.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.8 KiB
96 lines
2.8 KiB
import 'package:flame/components.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:mocktail/mocktail.dart';
|
|
import 'package:pinball/flame/blueprint.dart';
|
|
import 'package:pinball/game/game.dart';
|
|
|
|
import '../helpers/helpers.dart';
|
|
|
|
class MyBlueprint extends Blueprint {
|
|
@override
|
|
void build(_) {
|
|
add(Component());
|
|
addAll([Component(), Component()]);
|
|
}
|
|
}
|
|
|
|
class MyForge2dBlueprint extends Forge2DBlueprint {
|
|
@override
|
|
void build(_) {
|
|
addContactCallback(MockContactCallback());
|
|
addAllContactCallback([MockContactCallback(), MockContactCallback()]);
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
group('Blueprint', () {
|
|
test('components can be added to it', () {
|
|
final blueprint = MyBlueprint()..build(MockPinballGame());
|
|
|
|
expect(blueprint.components.length, equals(3));
|
|
});
|
|
|
|
test('adds the components to a game on attach', () {
|
|
final mockGame = MockPinballGame();
|
|
when(() => mockGame.addAll(any())).thenAnswer((_) async {});
|
|
MyBlueprint().attach(mockGame);
|
|
|
|
verify(() => mockGame.addAll(any())).called(1);
|
|
});
|
|
|
|
test(
|
|
'throws assertion error when adding to an already attached blueprint',
|
|
() async {
|
|
final mockGame = MockPinballGame();
|
|
when(() => mockGame.addAll(any())).thenAnswer((_) async {});
|
|
final blueprint = MyBlueprint();
|
|
await blueprint.attach(mockGame);
|
|
|
|
expect(() => blueprint.add(Component()), throwsAssertionError);
|
|
expect(() => blueprint.addAll([Component()]), throwsAssertionError);
|
|
},
|
|
);
|
|
});
|
|
|
|
group('Forge2DBlueprint', () {
|
|
setUpAll(() {
|
|
registerFallbackValue(SpaceshipHoleBallContactCallback());
|
|
});
|
|
|
|
test('callbacks can be added to it', () {
|
|
final blueprint = MyForge2dBlueprint()..build(MockPinballGame());
|
|
|
|
expect(blueprint.callbacks.length, equals(3));
|
|
});
|
|
|
|
test('adds the callbacks to a game on attach', () async {
|
|
final mockGame = MockPinballGame();
|
|
when(() => mockGame.addAll(any())).thenAnswer((_) async {});
|
|
when(() => mockGame.addContactCallback(any())).thenAnswer((_) async {});
|
|
await MyForge2dBlueprint().attach(mockGame);
|
|
|
|
verify(() => mockGame.addContactCallback(any())).called(3);
|
|
});
|
|
|
|
test(
|
|
'throws assertion error when adding to an already attached blueprint',
|
|
() async {
|
|
final mockGame = MockPinballGame();
|
|
when(() => mockGame.addAll(any())).thenAnswer((_) async {});
|
|
when(() => mockGame.addContactCallback(any())).thenAnswer((_) async {});
|
|
final blueprint = MyForge2dBlueprint();
|
|
await blueprint.attach(mockGame);
|
|
|
|
expect(
|
|
() => blueprint.addContactCallback(MockContactCallback()),
|
|
throwsAssertionError,
|
|
);
|
|
expect(
|
|
() => blueprint.addAllContactCallback([MockContactCallback()]),
|
|
throwsAssertionError,
|
|
);
|
|
},
|
|
);
|
|
});
|
|
}
|