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: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<Multiball> {
/// {@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<void> onLoad() async {
await super.onLoad();
parent.bloc.stream.listen(_onNewState);
parent.bloc.stream.listen(onNewState);
}
@override

@ -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<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