From 1d62aab82883973f07ec106b45cc0f7ed939c297 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Tue, 26 Apr 2022 19:14:48 +0200 Subject: [PATCH] test: coverage for multiplier --- .../components/controlled_multiplier.dart | 55 +++++++++++-------- .../controlled_multiplier_test.dart | 40 ++++++++++++++ test/helpers/mocks.dart | 4 ++ 3 files changed, 75 insertions(+), 24 deletions(-) diff --git a/lib/game/components/controlled_multiplier.dart b/lib/game/components/controlled_multiplier.dart index f25fcd02..7cd65b72 100644 --- a/lib/game/components/controlled_multiplier.dart +++ b/lib/game/components/controlled_multiplier.dart @@ -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 { + with Controls, HasGameRef { /// {@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 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 +/// {@template multipliers_controller} +/// Controller attached to a [MultipliersGroup] that handles its game related +/// logic. +/// {@endtemplate} +@visibleForTesting +class MultipliersController extends ComponentController with BlocComponent, HasGameRef { - _MultipliersController(MultipliersGroup multipliersGroup) + /// {@macro multipliers_controller} + MultipliersController(MultipliersGroup multipliersGroup) : super(multipliersGroup); @override @@ -86,10 +93,10 @@ class _MultipliersController extends ComponentController // 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); } } diff --git a/test/game/components/controlled_multiplier_test.dart b/test/game/components/controlled_multiplier_test.dart index 775151c7..d740ae5d 100644 --- a/test/game/components/controlled_multiplier_test.dart +++ b/test/game/components/controlled_multiplier_test.dart @@ -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); + }, + ); + }, + ); }); }); } diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart index 9b0f67c9..ba9e955d 100644 --- a/test/helpers/mocks.dart +++ b/test/helpers/mocks.dart @@ -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 {}