test: coverage multiballs

pull/235/head
RuiAlonso 3 years ago
parent 47c9289d09
commit 97faeda825

@ -1,4 +1,5 @@
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flutter/material.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
@ -9,17 +10,23 @@ import 'package:pinball_flame/pinball_flame.dart';
class MultiballBlinkingBehavior extends TimerComponent class MultiballBlinkingBehavior extends TimerComponent
with ParentIsA<Multiball> { with ParentIsA<Multiball> {
/// {@macro multiball_blinking_behavior} /// {@macro multiball_blinking_behavior}
MultiballBlinkingBehavior() : super(period: 0.1); MultiballBlinkingBehavior() : super(period: 0.5);
final _maxBlinks = 10; final _maxBlinks = 10;
int _blinksCounter = 0; int _blinksCounter = 0;
bool _isAnimating = false; bool _isAnimating = false;
void _onNewState(MultiballState state) { @visibleForTesting
// ignore: public_member_api_docs
void onNewState(MultiballState state) {
final animationEnabled = final animationEnabled =
state.animationState == MultiballAnimationState.animated; state.animationState == MultiballAnimationState.animated;
final canBlink = _blinksCounter < _maxBlinks; final canBlink = _blinksCounter < _maxBlinks;
print("onNewState ${animationEnabled}");
print("onNewState ${canBlink}");
if (animationEnabled && canBlink) { if (animationEnabled && canBlink) {
_start(); _start();
} else { } else {
@ -54,7 +61,7 @@ class MultiballBlinkingBehavior extends TimerComponent
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
parent.bloc.stream.listen(_onNewState); parent.bloc.stream.listen(onNewState);
} }
@override @override

@ -77,7 +77,6 @@ void main() {
), ),
); );
await tester.pump(); await tester.pump();
game.update(0.1);
streamController.add( streamController.add(
MultiballState( MultiballState(
@ -85,12 +84,75 @@ void main() {
lightState: MultiballLightState.lit, lightState: MultiballLightState.lit,
), ),
); );
await tester.pump();
await streamController.close(); await streamController.close();
verify(bloc.onStop).called(1); 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<MultiballState>();
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<MultiballState>();
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);
},
);
}, },
); );
} }

Loading…
Cancel
Save