From 5a933f08d84006c82f9dc5874c14cae50b3bca61 Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Tue, 19 Apr 2022 16:44:33 -0500 Subject: [PATCH] test: bumper changes --- .../src/components/alien_bumper_test.dart | 47 ++++---- .../src/components/dash_nest_bumper_test.dart | 105 ++++++------------ .../src/components/sparky_bumper_test.dart | 49 ++++---- test/game/components/alien_zone_test.dart | 55 ++++----- test/game/components/board_test.dart | 10 +- test/game/components/flutter_forest_test.dart | 32 +++--- .../components/sparky_fire_zone_test.dart | 50 ++++----- test/game/pinball_game_test.dart | 24 +++- test/helpers/mocks.dart | 4 + 9 files changed, 166 insertions(+), 210 deletions(-) diff --git a/packages/pinball_components/test/src/components/alien_bumper_test.dart b/packages/pinball_components/test/src/components/alien_bumper_test.dart index cd55b62e..6101c2e2 100644 --- a/packages/pinball_components/test/src/components/alien_bumper_test.dart +++ b/packages/pinball_components/test/src/components/alien_bumper_test.dart @@ -9,7 +9,13 @@ import '../../helpers/helpers.dart'; void main() { 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', () { flameTester.test('"a" loads correctly', (game) async { @@ -25,43 +31,30 @@ void main() { 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(); await game.ensureAdd(bumper); - expect(bumper.activate, returnsNormally); - }); - - flameTester.test('deactivate returns normally', (game) async { - final bumper = AlienBumper.a(); - await game.ensureAdd(bumper); - - expect(bumper.deactivate, returnsNormally); - }); + final spriteGroupComponent = bumper.firstChild()!; - flameTester.test('changes sprite', (game) async { - final bumper = AlienBumper.a(); - await game.ensureAdd(bumper); - - final spriteComponent = bumper.firstChild()!; - - final deactivatedSprite = spriteComponent.sprite; - bumper.activate(); expect( - spriteComponent.sprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + equals(AlienBumperSpriteState.on), ); - final activatedSprite = spriteComponent.sprite; - bumper.deactivate(); + final future = bumper.animate(); + expect( - spriteComponent.sprite, - isNot(equals(activatedSprite)), + spriteGroupComponent.current, + equals(AlienBumperSpriteState.off), ); + await future; + expect( - activatedSprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + equals(AlienBumperSpriteState.on), ); }); }); diff --git a/packages/pinball_components/test/src/components/dash_nest_bumper_test.dart b/packages/pinball_components/test/src/components/dash_nest_bumper_test.dart index 2c6bb00c..ac036ef4 100644 --- a/packages/pinball_components/test/src/components/dash_nest_bumper_test.dart +++ b/packages/pinball_components/test/src/components/dash_nest_bumper_test.dart @@ -9,107 +9,68 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(TestGame.new); - group('BigDashNestBumper', () { - flameTester.test('loads correctly', (game) async { - final bumper = BigDashNestBumper(); + group('DashNestBumper', () { + 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(() => TestGame(assets)); + + flameTester.test('"main" loads correctly', (game) async { + final bumper = DashNestBumper.main(); await game.ensureAdd(bumper); expect(game.contains(bumper), isTrue); }); - flameTester.test('activate returns normally', (game) async { - final bumper = BigDashNestBumper(); + flameTester.test('"a" loads correctly', (game) async { + final bumper = DashNestBumper.a(); await game.ensureAdd(bumper); - expect(bumper.activate, returnsNormally); + expect(game.contains(bumper), isTrue); }); - flameTester.test('deactivate returns normally', (game) async { - final bumper = BigDashNestBumper(); + flameTester.test('"b" loads correctly', (game) async { + final bumper = DashNestBumper.b(); await game.ensureAdd(bumper); - - expect(bumper.deactivate, returnsNormally); + expect(game.contains(bumper), isTrue); }); - flameTester.test('changes sprite', (game) async { - final bumper = BigDashNestBumper(); + flameTester.test('activate switches to active sprite', (game) async { + final bumper = DashNestBumper.main(); await game.ensureAdd(bumper); - final spriteComponent = bumper.firstChild()!; + final spriteGroupComponent = bumper.firstChild()!; - final deactivatedSprite = spriteComponent.sprite; - bumper.activate(); expect( - spriteComponent.sprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + equals(DashNestBumperSpriteState.inactive), ); - final activatedSprite = spriteComponent.sprite; - bumper.deactivate(); - expect( - spriteComponent.sprite, - isNot(equals(activatedSprite)), - ); + bumper.activate(); expect( - activatedSprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + 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 { - final bumper = SmallDashNestBumper.a(); + flameTester.test('deactivate switches to inactive sprite', (game) async { + final bumper = DashNestBumper.main(); await game.ensureAdd(bumper); - final spriteComponent = bumper.firstChild()!; + final spriteGroupComponent = bumper.firstChild()! + ..current = DashNestBumperSpriteState.active; - final deactivatedSprite = spriteComponent.sprite; - bumper.activate(); - expect( - spriteComponent.sprite, - isNot(equals(deactivatedSprite)), - ); - - final activatedSprite = spriteComponent.sprite; bumper.deactivate(); - expect( - spriteComponent.sprite, - isNot(equals(activatedSprite)), - ); expect( - activatedSprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + equals(DashNestBumperSpriteState.inactive), ); }); }); diff --git a/packages/pinball_components/test/src/components/sparky_bumper_test.dart b/packages/pinball_components/test/src/components/sparky_bumper_test.dart index 470c254b..cb9d5cf0 100644 --- a/packages/pinball_components/test/src/components/sparky_bumper_test.dart +++ b/packages/pinball_components/test/src/components/sparky_bumper_test.dart @@ -9,7 +9,15 @@ import '../../helpers/helpers.dart'; void main() { 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', () { flameTester.test('"a" loads correctly', (game) async { @@ -31,43 +39,30 @@ void main() { 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(); await game.ensureAdd(bumper); - expect(bumper.activate, returnsNormally); - }); - - flameTester.test('deactivate returns normally', (game) async { - final bumper = SparkyBumper.a(); - await game.ensureAdd(bumper); - - expect(bumper.deactivate, returnsNormally); - }); + final spriteGroupComponent = bumper.firstChild()!; - flameTester.test('changes sprite', (game) async { - final bumper = SparkyBumper.a(); - await game.ensureAdd(bumper); - - final spriteComponent = bumper.firstChild()!; - - final deactivatedSprite = spriteComponent.sprite; - bumper.activate(); expect( - spriteComponent.sprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + equals(SparkyBumperSpriteState.on), ); - final activatedSprite = spriteComponent.sprite; - bumper.deactivate(); + final future = bumper.animate(); + expect( - spriteComponent.sprite, - isNot(equals(activatedSprite)), + spriteGroupComponent.current, + equals(SparkyBumperSpriteState.off), ); + await future; + expect( - activatedSprite, - isNot(equals(deactivatedSprite)), + spriteGroupComponent.current, + equals(SparkyBumperSpriteState.on), ); }); }); diff --git a/test/game/components/alien_zone_test.dart b/test/game/components/alien_zone_test.dart index 863bef31..8db54afc 100644 --- a/test/game/components/alien_zone_test.dart +++ b/test/game/components/alien_zone_test.dart @@ -13,13 +13,18 @@ import '../../helpers/helpers.dart'; void main() { 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', () { flameTester.test( 'loads correctly', (game) async { - await game.ready(); final alienZone = AlienZone(); await game.ensureAdd(alienZone); @@ -31,7 +36,6 @@ void main() { flameTester.test( 'two AlienBumper', (game) async { - await game.ready(); final alienZone = AlienZone(); await game.ensureAdd(alienZone); @@ -44,55 +48,40 @@ void main() { }); group('bumpers', () { - late ControlledAlienBumper controlledAlienBumper; late GameBloc gameBloc; setUp(() { gameBloc = MockGameBloc(); + whenListen( + gameBloc, + const Stream.empty(), + initialState: const GameState.initial(), + ); }); - final flameBlocTester = FlameBlocTester( + final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () => gameBloc, + assets: assets, ); - flameTester.testGameWidget( - 'activate when deactivated bumper is hit', - setUp: (game, tester) async { - controlledAlienBumper = ControlledAlienBumper.a(); - await game.ensureAdd(controlledAlienBumper); + flameTester.test('call animate on contact', (game) async { + final contactCallback = AlienBumperBallContactCallback(); + final bumper = MockAlienBumper(); + final ball = MockBall(); - controlledAlienBumper.controller.hit(); - }, - verify: (game, tester) async { - expect(controlledAlienBumper.controller.isActivated, isTrue); - }, - ); + when(bumper.animate).thenAnswer((_) async {}); - flameTester.testGameWidget( - 'deactivate when activated bumper is hit', - setUp: (game, tester) async { - controlledAlienBumper = ControlledAlienBumper.a(); - await game.ensureAdd(controlledAlienBumper); + contactCallback.begin(bumper, ball, MockContact()); - controlledAlienBumper.controller.hit(); - controlledAlienBumper.controller.hit(); - }, - verify: (game, tester) async { - expect(controlledAlienBumper.controller.isActivated, isFalse); - }, - ); + verify(bumper.animate).called(1); + }); flameBlocTester.testGameWidget( 'add Scored event', setUp: (game, tester) async { final ball = Ball(baseColor: const Color(0xFF00FFFF)); final alienZone = AlienZone(); - whenListen( - gameBloc, - const Stream.empty(), - initialState: const GameState.initial(), - ); await game.ensureAdd(alienZone); await game.ensureAdd(ball); diff --git a/test/game/components/board_test.dart b/test/game/components/board_test.dart index 0a1928ab..04e11f3f 100644 --- a/test/game/components/board_test.dart +++ b/test/game/components/board_test.dart @@ -9,7 +9,15 @@ import '../../helpers/helpers.dart'; void main() { 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', () { flameTester.test( diff --git a/test/game/components/flutter_forest_test.dart b/test/game/components/flutter_forest_test.dart index 2089b7b7..0e0c1e58 100644 --- a/test/game/components/flutter_forest_test.dart +++ b/test/game/components/flutter_forest_test.dart @@ -12,7 +12,15 @@ import '../../helpers/helpers.dart'; void main() { 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', () { flameTester.test( @@ -53,27 +61,14 @@ void main() { ); flameTester.test( - 'a BigDashNestBumper', + 'three DashNestBumper', (game) async { final flutterForest = FlutterForest(); await game.ensureAdd(flutterForest); expect( - flutterForest.descendants().whereType().length, - equals(1), - ); - }, - ); - - flameTester.test( - 'two SmallDashNestBumper', - (game) async { - final flutterForest = FlutterForest(); - await game.ensureAdd(flutterForest); - - expect( - flutterForest.descendants().whereType().length, - equals(2), + flutterForest.descendants().whereType().length, + equals(3), ); }, ); @@ -88,13 +83,14 @@ void main() { }); final flameBlocTester = FlameBlocTester( - gameBuilder: EmptyPinballTestGame.new, + gameBuilder: () => EmptyPinballTestGame(assets), blocBuilder: () { gameBloc = MockGameBloc(); const state = GameState.initial(); whenListen(gameBloc, Stream.value(state), initialState: state); return gameBloc; }, + assets: assets, ); flameBlocTester.testGameWidget( diff --git a/test/game/components/sparky_fire_zone_test.dart b/test/game/components/sparky_fire_zone_test.dart index 692af291..ee918a59 100644 --- a/test/game/components/sparky_fire_zone_test.dart +++ b/test/game/components/sparky_fire_zone_test.dart @@ -13,13 +13,20 @@ import '../../helpers/helpers.dart'; void main() { 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', () { flameTester.test( 'loads correctly', (game) async { - await game.ready(); final sparkyFireZone = SparkyFireZone(); await game.ensureAdd(sparkyFireZone); @@ -31,7 +38,6 @@ void main() { flameTester.test( 'three SparkyBumper', (game) async { - await game.ready(); final sparkyFireZone = SparkyFireZone(); await game.ensureAdd(sparkyFireZone); @@ -44,12 +50,9 @@ void main() { }); group('bumpers', () { - late ControlledSparkyBumper controlledSparkyBumper; - late Ball ball; late GameBloc gameBloc; setUp(() { - ball = Ball(baseColor: const Color(0xFF00FFFF)); gameBloc = MockGameBloc(); whenListen( gameBloc, @@ -58,41 +61,28 @@ void main() { ); }); - final flameBlocTester = FlameBlocTester( + final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () => gameBloc, + assets: assets, ); - flameTester.testGameWidget( - 'activate when deactivated bumper is hit', - setUp: (game, tester) async { - controlledSparkyBumper = ControlledSparkyBumper.a(); - await game.ensureAdd(controlledSparkyBumper); + flameTester.test('call animate on contact', (game) async { + final contactCallback = SparkyBumperBallContactCallback(); + final bumper = MockSparkyBumper(); + final ball = MockBall(); - controlledSparkyBumper.controller.hit(); - }, - verify: (game, tester) async { - expect(controlledSparkyBumper.controller.isActivated, isTrue); - }, - ); + when(bumper.animate).thenAnswer((_) async {}); - flameTester.testGameWidget( - 'deactivate when activated bumper is hit', - setUp: (game, tester) async { - controlledSparkyBumper = ControlledSparkyBumper.a(); - await game.ensureAdd(controlledSparkyBumper); + contactCallback.begin(bumper, ball, MockContact()); - controlledSparkyBumper.controller.hit(); - controlledSparkyBumper.controller.hit(); - }, - verify: (game, tester) async { - expect(controlledSparkyBumper.controller.isActivated, isFalse); - }, - ); + verify(bumper.animate).called(1); + }); flameBlocTester.testGameWidget( 'add Scored event', setUp: (game, tester) async { + final ball = Ball(baseColor: const Color(0xFF00FFFF)); final sparkyFireZone = SparkyFireZone(); await game.ensureAdd(sparkyFireZone); await game.ensureAdd(ball); diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index c29ee315..45ea7f16 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -12,8 +12,26 @@ import '../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(PinballTestGame.new); - final debugModeFlameTester = FlameTester(DebugPinballTestGame.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, + 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', () { // TODO(alestiago): test if [PinballGame] registers @@ -90,6 +108,7 @@ void main() { final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () => gameBloc, + // assets: assets, ); flameBlocTester.testGameWidget( @@ -208,6 +227,7 @@ void main() { FlameBlocTester( gameBuilder: DebugPinballTestGame.new, blocBuilder: () => gameBloc, + assets: assets, ); debugModeFlameBlocTester.testGameWidget( diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index fd01a509..e9af4408 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -82,3 +82,7 @@ class MockActiveOverlaysNotifier extends Mock implements ActiveOverlaysNotifier {} class MockGameFlowController extends Mock implements GameFlowController {} + +class MockAlienBumper extends Mock implements AlienBumper {} + +class MockSparkyBumper extends Mock implements SparkyBumper {}