test: tests for multiball

pull/235/head
RuiAlonso 3 years ago
parent 4fa430fd77
commit 2bd3061ebf

@ -24,3 +24,5 @@ class MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {}
class MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {}
class MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {}
class MockMultiballCubit extends Mock implements MultiballCubit {}

@ -0,0 +1,45 @@
import 'dart:async';
import 'package:bloc_test/bloc_test.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball_components/pinball_components.dart';
import 'package:pinball_components/src/components/multiball/behaviors/behaviors.dart';
import '../../../../helpers/helpers.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final flameTester = FlameTester(TestGame.new);
group(
'MultiballBlinkingBehavior',
() {
flameTester.testGameWidget(
'calls onBlinked after 0.05 seconds when inactive',
setUp: (game, tester) async {
final behavior = MultiballBlinkingBehavior();
final bloc = MockMultiballCubit();
final streamController = StreamController<MultiballState>();
whenListen(
bloc,
streamController.stream,
initialState: MultiballState.dimmed,
);
final multiball = Multiball.test(bloc: bloc);
await multiball.add(behavior);
await game.ensureAdd(multiball);
streamController.add(MultiballState.lit);
await tester.pump();
game.update(0.05);
await streamController.close();
verify(bloc.onBlinked).called(1);
},
);
},
);
}

@ -0,0 +1,24 @@
import 'package:bloc_test/bloc_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball_components/pinball_components.dart';
void main() {
group(
'MultiballCubit',
() {
blocTest<MultiballCubit, MultiballState>(
'animate emits lit',
build: MultiballCubit.new,
act: (bloc) => bloc.animate(),
expect: () => [MultiballState.lit],
);
blocTest<MultiballCubit, MultiballState>(
'onBlinked emits dimmed',
build: MultiballCubit.new,
act: (bloc) => bloc.onBlinked(),
expect: () => [MultiballState.dimmed],
);
},
);
}

@ -1,23 +1,25 @@
// ignore_for_file: cascade_invocations
import 'package:bloc_test/bloc_test.dart';
import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball_components/pinball_components.dart';
import '../../helpers/helpers.dart';
import '../../../helpers/helpers.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
Assets.images.multiball.a.active.keyName,
Assets.images.multiball.a.inactive.keyName,
Assets.images.multiball.b.active.keyName,
Assets.images.multiball.b.inactive.keyName,
Assets.images.multiball.c.active.keyName,
Assets.images.multiball.c.inactive.keyName,
Assets.images.multiball.d.active.keyName,
Assets.images.multiball.d.inactive.keyName,
Assets.images.multiball.a.lit.keyName,
Assets.images.multiball.a.dimmed.keyName,
Assets.images.multiball.b.lit.keyName,
Assets.images.multiball.b.dimmed.keyName,
Assets.images.multiball.c.lit.keyName,
Assets.images.multiball.c.dimmed.keyName,
Assets.images.multiball.d.lit.keyName,
Assets.images.multiball.d.dimmed.keyName,
];
final flameTester = FlameTester(() => TestGame(assets));
@ -50,34 +52,24 @@ void main() {
});
});
// TODO(ruimiguel): needs to add golden tests for multiball states.
flameTester.test(
'closes bloc when removed',
(game) async {
final bloc = MockMultiballCubit();
whenListen(
bloc,
const Stream<MultiballState>.empty(),
initialState: MultiballState.dimmed,
);
when(bloc.close).thenAnswer((_) async {});
final multiball = Multiball.test(bloc: bloc);
flameTester.test('animate switches between on and off sprites',
(game) async {
final multiball = Multiball.a();
await game.ensureAdd(multiball);
final spriteGroupComponent =
multiball.firstChild<SpriteGroupComponent>()!;
expect(
spriteGroupComponent.current,
equals(MultiballSpriteState.inactive),
);
final future = multiball.animate();
expect(
spriteGroupComponent.current,
equals(MultiballSpriteState.active),
);
await future;
await game.ensureAdd(multiball);
game.remove(multiball);
await game.ready();
expect(
spriteGroupComponent.current,
equals(MultiballSpriteState.inactive),
);
});
verify(bloc.close).called(1);
},
);
});
}
Loading…
Cancel
Save