From 2bd3061ebf0cb617e725dba5bc96860e8dc2db6e Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Thu, 28 Apr 2022 17:47:46 +0200 Subject: [PATCH] test: tests for multiball --- .../test/helpers/mocks.dart | 2 + .../multiball_blinking_behavior_test.dart | 45 +++++++++++++ .../multiball/cubit/multiball_cubit_test.dart | 24 +++++++ .../{ => multiball}/multiball_test.dart | 64 ++++++++----------- 4 files changed, 99 insertions(+), 36 deletions(-) create mode 100644 packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart create mode 100644 packages/pinball_components/test/src/components/multiball/cubit/multiball_cubit_test.dart rename packages/pinball_components/test/src/components/{ => multiball}/multiball_test.dart (51%) diff --git a/packages/pinball_components/test/helpers/mocks.dart b/packages/pinball_components/test/helpers/mocks.dart index d69a6131..4f8de8d5 100644 --- a/packages/pinball_components/test/helpers/mocks.dart +++ b/packages/pinball_components/test/helpers/mocks.dart @@ -24,3 +24,5 @@ class MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {} class MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} class MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {} + +class MockMultiballCubit extends Mock implements MultiballCubit {} diff --git a/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart b/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart new file mode 100644 index 00000000..b636ddb1 --- /dev/null +++ b/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart @@ -0,0 +1,45 @@ +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:mocktail/mocktail.dart'; +import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_components/src/components/multiball/behaviors/behaviors.dart'; + +import '../../../../helpers/helpers.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + final flameTester = FlameTester(TestGame.new); + + group( + 'MultiballBlinkingBehavior', + () { + flameTester.testGameWidget( + 'calls onBlinked after 0.05 seconds when inactive', + setUp: (game, tester) async { + final behavior = MultiballBlinkingBehavior(); + final bloc = MockMultiballCubit(); + final streamController = StreamController(); + whenListen( + bloc, + streamController.stream, + initialState: MultiballState.dimmed, + ); + + final multiball = Multiball.test(bloc: bloc); + await multiball.add(behavior); + await game.ensureAdd(multiball); + + streamController.add(MultiballState.lit); + await tester.pump(); + game.update(0.05); + + await streamController.close(); + verify(bloc.onBlinked).called(1); + }, + ); + }, + ); +} diff --git a/packages/pinball_components/test/src/components/multiball/cubit/multiball_cubit_test.dart b/packages/pinball_components/test/src/components/multiball/cubit/multiball_cubit_test.dart new file mode 100644 index 00000000..dbb75abd --- /dev/null +++ b/packages/pinball_components/test/src/components/multiball/cubit/multiball_cubit_test.dart @@ -0,0 +1,24 @@ +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_components/pinball_components.dart'; + +void main() { + group( + 'MultiballCubit', + () { + blocTest( + 'animate emits lit', + build: MultiballCubit.new, + act: (bloc) => bloc.animate(), + expect: () => [MultiballState.lit], + ); + + blocTest( + 'onBlinked emits dimmed', + build: MultiballCubit.new, + act: (bloc) => bloc.onBlinked(), + expect: () => [MultiballState.dimmed], + ); + }, + ); +} diff --git a/packages/pinball_components/test/src/components/multiball_test.dart b/packages/pinball_components/test/src/components/multiball/multiball_test.dart similarity index 51% rename from packages/pinball_components/test/src/components/multiball_test.dart rename to packages/pinball_components/test/src/components/multiball/multiball_test.dart index 660a2cae..af024db6 100644 --- a/packages/pinball_components/test/src/components/multiball_test.dart +++ b/packages/pinball_components/test/src/components/multiball/multiball_test.dart @@ -1,23 +1,25 @@ // ignore_for_file: cascade_invocations +import 'package:bloc_test/bloc_test.dart'; import 'package:flame/components.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:pinball_components/pinball_components.dart'; -import '../../helpers/helpers.dart'; +import '../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ - Assets.images.multiball.a.active.keyName, - Assets.images.multiball.a.inactive.keyName, - Assets.images.multiball.b.active.keyName, - Assets.images.multiball.b.inactive.keyName, - Assets.images.multiball.c.active.keyName, - Assets.images.multiball.c.inactive.keyName, - Assets.images.multiball.d.active.keyName, - Assets.images.multiball.d.inactive.keyName, + Assets.images.multiball.a.lit.keyName, + Assets.images.multiball.a.dimmed.keyName, + Assets.images.multiball.b.lit.keyName, + Assets.images.multiball.b.dimmed.keyName, + Assets.images.multiball.c.lit.keyName, + Assets.images.multiball.c.dimmed.keyName, + Assets.images.multiball.d.lit.keyName, + Assets.images.multiball.d.dimmed.keyName, ]; final flameTester = FlameTester(() => TestGame(assets)); @@ -50,34 +52,24 @@ void main() { }); }); - // TODO(ruimiguel): needs to add golden tests for multiball states. + flameTester.test( + 'closes bloc when removed', + (game) async { + final bloc = MockMultiballCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: MultiballState.dimmed, + ); + when(bloc.close).thenAnswer((_) async {}); + final multiball = Multiball.test(bloc: bloc); - flameTester.test('animate switches between on and off sprites', - (game) async { - final multiball = Multiball.a(); - await game.ensureAdd(multiball); - - final spriteGroupComponent = - multiball.firstChild()!; - - expect( - spriteGroupComponent.current, - equals(MultiballSpriteState.inactive), - ); - - final future = multiball.animate(); - - expect( - spriteGroupComponent.current, - equals(MultiballSpriteState.active), - ); - - await future; + await game.ensureAdd(multiball); + game.remove(multiball); + await game.ready(); - expect( - spriteGroupComponent.current, - equals(MultiballSpriteState.inactive), - ); - }); + verify(bloc.close).called(1); + }, + ); }); }