From e1097a088f9a3eb658e388fa10711763620fd457 Mon Sep 17 00:00:00 2001 From: alestiago Date: Tue, 5 Apr 2022 18:25:05 +0100 Subject: [PATCH] refactor: used EmptyPinballGame --- lib/game/pinball_game.dart | 10 ++- test/game/components/board_test.dart | 3 +- test/game/components/bonus_word_test.dart | 77 +++++++++++-------- .../game/components/controlled_ball_test.dart | 8 +- .../components/controlled_flipper_test.dart | 2 +- 5 files changed, 58 insertions(+), 42 deletions(-) diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 62005d04..fe86902a 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -95,10 +95,12 @@ class PinballGame extends Forge2DGame unawaited(addFromBlueprint(LaunchRamp())); } - void spawnBall() { + Future spawnBall() async { // TODO(alestiago): Remove once this logic is moved to controller. - final plunger = firstChild(); - if (plunger == null) return; + var plunger = firstChild(); + if (plunger == null) { + await add(plunger = Plunger(compressionDistance: 1)); + } final ball = ControlledBall.launch( theme: theme, @@ -106,7 +108,7 @@ class PinballGame extends Forge2DGame plunger.body.position.x, plunger.body.position.y + Ball.size.y, ); - add(ball); + await add(ball); } } diff --git a/test/game/components/board_test.dart b/test/game/components/board_test.dart index 3db3edca..9f2a5260 100644 --- a/test/game/components/board_test.dart +++ b/test/game/components/board_test.dart @@ -9,7 +9,7 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(PinballGameTest.new); + final flameTester = FlameTester(EmptyPinballGameTest.new); group('Board', () { flameTester.test( @@ -78,7 +78,6 @@ void main() { flameTester.test( 'one FlutterForest', (game) async { - // TODO(alestiago): change to [NestBumpers] once provided. final board = Board(); await game.ready(); await game.ensureAdd(board); diff --git a/test/game/components/bonus_word_test.dart b/test/game/components/bonus_word_test.dart index 5677466e..840e6624 100644 --- a/test/game/components/bonus_word_test.dart +++ b/test/game/components/bonus_word_test.dart @@ -12,16 +12,18 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(PinballGameTest.new); + final flameTester = FlameTester(EmptyPinballGameTest.new); group('BonusWord', () { flameTester.test( 'loads the letters correctly', (game) async { - await game.ready(); + final bonusWord = BonusWord( + position: Vector2.zero(), + ); + await game.ensureAdd(bonusWord); - final bonusWord = game.children.whereType().first; - final letters = bonusWord.children.whereType(); + final letters = bonusWord.descendants().whereType(); expect(letters.length, equals(GameBloc.bonusWord.length)); }, ); @@ -118,7 +120,7 @@ void main() { }); group('BonusLetter', () { - final flameTester = FlameTester(PinballGameTest.new); + final flameTester = FlameTester(EmptyPinballGameTest.new); flameTester.test( 'loads correctly', @@ -197,8 +199,7 @@ void main() { late GameBloc gameBloc; final flameBlocTester = FlameBlocTester( - // TODO(alestiago): Use TestGame once BonusLetter has controller. - gameBuilder: PinballGameTest.new, + gameBuilder: EmptyPinballGameTest.new, blocBuilder: () => gameBloc, ); @@ -214,14 +215,20 @@ void main() { flameBlocTester.testGameWidget( 'adds BonusLetterActivated to GameBloc when not activated', setUp: (game, tester) async { - await game.ready(); - final bonusLetter = game.descendants().whereType().first; + final bonusWord = BonusWord( + position: Vector2.zero(), + ); + await game.ensureAdd(bonusWord); - bonusLetter.activate(); - await game.ready(); - }, - verify: (game, tester) async { - verify(() => gameBloc.add(const BonusLetterActivated(0))).called(1); + final bonusLetters = + game.descendants().whereType().toList(); + for (var index = 0; index < bonusLetters.length; index++) { + final bonusLetter = bonusLetters[index]; + bonusLetter.activate(); + await game.ready(); + + verify(() => gameBloc.add(BonusLetterActivated(index))).called(1); + } }, ); @@ -285,25 +292,33 @@ void main() { ); flameBlocTester.testGameWidget( - 'only listens when there is a change on the letter status', + 'listens when there is a change on the letter status', setUp: (game, tester) async { - await game.ready(); - final bonusLetter = game.descendants().whereType().first; - bonusLetter.activate(); - }, - verify: (game, tester) async { - const state = GameState( - score: 0, - balls: 2, - activatedBonusLetters: [0], - activatedDashNests: {}, - bonusHistory: [], - ); - final bonusLetter = game.descendants().whereType().first; - expect( - bonusLetter.listenWhen(const GameState.initial(), state), - isTrue, + final bonusWord = BonusWord( + position: Vector2.zero(), ); + await game.ensureAdd(bonusWord); + + final bonusLetters = + game.descendants().whereType().toList(); + for (var index = 0; index < bonusLetters.length; index++) { + final bonusLetter = bonusLetters[index]; + bonusLetter.activate(); + await game.ready(); + + final state = GameState( + score: 0, + balls: 2, + activatedBonusLetters: [index], + activatedDashNests: const {}, + bonusHistory: const [], + ); + + expect( + bonusLetter.listenWhen(const GameState.initial(), state), + isTrue, + ); + } }, ); }); diff --git a/test/game/components/controlled_ball_test.dart b/test/game/components/controlled_ball_test.dart index 2574d75a..05056484 100644 --- a/test/game/components/controlled_ball_test.dart +++ b/test/game/components/controlled_ball_test.dart @@ -13,7 +13,7 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(PinballGameTest.new); + final flameTester = FlameTester(EmptyPinballGameTest.new); group('BonusBallController', () { late Ball ball; @@ -67,7 +67,7 @@ void main() { }); final flameBlocTester = FlameBlocTester( - gameBuilder: PinballGameTest.new, + gameBuilder: EmptyPinballGameTest.new, blocBuilder: () => gameBloc, ); @@ -155,13 +155,13 @@ void main() { await game.ensureAdd(ball); final state = MockGameState(); - when(() => state.balls).thenReturn(2); + when(() => state.balls).thenReturn(1); final previousBalls = game.descendants().whereType().toList(); controller.onNewState(state); await game.ready(); - final currentBalls = game.descendants().whereType(); + final currentBalls = game.descendants().whereType().toList(); expect(currentBalls.contains(ball), isFalse); expect(currentBalls.length, equals(previousBalls.length)); diff --git a/test/game/components/controlled_flipper_test.dart b/test/game/components/controlled_flipper_test.dart index f24fd611..03c51830 100644 --- a/test/game/components/controlled_flipper_test.dart +++ b/test/game/components/controlled_flipper_test.dart @@ -10,7 +10,7 @@ import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(PinballGameTest.new); + final flameTester = FlameTester(EmptyPinballGameTest.new); group('FlipperController', () { group('onKeyEvent', () {