test: tests for multiplier behavior

pull/231/head
RuiAlonso 3 years ago
parent bc9e290e61
commit 2390682596

@ -1,129 +0,0 @@
// ignore_for_file: cascade_invocations
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart';
import '../../helpers/helpers.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
Assets.images.multiplier.x2.lit.keyName,
Assets.images.multiplier.x2.dimmed.keyName,
Assets.images.multiplier.x3.lit.keyName,
Assets.images.multiplier.x3.dimmed.keyName,
Assets.images.multiplier.x4.lit.keyName,
Assets.images.multiplier.x4.dimmed.keyName,
Assets.images.multiplier.x5.lit.keyName,
Assets.images.multiplier.x5.dimmed.keyName,
Assets.images.multiplier.x6.lit.keyName,
Assets.images.multiplier.x6.dimmed.keyName,
];
final flameTester = FlameTester(() => EmptyPinballTestGame(assets));
group('MultipliersGroup', () {
flameTester.test(
'loads correctly',
(game) async {
final multipliersGroup = Multipliers();
await game.ensureAdd(multipliersGroup);
expect(game.contains(multipliersGroup), isTrue);
},
);
group('loads', () {
flameTester.test(
'five Multiplier',
(game) async {
final multipliersGroup = Multipliers();
await game.ensureAdd(multipliersGroup);
expect(
multipliersGroup.descendants().whereType<Multiplier>().length,
equals(5),
);
},
);
});
});
group('MultipliersController', () {
group('controller', () {
// TODO(ruimiguel): change these tests to check multiplier change.
group('listenWhen', () {
flameTester.test(
'listens when score has changed',
(game) async {
const previous = GameState.initial();
final state = previous.copyWith(score: 100);
final multipliersGroup = Multipliers();
await game.ensureAdd(multipliersGroup);
expect(
multipliersGroup.controller.listenWhen(previous, state),
isTrue,
);
},
);
flameTester.test(
"doesn't listen when score is the same",
(game) async {
const previous = GameState.initial();
final multipliersGroup = Multipliers();
await game.ensureAdd(multipliersGroup);
expect(
multipliersGroup.controller.listenWhen(previous, previous),
isFalse,
);
},
);
});
group(
'onNewState',
() {
flameTester.test(
'toggle multipliers when state changes',
(game) async {
final multipliersGroup = MockMultipliersGroup();
final x2multiplier = MockMultiplier();
final x3multiplier = MockMultiplier();
final x4multiplier = MockMultiplier();
final x5multiplier = MockMultiplier();
final x6multiplier = MockMultiplier();
final controller = MultipliersController(multipliersGroup);
when(() => multipliersGroup.x2multiplier)
.thenReturn(x2multiplier);
when(() => multipliersGroup.x3multiplier)
.thenReturn(x3multiplier);
when(() => multipliersGroup.x4multiplier)
.thenReturn(x4multiplier);
when(() => multipliersGroup.x5multiplier)
.thenReturn(x5multiplier);
when(() => multipliersGroup.x6multiplier)
.thenReturn(x6multiplier);
controller.onNewState(
const GameState.initial().copyWith(score: 6),
);
// TODO(ruimiguel): verify toggle with state.multiplier value.
verify(() => x2multiplier.toggle(any())).called(1);
verify(() => x3multiplier.toggle(any())).called(1);
verify(() => x4multiplier.toggle(any())).called(1);
verify(() => x5multiplier.toggle(any())).called(1);
verify(() => x6multiplier.toggle(any())).called(1);
},
);
},
);
});
});
}

@ -1,21 +1,37 @@
// ignore_for_file: cascade_invocations, prefer_const_constructors // ignore_for_file: cascade_invocations, prefer_const_constructors
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:mockingjay/mockingjay.dart'; import 'package:mockingjay/mockingjay.dart';
import 'package:pinball/game/components/multipliers/behaviors/behaviors.dart'; import 'package:pinball/game/components/multipliers/behaviors/behaviors.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart';
import '../../../../helpers/helpers.dart'; import '../../../../helpers/helpers.dart';
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized(); TestWidgetsFlutterBinding.ensureInitialized();
final assets = [
Assets.images.multiplier.x2.lit.keyName,
Assets.images.multiplier.x2.dimmed.keyName,
Assets.images.multiplier.x3.lit.keyName,
Assets.images.multiplier.x3.dimmed.keyName,
Assets.images.multiplier.x4.lit.keyName,
Assets.images.multiplier.x4.dimmed.keyName,
Assets.images.multiplier.x5.lit.keyName,
Assets.images.multiplier.x5.dimmed.keyName,
Assets.images.multiplier.x6.lit.keyName,
Assets.images.multiplier.x6.dimmed.keyName,
];
group('MultipliersBehaviors', () { group('MultipliersBehaviors', () {
late GameBloc gameBloc; late GameBloc gameBloc;
setUp(() { setUp(() {
registerFallbackValue(MockComponent());
gameBloc = MockGameBloc(); gameBloc = MockGameBloc();
whenListen( whenListen(
gameBloc, gameBloc,
@ -27,6 +43,7 @@ void main() {
final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>( final flameBlocTester = FlameBlocTester<PinballGame, GameBloc>(
gameBuilder: EmptyPinballTestGame.new, gameBuilder: EmptyPinballTestGame.new,
blocBuilder: () => gameBloc, blocBuilder: () => gameBloc,
assets: assets,
); );
flameBlocTester.testGameWidget( flameBlocTester.testGameWidget(
@ -34,18 +51,17 @@ void main() {
setUp: (game, tester) async { setUp: (game, tester) async {
final behavior = MultipliersBehavior(); final behavior = MultipliersBehavior();
final parent = Multipliers.test(); final parent = Multipliers.test();
final multipliers = [ final multiplier = MockMultiplier();
MockMultiplier(), final multipliers = [multiplier];
MockMultiplier(),
MockMultiplier(), final streamController = StreamController<GameState>();
MockMultiplier(),
MockMultiplier(),
];
whenListen( whenListen(
gameBloc, gameBloc,
const Stream<GameState>.empty(), streamController.stream,
initialState: GameState.initial(), initialState: GameState.initial(),
); );
when(() => multiplier.addToParent(any()))
.thenAnswer((_) async => () {});
await parent.addAll(multipliers); await parent.addAll(multipliers);
await game.ensureAdd(parent); await game.ensureAdd(parent);
@ -53,9 +69,14 @@ void main() {
await tester.pump(); await tester.pump();
streamController.add(GameState.initial().copyWith(score: 100));
await game.ready();
await tester.pump();
for (final multiplier in multipliers) { for (final multiplier in multipliers) {
verify( verify(
() => multiplier.bloc.toggle(1), () => multiplier.bloc.toggle(any()),
).called(1); ).called(1);
} }
}, },

@ -63,6 +63,8 @@ class MockFilter extends Mock implements Filter {}
class MockFixture extends Mock implements Fixture {} class MockFixture extends Mock implements Fixture {}
class MockComponent extends Mock implements Component {}
class MockComponentSet extends Mock implements ComponentSet {} class MockComponentSet extends Mock implements ComponentSet {}
class MockDashNestBumper extends Mock implements DashNestBumper {} class MockDashNestBumper extends Mock implements DashNestBumper {}

Loading…
Cancel
Save