From 3c2ed1dab7ab8727721effd987ce1e36ac168b17 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Mon, 2 May 2022 12:51:38 +0200 Subject: [PATCH] test: golden tests for ball --- .../test/src/components/ball_test.dart | 127 +++++++++++++++++- .../chrome_dino_chomping_behavior_test.dart | 5 +- .../chrome_dino_spitting_behavior_test.dart | 5 +- .../test/src/components/flipper_test.dart | 1 + .../src/components/golden/ball/android.png | Bin 0 -> 20958 bytes .../test/src/components/golden/ball/dash.png | Bin 0 -> 20958 bytes .../src/components/golden/ball/default.png | Bin 0 -> 24992 bytes .../test/src/components/golden/ball/dino.png | Bin 0 -> 28658 bytes .../src/components/golden/ball/sparky.png | Bin 0 -> 20958 bytes 9 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 packages/pinball_components/test/src/components/golden/ball/android.png create mode 100644 packages/pinball_components/test/src/components/golden/ball/dash.png create mode 100644 packages/pinball_components/test/src/components/golden/ball/default.png create mode 100644 packages/pinball_components/test/src/components/golden/ball/dino.png create mode 100644 packages/pinball_components/test/src/components/golden/ball/sparky.png diff --git a/packages/pinball_components/test/src/components/ball_test.dart b/packages/pinball_components/test/src/components/ball_test.dart index a0d1fe5b..8a166d7b 100644 --- a/packages/pinball_components/test/src/components/ball_test.dart +++ b/packages/pinball_components/test/src/components/ball_test.dart @@ -5,12 +5,22 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:pinball_theme/pinball_theme.dart' as theme; import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(TestGame.new); + final assets = [ + Assets.images.ball.ball.keyName, + Assets.images.ball.flameEffect.keyName, + theme.Assets.images.android.ball.keyName, + theme.Assets.images.dash.ball.keyName, + theme.Assets.images.dino.ball.keyName, + theme.Assets.images.sparky.ball.keyName, + ]; + + final flameTester = FlameTester(() => TestGame(assets)); group('Ball', () { flameTester.test( @@ -24,6 +34,121 @@ void main() { }, ); + group('renders correctly', () { + flameTester.testGameWidget( + 'default', + setUp: (game, tester) async { + final ball = Ball()..initialPosition = Vector2.zero(); + await game.ready(); + await game.ensureAdd(ball); + + await tester.pump(); + + game.camera + ..followVector2(Vector2.zero()) + ..zoom = 8; + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/ball/default.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'android theme', + setUp: (game, tester) async { + final ball = Ball( + spriteAsset: theme.Assets.images.android.ball.keyName, + )..initialPosition = Vector2.zero(); + await game.ready(); + await game.ensureAdd(ball); + + await tester.pump(); + + game.camera + ..followVector2(Vector2.zero()) + ..zoom = 8; + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/ball/android.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dash theme', + setUp: (game, tester) async { + final ball = Ball( + spriteAsset: theme.Assets.images.dash.ball.keyName, + )..initialPosition = Vector2.zero(); + await game.ready(); + await game.ensureAdd(ball); + + await tester.pump(); + + game.camera + ..followVector2(Vector2.zero()) + ..zoom = 8; + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/ball/dash.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'dino theme', + setUp: (game, tester) async { + final ball = Ball( + spriteAsset: theme.Assets.images.dino.ball.keyName, + )..initialPosition = Vector2.zero(); + await game.ready(); + await game.ensureAdd(ball); + + await tester.pump(); + + game.camera + ..followVector2(Vector2.zero()) + ..zoom = 8; + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/ball/dino.png'), + ); + }, + ); + + flameTester.testGameWidget( + 'sparky theme', + setUp: (game, tester) async { + final ball = Ball( + spriteAsset: theme.Assets.images.sparky.ball.keyName, + )..initialPosition = Vector2.zero(); + await game.ready(); + await game.ensureAdd(ball); + + await tester.pump(); + + game.camera + ..followVector2(Vector2.zero()) + ..zoom = 8; + }, + verify: (game, tester) async { + await expectLater( + find.byGame(), + matchesGoldenFile('golden/ball/sparky.png'), + ); + }, + ); + }); + group('body', () { flameTester.test( 'is dynamic', diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart index e863dfa4..e408243f 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart @@ -12,7 +12,10 @@ import '../../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(TestGame.new); + final assets = [ + Assets.images.ball.ball.keyName, + ]; + final flameTester = FlameTester(() => TestGame(assets)); group( 'ChromeDinoChompingBehavior', diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart index cb2071a7..11b362a0 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart @@ -14,7 +14,10 @@ import '../../../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); - final flameTester = FlameTester(TestGame.new); + final assets = [ + Assets.images.ball.ball.keyName, + ]; + final flameTester = FlameTester(() => TestGame(assets)); group( 'ChromeDinoSpittingBehavior', diff --git a/packages/pinball_components/test/src/components/flipper_test.dart b/packages/pinball_components/test/src/components/flipper_test.dart index 9ab09bf7..3bff1474 100644 --- a/packages/pinball_components/test/src/components/flipper_test.dart +++ b/packages/pinball_components/test/src/components/flipper_test.dart @@ -12,6 +12,7 @@ void main() { final assets = [ Assets.images.flipper.left.keyName, Assets.images.flipper.right.keyName, + Assets.images.ball.ball.keyName, ]; final flameTester = FlameTester(() => TestGame(assets)); diff --git a/packages/pinball_components/test/src/components/golden/ball/android.png b/packages/pinball_components/test/src/components/golden/ball/android.png new file mode 100644 index 0000000000000000000000000000000000000000..e403c80507fef4164a48cac099a11e324b45f824 GIT binary patch literal 20958 zcmeI4Pe@cz6vof!I6ZBKu@-?bf`+(?&~nkDMKet3gAfx#L4--&xlu-_MTTM+enZK3X&1#op;amwY5!zzq^_9E^~+BoA3M1xp(fpk9xX0 zQ+4O-L?q>R<$FbH3nHgHFJXG#eE1nRFR@~8XHH71nQ!JHUd;J@o@w{J(J7H8@$=cf zd(XeGXH(K#UoO}Dp55+vmu{Z9)e{@KvYRqPY+K&jbfE`1)wM%EeR3 z0T;@X*l8CxT`t62oKIYIVXzX^xVWAVcTfNeY;jybM0ksG0m~&>C>6+|lom<_DlQ69 zr2-{1GYh2x6E5bVN(H9ptXe1)SXlU97Z!eec{Ng5K?|}6AB&%dGVQgIzdel>(c0*? zR0k7_1B6iPgAfoxPy=cZ!3wYftU#RrH7F1#FE=bq4kq1R06Y;-#1rvEg8){56<`H_ zSi#G&f@7$m)FMvuU`0t3TLCU)2-2UZglI<1tt~< c2=P~hcpGaa=ORbgR{*CT@DOY%K2#z$YZU6uP literal 0 HcmV?d00001 diff --git a/packages/pinball_components/test/src/components/golden/ball/dash.png b/packages/pinball_components/test/src/components/golden/ball/dash.png new file mode 100644 index 0000000000000000000000000000000000000000..e403c80507fef4164a48cac099a11e324b45f824 GIT binary patch literal 20958 zcmeI4Pe@cz6vof!I6ZBKu@-?bf`+(?&~nkDMKet3gAfx#L4--&xlu-_MTTM+enZK3X&1#op;amwY5!zzq^_9E^~+BoA3M1xp(fpk9xX0 zQ+4O-L?q>R<$FbH3nHgHFJXG#eE1nRFR@~8XHH71nQ!JHUd;J@o@w{J(J7H8@$=cf zd(XeGXH(K#UoO}Dp55+vmu{Z9)e{@KvYRqPY+K&jbfE`1)wM%EeR3 z0T;@X*l8CxT`t62oKIYIVXzX^xVWAVcTfNeY;jybM0ksG0m~&>C>6+|lom<_DlQ69 zr2-{1GYh2x6E5bVN(H9ptXe1)SXlU97Z!eec{Ng5K?|}6AB&%dGVQgIzdel>(c0*? zR0k7_1B6iPgAfoxPy=cZ!3wYftU#RrH7F1#FE=bq4kq1R06Y;-#1rvEg8){56<`H_ zSi#G&f@7$m)FMvuU`0t3TLCU)2-2UZglI<1tt~< c2=P~hcpGaa=ORbgR{*CT@DOY%K2#z$YZU6uP literal 0 HcmV?d00001 diff --git a/packages/pinball_components/test/src/components/golden/ball/default.png b/packages/pinball_components/test/src/components/golden/ball/default.png new file mode 100644 index 0000000000000000000000000000000000000000..56f6945875ba8f48bbdb3184c5d1e0132535a3b0 GIT binary patch literal 24992 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 literal 0 HcmV?d00001 diff --git a/packages/pinball_components/test/src/components/golden/ball/sparky.png b/packages/pinball_components/test/src/components/golden/ball/sparky.png new file mode 100644 index 0000000000000000000000000000000000000000..e403c80507fef4164a48cac099a11e324b45f824 GIT binary patch literal 20958 zcmeI4Pe@cz6vof!I6ZBKu@-?bf`+(?&~nkDMKet3gAfx#L4--&xlu-_MTTM+enZK3X&1#op;amwY5!zzq^_9E^~+BoA3M1xp(fpk9xX0 zQ+4O-L?q>R<$FbH3nHgHFJXG#eE1nRFR@~8XHH71nQ!JHUd;J@o@w{J(J7H8@$=cf zd(XeGXH(K#UoO}Dp55+vmu{Z9)e{@KvYRqPY+K&jbfE`1)wM%EeR3 z0T;@X*l8CxT`t62oKIYIVXzX^xVWAVcTfNeY;jybM0ksG0m~&>C>6+|lom<_DlQ69 zr2-{1GYh2x6E5bVN(H9ptXe1)SXlU97Z!eec{Ng5K?|}6AB&%dGVQgIzdel>(c0*? zR0k7_1B6iPgAfoxPy=cZ!3wYftU#RrH7F1#FE=bq4kq1R06Y;-#1rvEg8){56<`H_ zSi#G&f@7$m)FMvuU`0t3TLCU)2-2UZglI<1tt~< c2=P~hcpGaa=ORbgR{*CT@DOY%K2#z$YZU6uP literal 0 HcmV?d00001