From 1cf52acf2ed227ebd9d04b2db5e01a084c93d0fe Mon Sep 17 00:00:00 2001 From: Allison Ryan Date: Mon, 9 May 2022 17:16:49 -0500 Subject: [PATCH] feat: flutter forest reset --- .../components/game_bloc_status_listener.dart | 5 + .../signpost/cubit/signpost_cubit.dart | 2 + .../signpost/cubit/signpost_cubit_test.dart | 7 ++ .../game_bloc_status_listener_test.dart | 100 ++++++++++++++++-- 4 files changed, 108 insertions(+), 6 deletions(-) diff --git a/lib/game/components/game_bloc_status_listener.dart b/lib/game/components/game_bloc_status_listener.dart index efd085a5..6ffd2ad3 100644 --- a/lib/game/components/game_bloc_status_listener.dart +++ b/lib/game/components/game_bloc_status_listener.dart @@ -61,6 +61,11 @@ class GameBlocStatusListener extends Component .single .bloc .onReset(); + gameRef + .descendants() + .whereType() + .forEach((bumper) => bumper.bloc.onReset()); + gameRef.descendants().whereType().single.bloc.onReset(); } void _addPlungerBehaviors(Plunger plunger) { diff --git a/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart b/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart index dc5bce9c..3beb638c 100644 --- a/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart +++ b/packages/pinball_components/lib/src/components/signpost/cubit/signpost_cubit.dart @@ -12,5 +12,7 @@ class SignpostCubit extends Cubit { ); } + void onReset() => emit(SignpostState.inactive); + bool isFullyProgressed() => state == SignpostState.active3; } diff --git a/packages/pinball_components/test/src/components/signpost/cubit/signpost_cubit_test.dart b/packages/pinball_components/test/src/components/signpost/cubit/signpost_cubit_test.dart index 081beab2..bd41aa33 100644 --- a/packages/pinball_components/test/src/components/signpost/cubit/signpost_cubit_test.dart +++ b/packages/pinball_components/test/src/components/signpost/cubit/signpost_cubit_test.dart @@ -22,6 +22,13 @@ void main() { ], ); + blocTest( + 'onReset emits inactive', + build: SignpostCubit.new, + act: (bloc) => bloc.onReset(), + expect: () => [SignpostState.inactive], + ); + test('isFullyProgressed when on active3', () { final bloc = SignpostCubit(); expect(bloc.isFullyProgressed(), isFalse); diff --git a/test/game/components/game_bloc_status_listener_test.dart b/test/game/components/game_bloc_status_listener_test.dart index 47a273ba..069731fd 100644 --- a/test/game/components/game_bloc_status_listener_test.dart +++ b/test/game/components/game_bloc_status_listener_test.dart @@ -86,6 +86,10 @@ class _MockPlungerCubit extends Mock implements PlungerCubit {} class _MockGoogleWordCubit extends Mock implements GoogleWordCubit {} +class _MockDashBumperCubit extends Mock implements DashBumperCubit {} + +class _MockSignpostCubit extends Mock implements SignpostCubit {} + class _MockFlipperCubit extends Mock implements FlipperCubit {} class _MockAppLocalizations extends Mock implements AppLocalizations { @@ -332,7 +336,15 @@ void main() { (game) async { final audioPlayer = _MockPinballAudioPlayer(); final component = GameBlocStatusListener(); - await game.pump([component], pinballAudioPlayer: audioPlayer); + await game.pump( + [ + component, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ], + pinballAudioPlayer: audioPlayer, + ); expect(state.status, equals(GameStatus.playing)); component.onNewState(state); @@ -350,7 +362,15 @@ void main() { (game) async { final googleWordBloc = _MockGoogleWordCubit(); final component = GameBlocStatusListener(); - await game.pump([component], googleWordBloc: googleWordBloc); + await game.pump( + [ + component, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ], + googleWordBloc: googleWordBloc, + ); expect(state.status, equals(GameStatus.playing)); component.onNewState(state); @@ -359,6 +379,46 @@ void main() { }, ); + flameTester.test( + 'resets the DashBumperCubits', + (game) async { + final dashBumper1Bloc = _MockDashBumperCubit(); + final dashBumper2Bloc = _MockDashBumperCubit(); + final dashBumper1 = DashBumper.test(bloc: dashBumper1Bloc); + final dashBumper2 = DashBumper.test(bloc: dashBumper2Bloc); + final component = GameBlocStatusListener(); + await game.pump([ + component, + dashBumper1, + dashBumper2, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ]); + + expect(state.status, equals(GameStatus.playing)); + component.onNewState(state); + + verify(dashBumper1Bloc.onReset).called(1); + verify(dashBumper2Bloc.onReset).called(1); + }, + ); + + flameTester.test( + 'resets the SignpostCubit', + (game) async { + final signpostBloc = _MockSignpostCubit(); + final signpost = Signpost.test(bloc: signpostBloc); + final component = GameBlocStatusListener(); + await game.pump([component, signpost]); + + expect(state.status, equals(GameStatus.playing)); + component.onNewState(state); + + verify(signpostBloc.onReset).called(1); + }, + ); + flameTester.test( 'adds FlipperKeyControllingBehavior to Flippers', (game) async { @@ -372,7 +432,14 @@ void main() { ); final flipper = Flipper.test(side: BoardSide.left); - await game.pump([component, backbox, flipper]); + await game.pump([ + component, + backbox, + flipper, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ]); await flipper.ensureAdd( FlameBlocProvider( create: _MockFlipperCubit.new, @@ -407,7 +474,14 @@ void main() { ); final plunger = Plunger.test(); await game.pump( - [component, backbox, plunger], + [ + component, + backbox, + plunger, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ], platformHelper: platformHelper, ); await plunger.ensureAdd( @@ -446,7 +520,14 @@ void main() { ); final plunger = Plunger.test(); await game.pump( - [component, backbox, plunger], + [ + component, + backbox, + plunger, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ], platformHelper: platformHelper, ); await plunger.ensureAdd( @@ -482,7 +563,14 @@ void main() { ); final plunger = Plunger.test(); await game.pump( - [component, backbox, plunger], + [ + component, + backbox, + plunger, + Signpost.test( + bloc: _MockSignpostCubit(), + ), + ], platformHelper: platformHelper, ); await plunger.ensureAdd(