From 5ab63fd906cc63da40d8f23e90d0129665143770 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Tue, 26 Apr 2022 17:55:04 +0200 Subject: [PATCH] refactor: coverage for multiplier --- .../lib/src/components/multiplier.dart | 18 +- .../test/src/components/multiplier_test.dart | 172 ++++++++++++++++++ 2 files changed, 181 insertions(+), 9 deletions(-) diff --git a/packages/pinball_components/lib/src/components/multiplier.dart b/packages/pinball_components/lib/src/components/multiplier.dart index e9775884..ea5ead10 100644 --- a/packages/pinball_components/lib/src/components/multiplier.dart +++ b/packages/pinball_components/lib/src/components/multiplier.dart @@ -11,7 +11,11 @@ class Multiplier extends Component { required int value, required Vector2 position, double rotation = 0, - }) : _value = value, + }) : assert( + 2 <= value && value <= 6, + 'multiplier value must be in range 2 <= value <= 6', + ), + _value = value, _position = position, _rotation = rotation, super(); @@ -35,8 +39,8 @@ class Multiplier extends Component { Future onLoad() async { await super.onLoad(); - String onAssetPath; - String offAssetPath; + String? onAssetPath; + String? offAssetPath; switch (_value) { case 2: @@ -59,16 +63,12 @@ class Multiplier extends Component { onAssetPath = Assets.images.multiplier.x6.active.keyName; offAssetPath = Assets.images.multiplier.x6.inactive.keyName; break; - default: - onAssetPath = Assets.images.multiplier.x2.active.keyName; - offAssetPath = Assets.images.multiplier.x2.inactive.keyName; - break; } _sprite = MultiplierSpriteGroupComponent( position: _position, - onAssetPath: onAssetPath, - offAssetPath: offAssetPath, + onAssetPath: onAssetPath!, + offAssetPath: offAssetPath!, )..angle = _rotation; await add(_sprite); diff --git a/packages/pinball_components/test/src/components/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier_test.dart index 1f34aa58..92909902 100644 --- a/packages/pinball_components/test/src/components/multiplier_test.dart +++ b/packages/pinball_components/test/src/components/multiplier_test.dart @@ -24,6 +24,23 @@ void main() { ]; final flameTester = FlameTester(() => TestGame(assets)); + test('fails if multiplier value is not in range', () { + expect( + () => Multiplier( + value: 1, + position: Vector2.zero(), + ), + throwsA(isA()), + ); + expect( + () => Multiplier( + value: 7, + position: Vector2.zero(), + ), + throwsA(isA()), + ); + }); + group('renders correctly', () { flameTester.testGameWidget( 'x2 active', @@ -86,6 +103,37 @@ void main() { }, ); + flameTester.testGameWidget( + 'x2 deactivated when different multiply value', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + final multiplier = Multiplier( + value: 2, + position: Vector2.zero(), + ); + await game.ensureAdd(multiplier); + multiplier.toggle(1); + await tester.pump(); + + expect( + multiplier.children + .whereType() + .first + .current, + MultiplierSpriteState.inactive, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x2-inactive.png'), + ); + }, + ); + flameTester.testGameWidget( 'x3 active', setUp: (game, tester) async { @@ -148,6 +196,37 @@ void main() { }, ); + flameTester.testGameWidget( + 'x3 deactivated when different multiply value', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + final multiplier = Multiplier( + value: 3, + position: Vector2.zero(), + ); + await game.ensureAdd(multiplier); + multiplier.toggle(1); + await tester.pump(); + + expect( + multiplier.children + .whereType() + .first + .current, + MultiplierSpriteState.inactive, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x3-inactive.png'), + ); + }, + ); + flameTester.testGameWidget( 'x4 active', setUp: (game, tester) async { @@ -210,6 +289,37 @@ void main() { }, ); + flameTester.testGameWidget( + 'x4 deactivated when different multiply value', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + final multiplier = Multiplier( + value: 4, + position: Vector2.zero(), + ); + await game.ensureAdd(multiplier); + multiplier.toggle(1); + await tester.pump(); + + expect( + multiplier.children + .whereType() + .first + .current, + MultiplierSpriteState.inactive, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x4-inactive.png'), + ); + }, + ); + flameTester.testGameWidget( 'x5 active', setUp: (game, tester) async { @@ -272,6 +382,37 @@ void main() { }, ); + flameTester.testGameWidget( + 'x5 deactivated when different multiply value', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + final multiplier = Multiplier( + value: 5, + position: Vector2.zero(), + ); + await game.ensureAdd(multiplier); + multiplier.toggle(1); + await tester.pump(); + + expect( + multiplier.children + .whereType() + .first + .current, + MultiplierSpriteState.inactive, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x5-inactive.png'), + ); + }, + ); + flameTester.testGameWidget( 'x6 active', setUp: (game, tester) async { @@ -333,6 +474,37 @@ void main() { ); }, ); + + flameTester.testGameWidget( + 'x6 deactivated when different multiply value', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + final multiplier = Multiplier( + value: 6, + position: Vector2.zero(), + ); + await game.ensureAdd(multiplier); + multiplier.toggle(1); + await tester.pump(); + + expect( + multiplier.children + .whereType() + .first + .current, + MultiplierSpriteState.inactive, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x6-inactive.png'), + ); + }, + ); }); }); }