diff --git a/test/game/components/controlled_multiplier_test.dart b/test/game/components/controlled_multiplier_test.dart deleted file mode 100644 index 0d5b8960..00000000 --- a/test/game/components/controlled_multiplier_test.dart +++ /dev/null @@ -1,129 +0,0 @@ -// ignore_for_file: cascade_invocations - -import 'package:flame_test/flame_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mocktail/mocktail.dart'; -import 'package:pinball/game/game.dart'; -import 'package:pinball_components/pinball_components.dart'; - -import '../../helpers/helpers.dart'; - -void main() { - TestWidgetsFlutterBinding.ensureInitialized(); - final assets = [ - Assets.images.multiplier.x2.lit.keyName, - Assets.images.multiplier.x2.dimmed.keyName, - Assets.images.multiplier.x3.lit.keyName, - Assets.images.multiplier.x3.dimmed.keyName, - Assets.images.multiplier.x4.lit.keyName, - Assets.images.multiplier.x4.dimmed.keyName, - Assets.images.multiplier.x5.lit.keyName, - Assets.images.multiplier.x5.dimmed.keyName, - Assets.images.multiplier.x6.lit.keyName, - Assets.images.multiplier.x6.dimmed.keyName, - ]; - final flameTester = FlameTester(() => EmptyPinballTestGame(assets)); - - group('MultipliersGroup', () { - flameTester.test( - 'loads correctly', - (game) async { - final multipliersGroup = Multipliers(); - await game.ensureAdd(multipliersGroup); - - expect(game.contains(multipliersGroup), isTrue); - }, - ); - - group('loads', () { - flameTester.test( - 'five Multiplier', - (game) async { - final multipliersGroup = Multipliers(); - await game.ensureAdd(multipliersGroup); - - expect( - multipliersGroup.descendants().whereType().length, - equals(5), - ); - }, - ); - }); - }); - group('MultipliersController', () { - group('controller', () { - // TODO(ruimiguel): change these tests to check multiplier change. - group('listenWhen', () { - flameTester.test( - 'listens when score has changed', - (game) async { - const previous = GameState.initial(); - final state = previous.copyWith(score: 100); - - final multipliersGroup = Multipliers(); - await game.ensureAdd(multipliersGroup); - - expect( - multipliersGroup.controller.listenWhen(previous, state), - isTrue, - ); - }, - ); - - flameTester.test( - "doesn't listen when score is the same", - (game) async { - const previous = GameState.initial(); - - final multipliersGroup = Multipliers(); - await game.ensureAdd(multipliersGroup); - - expect( - multipliersGroup.controller.listenWhen(previous, previous), - isFalse, - ); - }, - ); - }); - - group( - 'onNewState', - () { - flameTester.test( - 'toggle multipliers when state changes', - (game) async { - final multipliersGroup = MockMultipliersGroup(); - final x2multiplier = MockMultiplier(); - final x3multiplier = MockMultiplier(); - final x4multiplier = MockMultiplier(); - final x5multiplier = MockMultiplier(); - final x6multiplier = MockMultiplier(); - final controller = MultipliersController(multipliersGroup); - when(() => multipliersGroup.x2multiplier) - .thenReturn(x2multiplier); - when(() => multipliersGroup.x3multiplier) - .thenReturn(x3multiplier); - when(() => multipliersGroup.x4multiplier) - .thenReturn(x4multiplier); - when(() => multipliersGroup.x5multiplier) - .thenReturn(x5multiplier); - when(() => multipliersGroup.x6multiplier) - .thenReturn(x6multiplier); - - controller.onNewState( - const GameState.initial().copyWith(score: 6), - ); - - // TODO(ruimiguel): verify toggle with state.multiplier value. - verify(() => x2multiplier.toggle(any())).called(1); - verify(() => x3multiplier.toggle(any())).called(1); - verify(() => x4multiplier.toggle(any())).called(1); - verify(() => x5multiplier.toggle(any())).called(1); - verify(() => x6multiplier.toggle(any())).called(1); - }, - ); - }, - ); - }); - }); -} diff --git a/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart b/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart index 5bf5ad7b..1e43eeff 100644 --- a/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart +++ b/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart @@ -1,21 +1,37 @@ // ignore_for_file: cascade_invocations, prefer_const_constructors +import 'dart:async'; + import 'package:bloc_test/bloc_test.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockingjay/mockingjay.dart'; import 'package:pinball/game/components/multipliers/behaviors/behaviors.dart'; import 'package:pinball/game/game.dart'; +import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); + final assets = [ + Assets.images.multiplier.x2.lit.keyName, + Assets.images.multiplier.x2.dimmed.keyName, + Assets.images.multiplier.x3.lit.keyName, + Assets.images.multiplier.x3.dimmed.keyName, + Assets.images.multiplier.x4.lit.keyName, + Assets.images.multiplier.x4.dimmed.keyName, + Assets.images.multiplier.x5.lit.keyName, + Assets.images.multiplier.x5.dimmed.keyName, + Assets.images.multiplier.x6.lit.keyName, + Assets.images.multiplier.x6.dimmed.keyName, + ]; group('MultipliersBehaviors', () { late GameBloc gameBloc; setUp(() { + registerFallbackValue(MockComponent()); gameBloc = MockGameBloc(); whenListen( gameBloc, @@ -27,6 +43,7 @@ void main() { final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () => gameBloc, + assets: assets, ); flameBlocTester.testGameWidget( @@ -34,18 +51,17 @@ void main() { setUp: (game, tester) async { final behavior = MultipliersBehavior(); final parent = Multipliers.test(); - final multipliers = [ - MockMultiplier(), - MockMultiplier(), - MockMultiplier(), - MockMultiplier(), - MockMultiplier(), - ]; + final multiplier = MockMultiplier(); + final multipliers = [multiplier]; + + final streamController = StreamController(); whenListen( gameBloc, - const Stream.empty(), + streamController.stream, initialState: GameState.initial(), ); + when(() => multiplier.addToParent(any())) + .thenAnswer((_) async => () {}); await parent.addAll(multipliers); await game.ensureAdd(parent); @@ -53,9 +69,14 @@ void main() { await tester.pump(); + streamController.add(GameState.initial().copyWith(score: 100)); + + await game.ready(); + await tester.pump(); + for (final multiplier in multipliers) { verify( - () => multiplier.bloc.toggle(1), + () => multiplier.bloc.toggle(any()), ).called(1); } }, diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index 001f5a9b..a7f57b3b 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -63,6 +63,8 @@ class MockFilter extends Mock implements Filter {} class MockFixture extends Mock implements Fixture {} +class MockComponent extends Mock implements Component {} + class MockComponentSet extends Mock implements ComponentSet {} class MockDashNestBumper extends Mock implements DashNestBumper {}