diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x2-active.png b/packages/pinball_components/test/src/components/golden/multipliers/x2-active.png new file mode 100644 index 00000000..94001e27 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x2-active.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x2-inactive.png b/packages/pinball_components/test/src/components/golden/multipliers/x2-inactive.png new file mode 100644 index 00000000..ca2d8bf1 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x2-inactive.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x3-active.png b/packages/pinball_components/test/src/components/golden/multipliers/x3-active.png new file mode 100644 index 00000000..f2f84178 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x3-active.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x3-inactive.png b/packages/pinball_components/test/src/components/golden/multipliers/x3-inactive.png new file mode 100644 index 00000000..4727ea3e Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x3-inactive.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x4-active.png b/packages/pinball_components/test/src/components/golden/multipliers/x4-active.png new file mode 100644 index 00000000..b4918e62 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x4-active.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x4-inactive.png b/packages/pinball_components/test/src/components/golden/multipliers/x4-inactive.png new file mode 100644 index 00000000..76c84994 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x4-inactive.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x5-active.png b/packages/pinball_components/test/src/components/golden/multipliers/x5-active.png new file mode 100644 index 00000000..5e750af8 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x5-active.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x5-inactive.png b/packages/pinball_components/test/src/components/golden/multipliers/x5-inactive.png new file mode 100644 index 00000000..2bbbf1ef Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x5-inactive.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x6-active.png b/packages/pinball_components/test/src/components/golden/multipliers/x6-active.png new file mode 100644 index 00000000..7e5edc10 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x6-active.png differ diff --git a/packages/pinball_components/test/src/components/golden/multipliers/x6-inactive.png b/packages/pinball_components/test/src/components/golden/multipliers/x6-inactive.png new file mode 100644 index 00000000..aff09619 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/multipliers/x6-inactive.png differ diff --git a/packages/pinball_components/test/src/components/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier_test.dart new file mode 100644 index 00000000..27c729db --- /dev/null +++ b/packages/pinball_components/test/src/components/multiplier_test.dart @@ -0,0 +1,344 @@ +// 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.active.keyName, + Assets.images.multiplier.x2.inactive.keyName, + Assets.images.multiplier.x3.active.keyName, + Assets.images.multiplier.x3.inactive.keyName, + Assets.images.multiplier.x4.active.keyName, + Assets.images.multiplier.x4.inactive.keyName, + Assets.images.multiplier.x5.active.keyName, + Assets.images.multiplier.x5.inactive.keyName, + Assets.images.multiplier.x6.active.keyName, + Assets.images.multiplier.x6.inactive.keyName, + ]; + final flameTester = FlameTester(() => TestGame(assets)); + + group('renders correctly', () { + flameTester.testGameWidget( + 'x2 active', + setUp: (game, tester) async { + await game.images.loadAll(assets); + final multiplier = MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x2.active.keyName, + offAssetPath: Assets.images.multiplier.x2.inactive.keyName, + ); + await game.ensureAdd(multiplier); + + multiplier.current = MultiplierSpriteState.active; + await tester.pump(); + + expect( + game.children + .whereType() + .first + .current, + MultiplierSpriteState.active, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x2-active.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'x2 inactive', + setUp: (game, tester) async { + await game.images.loadAll(assets); + await game.ensureAdd( + MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x2.active.keyName, + offAssetPath: Assets.images.multiplier.x2.inactive.keyName, + ), + ); + await tester.pump(); + + expect( + game.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 { + await game.images.loadAll(assets); + final multiplier = MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x3.active.keyName, + offAssetPath: Assets.images.multiplier.x3.inactive.keyName, + ); + await game.ensureAdd(multiplier); + + multiplier.current = MultiplierSpriteState.active; + await tester.pump(); + + expect( + game.children + .whereType() + .first + .current, + MultiplierSpriteState.active, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x3-active.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'x3 inactive', + setUp: (game, tester) async { + await game.images.loadAll(assets); + await game.ensureAdd( + MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x3.active.keyName, + offAssetPath: Assets.images.multiplier.x3.inactive.keyName, + ), + ); + await tester.pump(); + + expect( + game.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 { + await game.images.loadAll(assets); + final multiplier = MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x4.active.keyName, + offAssetPath: Assets.images.multiplier.x4.inactive.keyName, + ); + await game.ensureAdd(multiplier); + + multiplier.current = MultiplierSpriteState.active; + await tester.pump(); + + expect( + game.children + .whereType() + .first + .current, + MultiplierSpriteState.active, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x4-active.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'x4 inactive', + setUp: (game, tester) async { + await game.images.loadAll(assets); + await game.ensureAdd( + MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x4.active.keyName, + offAssetPath: Assets.images.multiplier.x4.inactive.keyName, + ), + ); + await tester.pump(); + + expect( + game.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 { + await game.images.loadAll(assets); + final multiplier = MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x5.active.keyName, + offAssetPath: Assets.images.multiplier.x5.inactive.keyName, + ); + await game.ensureAdd(multiplier); + + multiplier.current = MultiplierSpriteState.active; + await tester.pump(); + + expect( + game.children + .whereType() + .first + .current, + MultiplierSpriteState.active, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x5-active.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'x5 inactive', + setUp: (game, tester) async { + await game.images.loadAll(assets); + await game.ensureAdd( + MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x5.active.keyName, + offAssetPath: Assets.images.multiplier.x5.inactive.keyName, + ), + ); + await tester.pump(); + + expect( + game.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 { + await game.images.loadAll(assets); + final multiplier = MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x6.active.keyName, + offAssetPath: Assets.images.multiplier.x6.inactive.keyName, + ); + await game.ensureAdd(multiplier); + + multiplier.current = MultiplierSpriteState.active; + await tester.pump(); + + expect( + game.children + .whereType() + .first + .current, + MultiplierSpriteState.active, + ); + + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/multipliers/x6-active.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'x6 inactive', + setUp: (game, tester) async { + await game.images.loadAll(assets); + await game.ensureAdd( + MultiplierSpriteGroupComponent( + position: Vector2.zero(), + onAssetPath: Assets.images.multiplier.x6.active.keyName, + offAssetPath: Assets.images.multiplier.x6.inactive.keyName, + ), + ); + await tester.pump(); + + expect( + game.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'), + ); + }, + ); + }); + }); +}