test: bumper changes

pull/204/head
Allison Ryan 3 years ago
parent aa86ef302b
commit 5a933f08d8

@ -9,7 +9,13 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new); final assets = [
Assets.images.alienBumper.a.on.keyName,
Assets.images.alienBumper.a.off.keyName,
Assets.images.alienBumper.b.on.keyName,
Assets.images.alienBumper.b.off.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
group('AlienBumper', () { group('AlienBumper', () {
flameTester.test('"a" loads correctly', (game) async { flameTester.test('"a" loads correctly', (game) async {
@ -25,43 +31,30 @@ void main() {
expect(game.contains(bumper), isTrue); expect(game.contains(bumper), isTrue);
}); });
flameTester.test('activate returns normally', (game) async { flameTester.test('animate switches between on and off sprites',
(game) async {
final bumper = AlienBumper.a(); final bumper = AlienBumper.a();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
expect(bumper.activate, returnsNormally); final spriteGroupComponent = bumper.firstChild<SpriteGroupComponent>()!;
});
flameTester.test('deactivate returns normally', (game) async {
final bumper = AlienBumper.a();
await game.ensureAdd(bumper);
expect(bumper.deactivate, returnsNormally);
});
flameTester.test('changes sprite', (game) async {
final bumper = AlienBumper.a();
await game.ensureAdd(bumper);
final spriteComponent = bumper.firstChild<SpriteComponent>()!;
final deactivatedSprite = spriteComponent.sprite;
bumper.activate();
expect( expect(
spriteComponent.sprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(AlienBumperSpriteState.on),
); );
final activatedSprite = spriteComponent.sprite; final future = bumper.animate();
bumper.deactivate();
expect( expect(
spriteComponent.sprite, spriteGroupComponent.current,
isNot(equals(activatedSprite)), equals(AlienBumperSpriteState.off),
); );
await future;
expect( expect(
activatedSprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(AlienBumperSpriteState.on),
); );
}); });
}); });

@ -9,107 +9,68 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new);
group('BigDashNestBumper', () { group('DashNestBumper', () {
flameTester.test('loads correctly', (game) async { final assets = [
final bumper = BigDashNestBumper(); Assets.images.dash.bumper.main.active.keyName,
Assets.images.dash.bumper.main.inactive.keyName,
Assets.images.dash.bumper.a.active.keyName,
Assets.images.dash.bumper.a.inactive.keyName,
Assets.images.dash.bumper.b.active.keyName,
Assets.images.dash.bumper.b.inactive.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
flameTester.test('"main" loads correctly', (game) async {
final bumper = DashNestBumper.main();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
expect(game.contains(bumper), isTrue); expect(game.contains(bumper), isTrue);
}); });
flameTester.test('activate returns normally', (game) async { flameTester.test('"a" loads correctly', (game) async {
final bumper = BigDashNestBumper(); final bumper = DashNestBumper.a();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
expect(bumper.activate, returnsNormally); expect(game.contains(bumper), isTrue);
}); });
flameTester.test('deactivate returns normally', (game) async { flameTester.test('"b" loads correctly', (game) async {
final bumper = BigDashNestBumper(); final bumper = DashNestBumper.b();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
expect(game.contains(bumper), isTrue);
expect(bumper.deactivate, returnsNormally);
}); });
flameTester.test('changes sprite', (game) async { flameTester.test('activate switches to active sprite', (game) async {
final bumper = BigDashNestBumper(); final bumper = DashNestBumper.main();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
final spriteComponent = bumper.firstChild<SpriteComponent>()!; final spriteGroupComponent = bumper.firstChild<SpriteGroupComponent>()!;
final deactivatedSprite = spriteComponent.sprite;
bumper.activate();
expect( expect(
spriteComponent.sprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(DashNestBumperSpriteState.inactive),
); );
final activatedSprite = spriteComponent.sprite; bumper.activate();
bumper.deactivate();
expect(
spriteComponent.sprite,
isNot(equals(activatedSprite)),
);
expect( expect(
activatedSprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(DashNestBumperSpriteState.active),
); );
}); });
});
group('SmallDashNestBumper', () {
flameTester.test('"a" loads correctly', (game) async {
final bumper = SmallDashNestBumper.a();
await game.ensureAdd(bumper);
expect(game.contains(bumper), isTrue);
});
flameTester.test('"b" loads correctly', (game) async {
final bumper = SmallDashNestBumper.b();
await game.ensureAdd(bumper);
expect(game.contains(bumper), isTrue);
});
flameTester.test('activate returns normally', (game) async {
final bumper = SmallDashNestBumper.a();
await game.ensureAdd(bumper);
expect(bumper.activate, returnsNormally);
});
flameTester.test('deactivate returns normally', (game) async {
final bumper = SmallDashNestBumper.a();
await game.ensureAdd(bumper);
expect(bumper.deactivate, returnsNormally);
});
flameTester.test('changes sprite', (game) async { flameTester.test('deactivate switches to inactive sprite', (game) async {
final bumper = SmallDashNestBumper.a(); final bumper = DashNestBumper.main();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
final spriteComponent = bumper.firstChild<SpriteComponent>()!; final spriteGroupComponent = bumper.firstChild<SpriteGroupComponent>()!
..current = DashNestBumperSpriteState.active;
final deactivatedSprite = spriteComponent.sprite;
bumper.activate();
expect(
spriteComponent.sprite,
isNot(equals(deactivatedSprite)),
);
final activatedSprite = spriteComponent.sprite;
bumper.deactivate(); bumper.deactivate();
expect(
spriteComponent.sprite,
isNot(equals(activatedSprite)),
);
expect( expect(
activatedSprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(DashNestBumperSpriteState.inactive),
); );
}); });
}); });

@ -9,7 +9,15 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new); final assets = [
Assets.images.sparky.bumper.a.on.keyName,
Assets.images.sparky.bumper.a.off.keyName,
Assets.images.sparky.bumper.b.on.keyName,
Assets.images.sparky.bumper.b.off.keyName,
Assets.images.sparky.bumper.c.on.keyName,
Assets.images.sparky.bumper.c.off.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
group('SparkyBumper', () { group('SparkyBumper', () {
flameTester.test('"a" loads correctly', (game) async { flameTester.test('"a" loads correctly', (game) async {
@ -31,43 +39,30 @@ void main() {
expect(game.contains(bumper), isTrue); expect(game.contains(bumper), isTrue);
}); });
flameTester.test('activate returns normally', (game) async { flameTester.test('animate switches between on and off sprites',
(game) async {
final bumper = SparkyBumper.a(); final bumper = SparkyBumper.a();
await game.ensureAdd(bumper); await game.ensureAdd(bumper);
expect(bumper.activate, returnsNormally); final spriteGroupComponent = bumper.firstChild<SpriteGroupComponent>()!;
});
flameTester.test('deactivate returns normally', (game) async {
final bumper = SparkyBumper.a();
await game.ensureAdd(bumper);
expect(bumper.deactivate, returnsNormally);
});
flameTester.test('changes sprite', (game) async {
final bumper = SparkyBumper.a();
await game.ensureAdd(bumper);
final spriteComponent = bumper.firstChild<SpriteComponent>()!;
final deactivatedSprite = spriteComponent.sprite;
bumper.activate();
expect( expect(
spriteComponent.sprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(SparkyBumperSpriteState.on),
); );
final activatedSprite = spriteComponent.sprite; final future = bumper.animate();
bumper.deactivate();
expect( expect(
spriteComponent.sprite, spriteGroupComponent.current,
isNot(equals(activatedSprite)), equals(SparkyBumperSpriteState.off),
); );
await future;
expect( expect(
activatedSprite, spriteGroupComponent.current,
isNot(equals(deactivatedSprite)), equals(SparkyBumperSpriteState.on),
); );
}); });
}); });

@ -13,13 +13,18 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(EmptyPinballTestGame.new); final assets = [
Assets.images.alienBumper.a.on.keyName,
Assets.images.alienBumper.a.off.keyName,
Assets.images.alienBumper.b.on.keyName,
Assets.images.alienBumper.b.off.keyName,
];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets));
group('AlienZone', () { group('AlienZone', () {
flameTester.test( flameTester.test(
'loads correctly', 'loads correctly',
(game) async { (game) async {
await game.ready();
final alienZone = AlienZone(); final alienZone = AlienZone();
await game.ensureAdd(alienZone); await game.ensureAdd(alienZone);
@ -31,7 +36,6 @@ void main() {
flameTester.test( flameTester.test(
'two AlienBumper', 'two AlienBumper',
(game) async { (game) async {
await game.ready();
final alienZone = AlienZone(); final alienZone = AlienZone();
await game.ensureAdd(alienZone); await game.ensureAdd(alienZone);
@ -44,55 +48,40 @@ void main() {
}); });
group('bumpers', () { group('bumpers', () {
late ControlledAlienBumper controlledAlienBumper;
late GameBloc gameBloc; late GameBloc gameBloc;
setUp(() { setUp(() {
gameBloc = MockGameBloc(); gameBloc = MockGameBloc();
whenListen(
gameBloc,
const Stream<GameState>.empty(),
initialState: const GameState.initial(),
);
}); });
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<EmptyPinballTestGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: EmptyPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets,
); );
flameTester.testGameWidget( flameTester.test('call animate on contact', (game) async {
'activate when deactivated bumper is hit', final contactCallback = AlienBumperBallContactCallback();
setUp: (game, tester) async { final bumper = MockAlienBumper();
controlledAlienBumper = ControlledAlienBumper.a(); final ball = MockBall();
await game.ensureAdd(controlledAlienBumper);
controlledAlienBumper.controller.hit(); when(bumper.animate).thenAnswer((_) async {});
},
verify: (game, tester) async {
expect(controlledAlienBumper.controller.isActivated, isTrue);
},
);
flameTester.testGameWidget( contactCallback.begin(bumper, ball, MockContact());
'deactivate when activated bumper is hit',
setUp: (game, tester) async {
controlledAlienBumper = ControlledAlienBumper.a();
await game.ensureAdd(controlledAlienBumper);
controlledAlienBumper.controller.hit(); verify(bumper.animate).called(1);
controlledAlienBumper.controller.hit(); });
},
verify: (game, tester) async {
expect(controlledAlienBumper.controller.isActivated, isFalse);
},
);
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'add Scored event', 'add Scored event',
setUp: (game, tester) async { setUp: (game, tester) async {
final ball = Ball(baseColor: const Color(0xFF00FFFF)); final ball = Ball(baseColor: const Color(0xFF00FFFF));
final alienZone = AlienZone(); final alienZone = AlienZone();
whenListen(
gameBloc,
const Stream<GameState>.empty(),
initialState: const GameState.initial(),
);
await game.ensureAdd(alienZone); await game.ensureAdd(alienZone);
await game.ensureAdd(ball); await game.ensureAdd(ball);

@ -9,7 +9,15 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(EmptyPinballTestGame.new); final assets = [
Assets.images.dash.bumper.main.active.keyName,
Assets.images.dash.bumper.main.inactive.keyName,
Assets.images.dash.bumper.a.active.keyName,
Assets.images.dash.bumper.a.inactive.keyName,
Assets.images.dash.bumper.b.active.keyName,
Assets.images.dash.bumper.b.inactive.keyName,
];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets));
group('Board', () { group('Board', () {
flameTester.test( flameTester.test(

@ -12,7 +12,15 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(EmptyPinballTestGame.new); final assets = [
Assets.images.dash.bumper.main.active.keyName,
Assets.images.dash.bumper.main.inactive.keyName,
Assets.images.dash.bumper.a.active.keyName,
Assets.images.dash.bumper.a.inactive.keyName,
Assets.images.dash.bumper.b.active.keyName,
Assets.images.dash.bumper.b.inactive.keyName,
];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets));
group('FlutterForest', () { group('FlutterForest', () {
flameTester.test( flameTester.test(
@ -53,27 +61,14 @@ void main() {
); );
flameTester.test( flameTester.test(
'a BigDashNestBumper', 'three DashNestBumper',
(game) async {
final flutterForest = FlutterForest();
await game.ensureAdd(flutterForest);
expect(
flutterForest.descendants().whereType<BigDashNestBumper>().length,
equals(1),
);
},
);
flameTester.test(
'two SmallDashNestBumper',
(game) async { (game) async {
final flutterForest = FlutterForest(); final flutterForest = FlutterForest();
await game.ensureAdd(flutterForest); await game.ensureAdd(flutterForest);
expect( expect(
flutterForest.descendants().whereType<SmallDashNestBumper>().length, flutterForest.descendants().whereType<DashNestBumper>().length,
equals(2), equals(3),
); );
}, },
); );
@ -88,13 +83,14 @@ void main() {
}); });
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: () => EmptyPinballTestGame(assets),
blocBuilder: () { blocBuilder: () {
gameBloc = MockGameBloc(); gameBloc = MockGameBloc();
const state = GameState.initial(); const state = GameState.initial();
whenListen(gameBloc, Stream.value(state), initialState: state); whenListen(gameBloc, Stream.value(state), initialState: state);
return gameBloc; return gameBloc;
}, },
assets: assets,
); );
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(

@ -13,13 +13,20 @@ import '../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(EmptyPinballTestGame.new); final assets = [
Assets.images.sparky.bumper.a.on.keyName,
Assets.images.sparky.bumper.a.off.keyName,
Assets.images.sparky.bumper.b.on.keyName,
Assets.images.sparky.bumper.b.off.keyName,
Assets.images.sparky.bumper.c.on.keyName,
Assets.images.sparky.bumper.c.off.keyName,
];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets));
group('SparkyFireZone', () { group('SparkyFireZone', () {
flameTester.test( flameTester.test(
'loads correctly', 'loads correctly',
(game) async { (game) async {
await game.ready();
final sparkyFireZone = SparkyFireZone(); final sparkyFireZone = SparkyFireZone();
await game.ensureAdd(sparkyFireZone); await game.ensureAdd(sparkyFireZone);
@ -31,7 +38,6 @@ void main() {
flameTester.test( flameTester.test(
'three SparkyBumper', 'three SparkyBumper',
(game) async { (game) async {
await game.ready();
final sparkyFireZone = SparkyFireZone(); final sparkyFireZone = SparkyFireZone();
await game.ensureAdd(sparkyFireZone); await game.ensureAdd(sparkyFireZone);
@ -44,12 +50,9 @@ void main() {
}); });
group('bumpers', () { group('bumpers', () {
late ControlledSparkyBumper controlledSparkyBumper;
late Ball ball;
late GameBloc gameBloc; late GameBloc gameBloc;
setUp(() { setUp(() {
ball = Ball(baseColor: const Color(0xFF00FFFF));
gameBloc = MockGameBloc(); gameBloc = MockGameBloc();
whenListen( whenListen(
gameBloc, gameBloc,
@ -58,41 +61,28 @@ void main() {
); );
}); });
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<EmptyPinballTestGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: EmptyPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets,
); );
flameTester.testGameWidget( flameTester.test('call animate on contact', (game) async {
'activate when deactivated bumper is hit', final contactCallback = SparkyBumperBallContactCallback();
setUp: (game, tester) async { final bumper = MockSparkyBumper();
controlledSparkyBumper = ControlledSparkyBumper.a(); final ball = MockBall();
await game.ensureAdd(controlledSparkyBumper);
controlledSparkyBumper.controller.hit(); when(bumper.animate).thenAnswer((_) async {});
},
verify: (game, tester) async {
expect(controlledSparkyBumper.controller.isActivated, isTrue);
},
);
flameTester.testGameWidget( contactCallback.begin(bumper, ball, MockContact());
'deactivate when activated bumper is hit',
setUp: (game, tester) async {
controlledSparkyBumper = ControlledSparkyBumper.a();
await game.ensureAdd(controlledSparkyBumper);
controlledSparkyBumper.controller.hit(); verify(bumper.animate).called(1);
controlledSparkyBumper.controller.hit(); });
},
verify: (game, tester) async {
expect(controlledSparkyBumper.controller.isActivated, isFalse);
},
);
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
'add Scored event', 'add Scored event',
setUp: (game, tester) async { setUp: (game, tester) async {
final ball = Ball(baseColor: const Color(0xFF00FFFF));
final sparkyFireZone = SparkyFireZone(); final sparkyFireZone = SparkyFireZone();
await game.ensureAdd(sparkyFireZone); await game.ensureAdd(sparkyFireZone);
await game.ensureAdd(ball); await game.ensureAdd(ball);

@ -12,8 +12,26 @@ import '../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(PinballTestGame.new); final assets = [
final debugModeFlameTester = FlameTester(DebugPinballTestGame.new); Assets.images.dash.bumper.main.active.keyName,
Assets.images.dash.bumper.main.inactive.keyName,
Assets.images.dash.bumper.a.active.keyName,
Assets.images.dash.bumper.a.inactive.keyName,
Assets.images.dash.bumper.b.active.keyName,
Assets.images.dash.bumper.b.inactive.keyName,
Assets.images.alienBumper.a.on.keyName,
Assets.images.alienBumper.a.off.keyName,
Assets.images.alienBumper.b.on.keyName,
Assets.images.alienBumper.b.off.keyName,
Assets.images.sparky.bumper.a.on.keyName,
Assets.images.sparky.bumper.a.off.keyName,
Assets.images.sparky.bumper.b.on.keyName,
Assets.images.sparky.bumper.b.off.keyName,
Assets.images.sparky.bumper.c.on.keyName,
Assets.images.sparky.bumper.c.off.keyName,
];
final flameTester = FlameTester(() => PinballTestGame(assets));
final debugModeFlameTester = FlameTester(() => DebugPinballTestGame(assets));
group('PinballGame', () { group('PinballGame', () {
// TODO(alestiago): test if [PinballGame] registers // TODO(alestiago): test if [PinballGame] registers
@ -90,6 +108,7 @@ void main() {
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: EmptyPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
// assets: assets,
); );
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
@ -208,6 +227,7 @@ void main() {
FlameBlocTester<DebugPinballGame, GameBloc>( FlameBlocTester<DebugPinballGame, GameBloc>(
gameBuilder: DebugPinballTestGame.new, gameBuilder: DebugPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets,
); );
debugModeFlameBlocTester.testGameWidget( debugModeFlameBlocTester.testGameWidget(

@ -82,3 +82,7 @@ class MockActiveOverlaysNotifier extends Mock
implements ActiveOverlaysNotifier {} implements ActiveOverlaysNotifier {}
class MockGameFlowController extends Mock implements GameFlowController {} class MockGameFlowController extends Mock implements GameFlowController {}
class MockAlienBumper extends Mock implements AlienBumper {}
class MockSparkyBumper extends Mock implements SparkyBumper {}

Loading…
Cancel
Save