From 97faeda825d6e95b6d4252ecffaab4a8d41334ca Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Sat, 30 Apr 2022 19:28:17 +0200 Subject: [PATCH] test: coverage multiballs --- .../multiball_blinking_behavior.dart | 13 +++- .../multiball_blinking_behavior_test.dart | 66 ++++++++++++++++++- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart b/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart index fbea7f22..2ea8f193 100644 --- a/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart @@ -1,4 +1,5 @@ import 'package:flame/components.dart'; +import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -9,17 +10,23 @@ import 'package:pinball_flame/pinball_flame.dart'; class MultiballBlinkingBehavior extends TimerComponent with ParentIsA { /// {@macro multiball_blinking_behavior} - MultiballBlinkingBehavior() : super(period: 0.1); + MultiballBlinkingBehavior() : super(period: 0.5); final _maxBlinks = 10; + int _blinksCounter = 0; + bool _isAnimating = false; - void _onNewState(MultiballState state) { + @visibleForTesting + // ignore: public_member_api_docs + void onNewState(MultiballState state) { final animationEnabled = state.animationState == MultiballAnimationState.animated; final canBlink = _blinksCounter < _maxBlinks; + print("onNewState ${animationEnabled}"); + print("onNewState ${canBlink}"); if (animationEnabled && canBlink) { _start(); } else { @@ -54,7 +61,7 @@ class MultiballBlinkingBehavior extends TimerComponent @override Future onLoad() async { await super.onLoad(); - parent.bloc.stream.listen(_onNewState); + parent.bloc.stream.listen(onNewState); } @override 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 index 5a0910d0..1c43f549 100644 --- 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 @@ -77,7 +77,6 @@ void main() { ), ); await tester.pump(); - game.update(0.1); streamController.add( MultiballState( @@ -85,12 +84,75 @@ void main() { lightState: MultiballLightState.lit, ), ); - await tester.pump(); await streamController.close(); verify(bloc.onStop).called(1); }, ); + + flameTester.testGameWidget( + 'onTick stops when there is no animation', + setUp: (game, tester) async { + final behavior = MultiballBlinkingBehavior(); + final bloc = MockMultiballCubit(); + final streamController = StreamController(); + whenListen( + bloc, + streamController.stream, + initialState: MultiballState.initial(), + ); + when(bloc.onBlink).thenAnswer((_) async {}); + + final multiball = Multiball.test(bloc: bloc); + await multiball.add(behavior); + await game.ensureAdd(multiball); + + streamController.add( + MultiballState( + animationState: MultiballAnimationState.stopped, + lightState: MultiballLightState.lit, + ), + ); + await tester.pump(); + + behavior.onTick(); + + expect(behavior.timer.isRunning(), false); + }, + ); + + flameTester.testGameWidget( + 'onTick stops after 10 blinks repetitions', + setUp: (game, tester) async { + final behavior = MultiballBlinkingBehavior(); + final bloc = MockMultiballCubit(); + final streamController = StreamController(); + whenListen( + bloc, + streamController.stream, + initialState: MultiballState.initial(), + ); + when(bloc.onBlink).thenAnswer((_) async {}); + + final multiball = Multiball.test(bloc: bloc); + await multiball.add(behavior); + await game.ensureAdd(multiball); + + streamController.add( + MultiballState( + animationState: MultiballAnimationState.animated, + lightState: MultiballLightState.dimmed, + ), + ); + await tester.pump(); + + for (var i = 0; i < 10; i++) { + behavior.onTick(); + } + + expect(behavior.timer.isRunning(), false); + }, + ); }, ); }