diff --git a/packages/pinball_components/test/helpers/mocks.dart b/packages/pinball_components/test/helpers/mocks.dart index d69a6131..6bc01dc6 100644 --- a/packages/pinball_components/test/helpers/mocks.dart +++ b/packages/pinball_components/test/helpers/mocks.dart @@ -24,3 +24,5 @@ class MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {} class MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} class MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {} + +class MockMultiplierCubit extends Mock implements MultiplierCubit {} diff --git a/packages/pinball_components/test/src/components/multiplier/cubit/multiplier_cubit_test.dart b/packages/pinball_components/test/src/components/multiplier/cubit/multiplier_cubit_test.dart new file mode 100644 index 00000000..2ad3acea --- /dev/null +++ b/packages/pinball_components/test/src/components/multiplier/cubit/multiplier_cubit_test.dart @@ -0,0 +1,62 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:bloc_test/bloc_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_components/pinball_components.dart'; + +void main() { + group( + 'MultiplierCubit', + () { + blocTest( + 'emits [lit] when toggle dimmed with same multiplier value', + build: () => MultiplierCubit(MultiplierValue.x2), + act: (bloc) => bloc.toggle(2), + expect: () => [ + isA() + ..having( + (state) => state.spriteState, + 'spriteState', + MultiplierSpriteState.lit, + ), + ], + ); + + blocTest( + 'emits [dimmed] when toggle lit with different multiplier value', + build: () => MultiplierCubit(MultiplierValue.x2), + seed: () => MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ), + act: (bloc) => bloc.toggle(3), + expect: () => [ + isA() + ..having( + (state) => state.spriteState, + 'spriteState', + MultiplierSpriteState.dimmed, + ), + ], + ); + + blocTest( + 'emits nothing when toggle lit with same multiplier value', + build: () => MultiplierCubit(MultiplierValue.x2), + seed: () => MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ), + act: (bloc) => bloc.toggle(2), + expect: () => [], + ); + + blocTest( + 'emits nothing when toggle dimmed with different multiplier value', + build: () => MultiplierCubit(MultiplierValue.x2), + act: (bloc) => bloc.toggle(3), + expect: () => [], + ); + }, + ); +} diff --git a/packages/pinball_components/test/src/components/multiplier/cubit/multiplier_state_test.dart b/packages/pinball_components/test/src/components/multiplier/cubit/multiplier_state_test.dart new file mode 100644 index 00000000..9789d7c5 --- /dev/null +++ b/packages/pinball_components/test/src/components/multiplier/cubit/multiplier_state_test.dart @@ -0,0 +1,75 @@ +// ignore_for_file: prefer_const_constructors + +import 'package:flutter_test/flutter_test.dart'; +import 'package:pinball_components/src/pinball_components.dart'; + +void main() { + group('MultiplierState', () { + test('supports value equality', () { + expect( + MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ), + equals( + MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ), + ), + ); + }); + + group('constructor', () { + test('can be instantiated', () { + expect( + MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ), + isNotNull, + ); + }); + }); + + group('copyWith', () { + test( + 'copies correctly ' + 'when no argument specified', + () { + const multiplierState = MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ); + expect( + multiplierState.copyWith(), + equals(multiplierState), + ); + }, + ); + + test( + 'copies correctly ' + 'when all arguments specified', + () { + const multiplierState = MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.lit, + ); + final otherMultiplierState = MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.dimmed, + ); + expect(multiplierState, isNot(equals(otherMultiplierState))); + + expect( + multiplierState.copyWith( + spriteState: MultiplierSpriteState.dimmed, + ), + equals(otherMultiplierState), + ); + }, + ); + }); + }); +} diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-active.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-active.png new file mode 100644 index 00000000..94001e27 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-active.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-dimmed.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-dimmed.png new file mode 100644 index 00000000..ca2d8bf1 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-dimmed.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-inactive.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-inactive.png new file mode 100644 index 00000000..ca2d8bf1 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-inactive.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-lit.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-lit.png new file mode 100644 index 00000000..94001e27 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x2-lit.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x3-dimmed.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x3-dimmed.png new file mode 100644 index 00000000..4727ea3e Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x3-dimmed.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x3-lit.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x3-lit.png new file mode 100644 index 00000000..f2f84178 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x3-lit.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x4-dimmed.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x4-dimmed.png new file mode 100644 index 00000000..76c84994 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x4-dimmed.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x4-lit.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x4-lit.png new file mode 100644 index 00000000..b4918e62 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x4-lit.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x5-dimmed.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x5-dimmed.png new file mode 100644 index 00000000..2bbbf1ef Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x5-dimmed.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x5-lit.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x5-lit.png new file mode 100644 index 00000000..5e750af8 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x5-lit.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x6-dimmed.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x6-dimmed.png new file mode 100644 index 00000000..aff09619 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x6-dimmed.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x6-lit.png b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x6-lit.png new file mode 100644 index 00000000..7e5edc10 Binary files /dev/null and b/packages/pinball_components/test/src/components/multiplier/golden/multipliers/x6-lit.png differ diff --git a/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart new file mode 100644 index 00000000..85134b54 --- /dev/null +++ b/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart @@ -0,0 +1,472 @@ +// ignore_for_file: cascade_invocations, prefer_const_constructors + +import 'package:bloc_test/bloc_test.dart'; +import 'package:flame/components.dart'; +import 'package:flame_test/flame_test.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:pinball_components/pinball_components.dart'; + +import '../../../helpers/helpers.dart'; + +void main() { + final bloc = MockMultiplierCubit(); + + group('MultiplierSpriteGroupComponent', () { + 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(() => TestGame(assets)); + + group('renders correctly', () { + group('x2', () { + const multiplierValue = MultiplierValue.x2; + + flameTester.testGameWidget( + 'lit when bloc state is lit', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.lit, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.lit, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x2-lit.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dimmed when bloc state is dimmed', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.dimmed, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.dimmed, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x2-dimmed.png'), + ); + }, + ); + }); + + group('x3', () { + const multiplierValue = MultiplierValue.x3; + + flameTester.testGameWidget( + 'lit when bloc state is lit', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.lit, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.lit, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x3-lit.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dimmed when bloc state is dimmed', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.dimmed, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.dimmed, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x3-dimmed.png'), + ); + }, + ); + }); + + group('x4', () { + const multiplierValue = MultiplierValue.x4; + + flameTester.testGameWidget( + 'lit when bloc state is lit', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.lit, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.lit, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x4-lit.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dimmed when bloc state is dimmed', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.dimmed, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.dimmed, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x4-dimmed.png'), + ); + }, + ); + }); + + group('x5', () { + const multiplierValue = MultiplierValue.x5; + + flameTester.testGameWidget( + 'lit when bloc state is lit', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.lit, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.lit, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x5-lit.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dimmed when bloc state is dimmed', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.dimmed, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.dimmed, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x5-dimmed.png'), + ); + }, + ); + }); + + group('x6', () { + const multiplierValue = MultiplierValue.x6; + + flameTester.testGameWidget( + 'lit when bloc state is lit', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.lit, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.lit, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x6-lit.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dimmed when bloc state is dimmed', + setUp: (game, tester) async { + await game.images.loadAll(assets); + + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: multiplierValue, + spriteState: MultiplierSpriteState.dimmed, + ), + ); + + final multiplier = Multiplier.test( + value: multiplierValue, + bloc: bloc, + ); + await game.ensureAdd(multiplier); + await tester.pump(); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + expect( + game + .descendants() + .whereType() + .first + .current, + MultiplierSpriteState.dimmed, + ); + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x6-dimmed.png'), + ); + }, + ); + }); + }); + + flameTester.test('closes bloc when removed', (game) async { + whenListen( + bloc, + const Stream.empty(), + initialState: MultiplierState( + value: MultiplierValue.x2, + spriteState: MultiplierSpriteState.dimmed, + ), + ); + when(bloc.close).thenAnswer((_) async {}); + final multiplier = Multiplier.test(value: MultiplierValue.x2, bloc: bloc); + + await game.ensureAdd(multiplier); + game.remove(multiplier); + await game.ready(); + + verify(bloc.close).called(1); + }); + }); +} diff --git a/packages/pinball_components/test/src/components/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier_test.dart deleted file mode 100644 index 1f508fad..00000000 --- a/packages/pinball_components/test/src/components/multiplier_test.dart +++ /dev/null @@ -1,483 +0,0 @@ -// ignore_for_file: cascade_invocations - -import 'package:flame/components.dart'; -import 'package:flame_test/flame_test.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:pinball_components/pinball_components.dart'; - -import '../../helpers/helpers.dart'; - -void main() { - group('MultiplierSpriteGroupComponent', () { - 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(() => TestGame(assets)); - - group('renders correctly', () { - flameTester.testGameWidget( - 'x2 active', - setUp: (game, tester) async { - await game.images.loadAll(assets); - final multiplier = Multiplier( - value: MultiplierValue.x2, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - - multiplier.toggle(2); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.lit, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x2-active.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x2 inactive', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x2, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x2-inactive.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x2 deactivated when different multiply value', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x2, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - multiplier.toggle(1); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - }, - ); - - flameTester.testGameWidget( - 'x3 active', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x3, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - - multiplier.toggle(3); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.lit, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x3-active.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x3 inactive', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x3, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x3-inactive.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x3 deactivated when different multiply value', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x3, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - multiplier.toggle(1); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - }, - ); - - flameTester.testGameWidget( - 'x4 active', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x4, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - - multiplier.toggle(4); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.lit, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x4-active.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x4 inactive', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x4, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x4-inactive.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x4 deactivated when different multiply value', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x4, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - multiplier.toggle(1); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - }, - ); - - flameTester.testGameWidget( - 'x5 active', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x5, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - - multiplier.toggle(5); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.lit, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x5-active.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x5 inactive', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x5, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x5-inactive.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x5 deactivated when different multiply value', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x5, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - multiplier.toggle(1); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - }, - ); - - flameTester.testGameWidget( - 'x6 active', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x6, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - - multiplier.toggle(6); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.lit, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x6-active.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x6 inactive', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x6, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - - await expectLater( - find.byGame(), - matchesGoldenFile('golden/multipliers/x6-inactive.png'), - ); - }, - ); - - flameTester.testGameWidget( - 'x6 deactivated when different multiply value', - setUp: (game, tester) async { - await game.images.loadAll(assets); - - final multiplier = Multiplier( - value: MultiplierValue.x6, - position: Vector2.zero(), - ); - await game.ensureAdd(multiplier); - multiplier.toggle(1); - await tester.pump(); - - game.camera.followVector2(Vector2.zero()); - }, - verify: (game, tester) async { - expect( - game - .descendants() - .whereType() - .first - .current, - MultiplierSpriteState.dimmed, - ); - }, - ); - }); - }); -}