test: blink behavior

pull/235/head
RuiAlonso 3 years ago
parent 8fa865dae6
commit d1bbef31f1

@ -15,12 +15,12 @@ enum MultiballAnimationState {
} }
class MultiballState extends Equatable { class MultiballState extends Equatable {
MultiballState({ const MultiballState({
required this.lightState, required this.lightState,
required this.animationState, required this.animationState,
}); });
MultiballState.initial() const MultiballState.initial()
: this( : this(
lightState: MultiballLightState.dimmed, lightState: MultiballLightState.dimmed,
animationState: MultiballAnimationState.stopped, animationState: MultiballAnimationState.stopped,

@ -21,23 +21,28 @@ void main() {
setUp: (game, tester) async { setUp: (game, tester) async {
final behavior = MultiballBlinkingBehavior(); final behavior = MultiballBlinkingBehavior();
final bloc = MockMultiballCubit(); final bloc = MockMultiballCubit();
final streamController = StreamController<MultiballLightState>(); final streamController = StreamController<MultiballState>();
whenListen( whenListen(
bloc, bloc,
streamController.stream, streamController.stream,
initialState: MultiballLightState.dimmed, initialState: MultiballState.initial(),
); );
final multiball = Multiball.test(bloc: bloc); final multiball = Multiball.test(bloc: bloc);
await multiball.add(behavior); await multiball.add(behavior);
await game.ensureAdd(multiball); await game.ensureAdd(multiball);
streamController.add(MultiballLightState.lit); streamController.add(
MultiballState(
animationState: MultiballAnimationState.animated,
lightState: MultiballLightState.lit,
),
);
await tester.pump(); await tester.pump();
game.update(0.05); game.update(0.05);
await streamController.close(); await streamController.close();
verify(bloc.onDimmed).called(1); verify(bloc.onBlink).called(1);
}, },
); );
}, },

@ -1,8 +1,11 @@
// ignore_for_file: cascade_invocations
import 'dart:async'; import 'dart:async';
import 'package:bloc_test/bloc_test.dart'; import 'package:bloc_test/bloc_test.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/components/multiballs/behaviors/behaviors.dart'; import 'package:pinball/game/components/multiballs/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -33,5 +36,25 @@ void main() {
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets, assets: assets,
); );
flameBlocTester.testGameWidget(
'adds a new ball to the game when all bumpers are active',
setUp: (game, tester) async {
final behavior = MultiballsBehavior();
final parent = Multiballs.test();
final multiballs = [
Multiball.test(bloc: MockMultiballCubit()),
Multiball.test(bloc: MockMultiballCubit()),
Multiball.test(bloc: MockMultiballCubit()),
];
await parent.addAll(multiballs);
await game.ensureAdd(parent);
await parent.ensureAdd(behavior);
for (final multiball in multiballs) {
verify(() => multiball.bloc.onAnimate()).called(1);
}
},
);
}); });
} }

@ -93,3 +93,5 @@ class MockSparkyBumper extends Mock implements SparkyBumper {}
class MockMultiball extends Mock implements Multiball {} class MockMultiball extends Mock implements Multiball {}
class MockMultiballGroup extends Mock implements Multiballs {} class MockMultiballGroup extends Mock implements Multiballs {}
class MockMultiballCubit extends Mock implements MultiballCubit {}

Loading…
Cancel
Save