test: coverage for multiplier

pull/231/head
RuiAlonso 3 years ago
parent 5ab63fd906
commit 1d62aab828

@ -1,6 +1,7 @@
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flame/components.dart'; import 'package:flame/components.dart';
import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_bloc/flame_bloc.dart';
import 'package:flutter/material.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';
import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_flame/pinball_flame.dart';
@ -9,68 +10,74 @@ import 'package:pinball_flame/pinball_flame.dart';
/// A [SpriteGroupComponent] for the multiplier over the board. /// A [SpriteGroupComponent] for the multiplier over the board.
/// {@endtemplate} /// {@endtemplate}
class MultipliersGroup extends Component class MultipliersGroup extends Component
with Controls<_MultipliersController>, HasGameRef<PinballGame> { with Controls<MultipliersController>, HasGameRef<PinballGame> {
/// {@macro multipliers_group_component} /// {@macro multipliers_group_component}
MultipliersGroup() : super() { MultipliersGroup() : super() {
controller = _MultipliersController(this); controller = MultipliersController(this);
} }
late final Multiplier _x2multiplier; late final Multiplier x2multiplier;
late final Multiplier _x3multiplier; late final Multiplier x3multiplier;
late final Multiplier _x4multiplier; late final Multiplier x4multiplier;
late final Multiplier _x5multiplier; late final Multiplier x5multiplier;
late final Multiplier _x6multiplier; late final Multiplier x6multiplier;
@override @override
Future<void> onLoad() async { Future<void> onLoad() async {
await super.onLoad(); await super.onLoad();
_x2multiplier = Multiplier( x2multiplier = Multiplier(
value: 2, value: 2,
position: Vector2(-19.5, -2), position: Vector2(-19.5, -2),
rotation: -15 * math.pi / 180, rotation: -15 * math.pi / 180,
); );
_x3multiplier = Multiplier( x3multiplier = Multiplier(
value: 3, value: 3,
position: Vector2(13, -9.5), position: Vector2(13, -9.5),
rotation: 15 * math.pi / 180, rotation: 15 * math.pi / 180,
); );
_x4multiplier = Multiplier( x4multiplier = Multiplier(
value: 4, value: 4,
position: Vector2(0, -21), position: Vector2(0, -21),
); );
_x5multiplier = Multiplier( x5multiplier = Multiplier(
value: 5, value: 5,
position: Vector2(-8.5, -28), position: Vector2(-8.5, -28),
rotation: -3 * math.pi / 180, rotation: -3 * math.pi / 180,
); );
_x6multiplier = Multiplier( x6multiplier = Multiplier(
value: 6, value: 6,
position: Vector2(10, -31), position: Vector2(10, -31),
rotation: 8 * math.pi / 180, rotation: 8 * math.pi / 180,
); );
await addAll([ await addAll([
_x2multiplier, x2multiplier,
_x3multiplier, x3multiplier,
_x4multiplier, x4multiplier,
_x5multiplier, x5multiplier,
_x6multiplier, x6multiplier,
]); ]);
} }
} }
class _MultipliersController extends ComponentController<MultipliersGroup> /// {@template multipliers_controller}
/// Controller attached to a [MultipliersGroup] that handles its game related
/// logic.
/// {@endtemplate}
@visibleForTesting
class MultipliersController extends ComponentController<MultipliersGroup>
with BlocComponent<GameBloc, GameState>, HasGameRef<PinballGame> { with BlocComponent<GameBloc, GameState>, HasGameRef<PinballGame> {
_MultipliersController(MultipliersGroup multipliersGroup) /// {@macro multipliers_controller}
MultipliersController(MultipliersGroup multipliersGroup)
: super(multipliersGroup); : super(multipliersGroup);
@override @override
@ -86,10 +93,10 @@ class _MultipliersController extends ComponentController<MultipliersGroup>
// https://github.com/VGVentures/pinball/pull/213. // https://github.com/VGVentures/pinball/pull/213.
final currentMultiplier = state.score.bitLength % 6 + 1; final currentMultiplier = state.score.bitLength % 6 + 1;
component._x2multiplier.toggle(currentMultiplier); component.x2multiplier.toggle(currentMultiplier);
component._x3multiplier.toggle(currentMultiplier); component.x3multiplier.toggle(currentMultiplier);
component._x4multiplier.toggle(currentMultiplier); component.x4multiplier.toggle(currentMultiplier);
component._x5multiplier.toggle(currentMultiplier); component.x5multiplier.toggle(currentMultiplier);
component._x6multiplier.toggle(currentMultiplier); component.x6multiplier.toggle(currentMultiplier);
} }
} }

@ -2,6 +2,7 @@
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/game.dart'; import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/pinball_components.dart';
@ -84,6 +85,45 @@ void main() {
}, },
); );
}); });
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);
},
);
},
);
}); });
}); });
} }

@ -85,3 +85,7 @@ class MockGameFlowController extends Mock implements GameFlowController {}
class MockAlienBumper extends Mock implements AlienBumper {} class MockAlienBumper extends Mock implements AlienBumper {}
class MockSparkyBumper extends Mock implements SparkyBumper {} class MockSparkyBumper extends Mock implements SparkyBumper {}
class MockMultiplier extends Mock implements Multiplier {}
class MockMultipliersGroup extends Mock implements MultipliersGroup {}

Loading…
Cancel
Save