diff --git a/packages/pinball_components/test/src/components/chrome_dino_test.dart b/packages/pinball_components/test/src/components/chrome_dino_test.dart index 8a0adb85..16e02647 100644 --- a/packages/pinball_components/test/src/components/chrome_dino_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino_test.dart @@ -1,13 +1,19 @@ // ignore_for_file: cascade_invocations -import 'package:flame_forge2d/flame_forge2d.dart'; +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() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(Forge2DGame.new); + final assets = [ + Assets.images.dino.animatronic.mouth.keyName, + Assets.images.dino.animatronic.head.keyName, + ]; + final flameTester = FlameTester(() => TestGame(assets)); group('ChromeDino', () { flameTester.test( @@ -20,19 +26,90 @@ void main() { }, ); - flameTester.test( - 'swivels', - (game) async { - // TODO(alestiago): Write golden tests to check the - // swivel animation. - final chromeDino = ChromeDino(); - await game.ensureAdd(chromeDino); + flameTester.testGameWidget( + 'renders correctly', + setUp: (game, tester) async { + await game.images.loadAll(assets); + await game.ensureAdd(ChromeDino()); + game.camera.followVector2(Vector2.zero()); + await tester.pump(); + }, + verify: (game, tester) async { + final sweepAnimationDuration = game + .descendants() + .whereType() + .first + .animation! + .totalDuration() / + 2; + + await expectLater( + find.byGame(), + matchesGoldenFile('golden/chrome_dino/up.png'), + ); - final previousPosition = chromeDino.body.position.clone(); - game.update(64); + game.update(sweepAnimationDuration * 0.25); + await tester.pump(); + await expectLater( + find.byGame(), + matchesGoldenFile('golden/chrome_dino/middle.png'), + ); - expect(chromeDino.body.position, isNot(equals(previousPosition))); + game.update(sweepAnimationDuration * 0.25); + await tester.pump(); + await expectLater( + find.byGame(), + matchesGoldenFile('golden/chrome_dino/down.png'), + ); }, ); + + group('swivels', () { + flameTester.testGameWidget( + 'up', + setUp: (game, tester) async { + await game.images.loadAll(assets); + final chromeDino = ChromeDino(); + await game.ensureAdd(chromeDino); + game.camera.followVector2(Vector2.zero()); + await tester.pump(); + + final sweepAnimationDuration = game + .descendants() + .whereType() + .first + .animation! + .totalDuration() / + 2; + game.update(sweepAnimationDuration * 1.5); + await tester.pump(); + + expect(chromeDino.body.angularVelocity, isPositive); + }, + ); + + flameTester.testGameWidget( + 'down', + setUp: (game, tester) async { + await game.images.loadAll(assets); + final chromeDino = ChromeDino(); + await game.ensureAdd(chromeDino); + game.camera.followVector2(Vector2.zero()); + await tester.pump(); + + final sweepAnimationDuration = game + .descendants() + .whereType() + .first + .animation! + .totalDuration() / + 2; + game.update(sweepAnimationDuration * 0.5); + await tester.pump(); + + expect(chromeDino.body.angularVelocity, isNegative); + }, + ); + }); }); } 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 d0707223..d64c3f07 100644 --- a/packages/pinball_components/test/src/components/dash_animatronic_test.dart +++ b/packages/pinball_components/test/src/components/dash_animatronic_test.dart @@ -45,6 +45,7 @@ void main() { ); }, ); + flameTester.test( 'loads correctly', (game) async { diff --git a/packages/pinball_components/test/src/components/golden/chrome_dino/down.png b/packages/pinball_components/test/src/components/golden/chrome_dino/down.png new file mode 100644 index 00000000..ef91da0a Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/chrome_dino/down.png differ diff --git a/packages/pinball_components/test/src/components/golden/chrome_dino/middle.png b/packages/pinball_components/test/src/components/golden/chrome_dino/middle.png new file mode 100644 index 00000000..d4e6286a Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/chrome_dino/middle.png differ diff --git a/packages/pinball_components/test/src/components/golden/chrome_dino/up.png b/packages/pinball_components/test/src/components/golden/chrome_dino/up.png new file mode 100644 index 00000000..042028d1 Binary files /dev/null and b/packages/pinball_components/test/src/components/golden/chrome_dino/up.png differ diff --git a/test/game/components/board_test.dart b/test/game/components/board_test.dart index bc1c5c39..48a3f2c5 100644 --- a/test/game/components/board_test.dart +++ b/test/game/components/board_test.dart @@ -103,18 +103,6 @@ void main() { expect(flutterForest.length, equals(1)); }, ); - - flameTester.test( - 'one ChromeDino', - (game) async { - final board = Board(); - await game.ready(); - await game.ensureAdd(board); - - final chromeDino = board.descendants().whereType(); - expect(chromeDino.length, equals(1)); - }, - ); }); }); } diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index f0420df6..be8ba8e8 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -45,6 +45,8 @@ void main() { Assets.images.spaceship.ramp.arrow.active3.keyName, Assets.images.spaceship.ramp.arrow.active4.keyName, Assets.images.spaceship.ramp.arrow.active5.keyName, + Assets.images.dino.animatronic.head.keyName, + Assets.images.dino.animatronic.mouth.keyName, Assets.images.baseboard.left.keyName, Assets.images.baseboard.right.keyName, Assets.images.flipper.left.keyName,