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 'package:flame/components.dart';
import 'package:flame_bloc/flame_bloc.dart';
import 'package:flutter/material.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball_components/pinball_components.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.
/// {@endtemplate}
class MultipliersGroup extends Component
with Controls<_MultipliersController>, HasGameRef<PinballGame> {
with Controls<MultipliersController>, HasGameRef<PinballGame> {
/// {@macro multipliers_group_component}
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
Future<void> onLoad() async {
await super.onLoad();
_x2multiplier = Multiplier(
x2multiplier = Multiplier(
value: 2,
position: Vector2(-19.5, -2),
rotation: -15 * math.pi / 180,
);
_x3multiplier = Multiplier(
x3multiplier = Multiplier(
value: 3,
position: Vector2(13, -9.5),
rotation: 15 * math.pi / 180,
);
_x4multiplier = Multiplier(
x4multiplier = Multiplier(
value: 4,
position: Vector2(0, -21),
);
_x5multiplier = Multiplier(
x5multiplier = Multiplier(
value: 5,
position: Vector2(-8.5, -28),
rotation: -3 * math.pi / 180,
);
_x6multiplier = Multiplier(
x6multiplier = Multiplier(
value: 6,
position: Vector2(10, -31),
rotation: 8 * math.pi / 180,
);
await addAll([
_x2multiplier,
_x3multiplier,
_x4multiplier,
_x5multiplier,
_x6multiplier,
x2multiplier,
x3multiplier,
x4multiplier,
x5multiplier,
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> {
_MultipliersController(MultipliersGroup multipliersGroup)
/// {@macro multipliers_controller}
MultipliersController(MultipliersGroup multipliersGroup)
: super(multipliersGroup);
@override
@ -86,10 +93,10 @@ class _MultipliersController extends ComponentController<MultipliersGroup>
// https://github.com/VGVentures/pinball/pull/213.
final currentMultiplier = state.score.bitLength % 6 + 1;
component._x2multiplier.toggle(currentMultiplier);
component._x3multiplier.toggle(currentMultiplier);
component._x4multiplier.toggle(currentMultiplier);
component._x5multiplier.toggle(currentMultiplier);
component._x6multiplier.toggle(currentMultiplier);
component.x2multiplier.toggle(currentMultiplier);
component.x3multiplier.toggle(currentMultiplier);
component.x4multiplier.toggle(currentMultiplier);
component.x5multiplier.toggle(currentMultiplier);
component.x6multiplier.toggle(currentMultiplier);
}
}

@ -2,6 +2,7 @@
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';
@ -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 MockSparkyBumper extends Mock implements SparkyBumper {}
class MockMultiplier extends Mock implements Multiplier {}
class MockMultipliersGroup extends Mock implements MultipliersGroup {}

Loading…
Cancel
Save