diff --git a/lib/game/components/sparky_fire_zone.dart b/lib/game/components/sparky_fire_zone.dart index 6dffac39..466de13b 100644 --- a/lib/game/components/sparky_fire_zone.dart +++ b/lib/game/components/sparky_fire_zone.dart @@ -1,7 +1,5 @@ // ignore_for_file: avoid_renaming_method_parameters -import 'package:flame/components.dart'; -import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball/game/game.dart'; diff --git a/packages/pinball_components/test/src/components/dash_animatronic_test.dart b/packages/pinball_components/test/src/components/dash_animatronic_test.dart index e4b31ca6..11c34749 100644 --- a/packages/pinball_components/test/src/components/dash_animatronic_test.dart +++ b/packages/pinball_components/test/src/components/dash_animatronic_test.dart @@ -31,7 +31,7 @@ void main() { matchesGoldenFile('golden/dash_animatronic/middle.png'), ); - game.update(4); + game.update(3); await tester.pump(); await expectLater( find.byGame(), diff --git a/packages/pinball_components/test/src/components/golden/sparky_animatronic/end.png b/packages/pinball_components/test/src/components/golden/sparky_animatronic/end.png new file mode 100644 index 00000000..a16672d7 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/sparky_animatronic/end.png differ diff --git a/packages/pinball_components/test/src/components/golden/sparky_animatronic/middle.png b/packages/pinball_components/test/src/components/golden/sparky_animatronic/middle.png new file mode 100644 index 00000000..56c775fa Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/sparky_animatronic/middle.png differ diff --git a/packages/pinball_components/test/src/components/golden/sparky_animatronic/start.png b/packages/pinball_components/test/src/components/golden/sparky_animatronic/start.png new file mode 100644 index 00000000..a16672d7 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/sparky_animatronic/start.png differ diff --git a/packages/pinball_components/test/src/components/sparky_animatronic_test.dart b/packages/pinball_components/test/src/components/sparky_animatronic_test.dart new file mode 100644 index 00000000..58394989 --- /dev/null +++ b/packages/pinball_components/test/src/components/sparky_animatronic_test.dart @@ -0,0 +1,66 @@ +// ignore_for_file: cascade_invocations + +import 'package:flame/extensions.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() { + TestWidgetsFlutterBinding.ensureInitialized(); + final flameTester = FlameTester(TestGame.new); + + group('SparkyAnimatronic', () { + flameTester.testGameWidget( + 'renders correctly', + setUp: (game, tester) async { + await game.ensureAdd(SparkyAnimatronic()..playing = true); + game.camera.followVector2(Vector2.zero()); + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/sparky_animatronic/start.png'), + ); + + game.update(1); + await tester.pump(); + await expectLater( + find.byGame(), + matchesGoldenFile('golden/sparky_animatronic/middle.png'), + ); + + game.update(1); + await tester.pump(); + await expectLater( + find.byGame(), + matchesGoldenFile('golden/sparky_animatronic/end.png'), + ); + }, + ); + flameTester.test( + 'loads correctly', + (game) async { + final sparkyAnimatronic = SparkyAnimatronic(); + await game.ensureAdd(sparkyAnimatronic); + + expect(game.contains(sparkyAnimatronic), isTrue); + }, + ); + + flameTester.test( + 'stops animating after animation completes', + (game) async { + final sparkyAnimatronic = SparkyAnimatronic(); + await game.ensureAdd(sparkyAnimatronic); + + sparkyAnimatronic.playing = true; + sparkyAnimatronic.animation?.setToLast(); + game.update(1); + + expect(sparkyAnimatronic.playing, isFalse); + }, + ); + }); +} diff --git a/test/game/components/sparky_fire_zone_test.dart b/test/game/components/sparky_fire_zone_test.dart index 4c3fcdb9..02bc785f 100644 --- a/test/game/components/sparky_fire_zone_test.dart +++ b/test/game/components/sparky_fire_zone_test.dart @@ -8,6 +8,7 @@ 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'; +import 'package:pinball_flame/pinball_flame.dart'; import '../../helpers/helpers.dart'; @@ -24,25 +25,49 @@ void main() { final flameTester = FlameTester(() => EmptyPinballTestGame(assets)); group('SparkyFireZone', () { - flameTester.test( - 'loads correctly', - (game) async { - final sparkyFireZone = SparkyFireZone(); - await game.ensureAdd(sparkyFireZone); - - expect(game.contains(sparkyFireZone), isTrue); - }, - ); + flameTester.test('loads correctly', (game) async { + final sparkyFireZone = SparkyFireZone(); + await game.ensureAdd(sparkyFireZone); + }); group('loads', () { + flameTester.test( + 'a SparkyComputer', + (game) async { + final sparkyFireZone = SparkyFireZone(); + await game.addFromBlueprint(sparkyFireZone); + await game.ready(); + + expect( + sparkyFireZone.blueprints.whereType().single, + isNotNull, + ); + }, + ); + + flameTester.test( + 'a SparkyAnimatronic', + (game) async { + final sparkyFireZone = SparkyFireZone(); + await game.addFromBlueprint(sparkyFireZone); + await game.ready(); + + expect( + game.descendants().whereType().single, + isNotNull, + ); + }, + ); + flameTester.test( 'three SparkyBumper', (game) async { final sparkyFireZone = SparkyFireZone(); - await game.ensureAdd(sparkyFireZone); + await game.addFromBlueprint(sparkyFireZone); + await game.ready(); expect( - sparkyFireZone.descendants().whereType().length, + game.descendants().whereType().length, equals(3), ); },