diff --git a/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart b/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart index 86857ee4..8f1b46e8 100644 --- a/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart +++ b/lib/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior.dart @@ -40,7 +40,7 @@ class FlutterForestBonusBehavior extends Component .add(const BonusActivated(GameBonus.dashNest)); canvas.add( ControlledBall.bonus(characterTheme: gameRef.characterTheme) - ..initialPosition = Vector2(17.2, -52.7), + ..initialPosition = Vector2(29.5, -24.5), ); animatronic.playing = true; signpost.bloc.onProgressed(); diff --git a/lib/game/game_assets.dart b/lib/game/game_assets.dart index ce899b21..22c1c2d6 100644 --- a/lib/game/game_assets.dart +++ b/lib/game/game_assets.dart @@ -38,6 +38,7 @@ extension PinballGameAssetsX on PinballGame { ), images.load(components.Assets.images.dino.bottomWall.keyName), images.load(components.Assets.images.dino.topWall.keyName), + images.load(components.Assets.images.dino.topWallTunnel.keyName), images.load(components.Assets.images.dino.animatronic.head.keyName), images.load(components.Assets.images.dino.animatronic.mouth.keyName), images.load(components.Assets.images.dash.animatronic.keyName), diff --git a/packages/authentication_repository/test/src/authentication_repository_test.dart b/packages/authentication_repository/test/src/authentication_repository_test.dart index a179bb68..0efe9ecc 100644 --- a/packages/authentication_repository/test/src/authentication_repository_test.dart +++ b/packages/authentication_repository/test/src/authentication_repository_test.dart @@ -3,9 +3,9 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; -class MockFirebaseAuth extends Mock implements FirebaseAuth {} +class _MockFirebaseAuth extends Mock implements FirebaseAuth {} -class MockUserCredential extends Mock implements UserCredential {} +class _MockUserCredential extends Mock implements UserCredential {} void main() { late FirebaseAuth firebaseAuth; @@ -14,8 +14,8 @@ void main() { group('AuthenticationRepository', () { setUp(() { - firebaseAuth = MockFirebaseAuth(); - userCredential = MockUserCredential(); + firebaseAuth = _MockFirebaseAuth(); + userCredential = _MockUserCredential(); authenticationRepository = AuthenticationRepository(firebaseAuth); }); diff --git a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart index af3c5fa3..d13a9940 100644 --- a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart +++ b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart @@ -5,23 +5,23 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; -class MockFirebaseFirestore extends Mock implements FirebaseFirestore {} +class _MockFirebaseFirestore extends Mock implements FirebaseFirestore {} -class MockCollectionReference extends Mock +class _MockCollectionReference extends Mock implements CollectionReference> {} -class MockQuery extends Mock implements Query> {} +class _MockQuery extends Mock implements Query> {} -class MockQuerySnapshot extends Mock +class _MockQuerySnapshot extends Mock implements QuerySnapshot> {} -class MockQueryDocumentSnapshot extends Mock +class _MockQueryDocumentSnapshot extends Mock implements QueryDocumentSnapshot> {} -class MockDocumentReference extends Mock +class _MockDocumentReference extends Mock implements DocumentReference> {} -class MockDocumentSnapshot extends Mock +class _MockDocumentSnapshot extends Mock implements DocumentSnapshot> {} void main() { @@ -29,7 +29,7 @@ void main() { late FirebaseFirestore firestore; setUp(() { - firestore = MockFirebaseFirestore(); + firestore = _MockFirebaseFirestore(); }); test('can be instantiated', () { @@ -70,11 +70,11 @@ void main() { setUp(() { leaderboardRepository = LeaderboardRepository(firestore); - collectionReference = MockCollectionReference(); - query = MockQuery(); - querySnapshot = MockQuerySnapshot(); + collectionReference = _MockCollectionReference(); + query = _MockQuery(); + querySnapshot = _MockQuerySnapshot(); queryDocumentSnapshots = top10Scores.map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'user$score', @@ -119,7 +119,7 @@ void main() { 'playerInitials': 'ABC', 'score': 1500, }; - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(() => querySnapshot.docs).thenReturn([queryDocumentSnapshot]); when(queryDocumentSnapshot.data) .thenReturn(top10LeaderboardDataMalformed); @@ -156,12 +156,12 @@ void main() { setUp(() { leaderboardRepository = LeaderboardRepository(firestore); - collectionReference = MockCollectionReference(); - documentReference = MockDocumentReference(); - query = MockQuery(); - querySnapshot = MockQuerySnapshot(); + collectionReference = _MockCollectionReference(); + documentReference = _MockDocumentReference(); + query = _MockQuery(); + querySnapshot = _MockQuerySnapshot(); queryDocumentSnapshots = leaderboardScores.map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', @@ -228,7 +228,7 @@ void main() { 5000 ]; final queryDocumentSnapshots = leaderboardScores.map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', @@ -248,8 +248,8 @@ void main() { test( 'throws DeleteLeaderboardException ' 'when deleting scores outside the top 10 fails', () async { - final deleteQuery = MockQuery(); - final deleteQuerySnapshot = MockQuerySnapshot(); + final deleteQuery = _MockQuery(); + final deleteQuerySnapshot = _MockQuerySnapshot(); final newScore = LeaderboardEntryData( playerInitials: 'ABC', score: 15000, @@ -269,7 +269,7 @@ void main() { 5000, ]; final deleteDocumentSnapshots = [5500, 5000].map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', @@ -284,7 +284,7 @@ void main() { when(() => deleteQuerySnapshot.docs) .thenReturn(deleteDocumentSnapshots); final queryDocumentSnapshots = leaderboardScores.map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', @@ -310,8 +310,8 @@ void main() { 'saves the new score when there are more than 10 scores in the ' 'leaderboard and the new score is higher than the lowest top 10, and ' 'deletes the scores that are not in the top 10 anymore', () async { - final deleteQuery = MockQuery(); - final deleteQuerySnapshot = MockQuerySnapshot(); + final deleteQuery = _MockQuery(); + final deleteQuerySnapshot = _MockQuerySnapshot(); final newScore = LeaderboardEntryData( playerInitials: 'ABC', score: 15000, @@ -331,7 +331,7 @@ void main() { 5000, ]; final deleteDocumentSnapshots = [5500, 5000].map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', @@ -346,7 +346,7 @@ void main() { when(() => deleteQuerySnapshot.docs) .thenReturn(deleteDocumentSnapshots); final queryDocumentSnapshots = leaderboardScores.map((score) { - final queryDocumentSnapshot = MockQueryDocumentSnapshot(); + final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', @@ -376,9 +376,9 @@ void main() { late DocumentSnapshot> documentSnapshot; setUp(() async { - collectionReference = MockCollectionReference(); - documentReference = MockDocumentReference(); - documentSnapshot = MockDocumentSnapshot(); + collectionReference = _MockCollectionReference(); + documentReference = _MockDocumentReference(); + documentSnapshot = _MockDocumentSnapshot(); leaderboardRepository = LeaderboardRepository(firestore); when(() => firestore.collection('prohibitedInitials')) diff --git a/packages/pinball_audio/test/helpers/helpers.dart b/packages/pinball_audio/test/helpers/helpers.dart deleted file mode 100644 index efe914f6..00000000 --- a/packages/pinball_audio/test/helpers/helpers.dart +++ /dev/null @@ -1 +0,0 @@ -export 'mocks.dart'; diff --git a/packages/pinball_audio/test/helpers/mocks.dart b/packages/pinball_audio/test/helpers/mocks.dart deleted file mode 100644 index 62ea985b..00000000 --- a/packages/pinball_audio/test/helpers/mocks.dart +++ /dev/null @@ -1,47 +0,0 @@ -// ignore_for_file: one_member_abstracts - -import 'package:audioplayers/audioplayers.dart'; -import 'package:flame_audio/audio_pool.dart'; -import 'package:mocktail/mocktail.dart'; - -abstract class _CreateAudioPoolStub { - Future onCall( - String sound, { - bool? repeating, - int? maxPlayers, - int? minPlayers, - String? prefix, - }); -} - -class CreateAudioPoolStub extends Mock implements _CreateAudioPoolStub {} - -abstract class _ConfigureAudioCacheStub { - void onCall(AudioCache cache); -} - -class ConfigureAudioCacheStub extends Mock implements _ConfigureAudioCacheStub { -} - -abstract class _PlaySingleAudioStub { - Future onCall(String url); -} - -class PlaySingleAudioStub extends Mock implements _PlaySingleAudioStub {} - -abstract class _LoopSingleAudioStub { - Future onCall(String url); -} - -class LoopSingleAudioStub extends Mock implements _LoopSingleAudioStub {} - -abstract class _PreCacheSingleAudioStub { - Future onCall(String url); -} - -class PreCacheSingleAudioStub extends Mock implements _PreCacheSingleAudioStub { -} - -class MockAudioPool extends Mock implements AudioPool {} - -class MockAudioCache extends Mock implements AudioCache {} diff --git a/packages/pinball_audio/test/src/pinball_audio_test.dart b/packages/pinball_audio/test/src/pinball_audio_test.dart index 81d53bee..c92b876d 100644 --- a/packages/pinball_audio/test/src/pinball_audio_test.dart +++ b/packages/pinball_audio/test/src/pinball_audio_test.dart @@ -1,49 +1,77 @@ -// ignore_for_file: prefer_const_constructors +// ignore_for_file: prefer_const_constructors, one_member_abstracts +import 'package:audioplayers/audioplayers.dart'; +import 'package:flame_audio/audio_pool.dart'; import 'package:flame_audio/flame_audio.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball_audio/gen/assets.gen.dart'; import 'package:pinball_audio/pinball_audio.dart'; -import '../helpers/helpers.dart'; +class _MockAudioPool extends Mock implements AudioPool {} + +class _MockAudioCache extends Mock implements AudioCache {} + +class _MockCreateAudioPool extends Mock { + Future onCall( + String sound, { + bool? repeating, + int? maxPlayers, + int? minPlayers, + String? prefix, + }); +} + +class _MockConfigureAudioCache extends Mock { + void onCall(AudioCache cache); +} + +class _MockPlaySingleAudio extends Mock { + Future onCall(String url); +} + +class _MockLoopSingleAudio extends Mock { + Future onCall(String url); +} + +abstract class _PreCacheSingleAudio { + Future onCall(String url); +} + +class _MockPreCacheSingleAudio extends Mock implements _PreCacheSingleAudio {} void main() { group('PinballAudio', () { - test('can be instantiated', () { - expect(PinballAudio(), isNotNull); - }); - - late CreateAudioPoolStub createAudioPool; - late ConfigureAudioCacheStub configureAudioCache; - late PlaySingleAudioStub playSingleAudio; - late LoopSingleAudioStub loopSingleAudio; - late PreCacheSingleAudioStub preCacheSingleAudio; + late _MockCreateAudioPool createAudioPool; + late _MockConfigureAudioCache configureAudioCache; + late _MockPlaySingleAudio playSingleAudio; + late _MockLoopSingleAudio loopSingleAudio; + late _PreCacheSingleAudio preCacheSingleAudio; late PinballAudio audio; setUpAll(() { - registerFallbackValue(MockAudioCache()); + registerFallbackValue(_MockAudioCache()); }); setUp(() { - createAudioPool = CreateAudioPoolStub(); + createAudioPool = _MockCreateAudioPool(); when( () => createAudioPool.onCall( any(), maxPlayers: any(named: 'maxPlayers'), prefix: any(named: 'prefix'), ), - ).thenAnswer((_) async => MockAudioPool()); + ).thenAnswer((_) async => _MockAudioPool()); - configureAudioCache = ConfigureAudioCacheStub(); + configureAudioCache = _MockConfigureAudioCache(); when(() => configureAudioCache.onCall(any())).thenAnswer((_) {}); - playSingleAudio = PlaySingleAudioStub(); + playSingleAudio = _MockPlaySingleAudio(); when(() => playSingleAudio.onCall(any())).thenAnswer((_) async {}); - loopSingleAudio = LoopSingleAudioStub(); + loopSingleAudio = _MockLoopSingleAudio(); when(() => loopSingleAudio.onCall(any())).thenAnswer((_) async {}); - preCacheSingleAudio = PreCacheSingleAudioStub(); + preCacheSingleAudio = _MockPreCacheSingleAudio(); when(() => preCacheSingleAudio.onCall(any())).thenAnswer((_) async {}); audio = PinballAudio( @@ -55,6 +83,10 @@ void main() { ); }); + test('can be instantiated', () { + expect(PinballAudio(), isNotNull); + }); + group('load', () { test('creates the score pool', () async { await audio.load(); @@ -102,7 +134,7 @@ void main() { group('score', () { test('plays the score sound pool', () async { - final audioPool = MockAudioPool(); + final audioPool = _MockAudioPool(); when(audioPool.start).thenAnswer((_) async => () {}); when( () => createAudioPool.onCall( diff --git a/packages/pinball_components/assets/images/dino/top-wall-tunnel.png b/packages/pinball_components/assets/images/dino/top-wall-tunnel.png new file mode 100644 index 00000000..07cb9c46 Binary files /dev/null and b/packages/pinball_components/assets/images/dino/top-wall-tunnel.png differ diff --git a/packages/pinball_components/assets/images/dino/top-wall.png b/packages/pinball_components/assets/images/dino/top-wall.png index 72b912e3..7ee69411 100644 Binary files a/packages/pinball_components/assets/images/dino/top-wall.png and b/packages/pinball_components/assets/images/dino/top-wall.png differ diff --git a/packages/pinball_components/lib/gen/assets.gen.dart b/packages/pinball_components/lib/gen/assets.gen.dart index 0905a3af..73dd4614 100644 --- a/packages/pinball_components/lib/gen/assets.gen.dart +++ b/packages/pinball_components/lib/gen/assets.gen.dart @@ -125,6 +125,10 @@ class $AssetsImagesDinoGen { AssetGenImage get bottomWall => const AssetGenImage('assets/images/dino/bottom-wall.png'); + /// File path: assets/images/dino/top-wall-tunnel.png + AssetGenImage get topWallTunnel => + const AssetGenImage('assets/images/dino/top-wall-tunnel.png'); + /// File path: assets/images/dino/top-wall.png AssetGenImage get topWall => const AssetGenImage('assets/images/dino/top-wall.png'); diff --git a/packages/pinball_components/lib/src/components/dino_walls.dart b/packages/pinball_components/lib/src/components/dino_walls.dart index 5ca9e8c4..5125d4bc 100644 --- a/packages/pinball_components/lib/src/components/dino_walls.dart +++ b/packages/pinball_components/lib/src/components/dino_walls.dart @@ -23,59 +23,70 @@ class DinoWalls extends Component { /// {@template dino_top_wall} /// Wall segment located above [ChromeDino]. /// {@endtemplate} -class _DinoTopWall extends BodyComponent with InitialPosition, ZIndex { +class _DinoTopWall extends BodyComponent with InitialPosition { ///{@macro dino_top_wall} _DinoTopWall() : super( - children: [_DinoTopWallSpriteComponent()], + children: [ + _DinoTopWallSpriteComponent(), + _DinoTopWallTunnelSpriteComponent(), + ], renderBody: false, - ) { - zIndex = ZIndexes.dinoTopWall; - } + ); List _createFixtureDefs() { - final topStraightShape = EdgeShape() + final topEdgeShape = EdgeShape() ..set( - Vector2(28.65, -34.3), - Vector2(29.5, -34.3), + Vector2(29.25, -35.27), + Vector2(28.4, -34.77), ); final topCurveShape = BezierCurveShape( controlPoints: [ - topStraightShape.vertex1, - Vector2(18.8, -26.2), - Vector2(26.6, -20.2), + topEdgeShape.vertex2, + Vector2(21.35, -28.72), + Vector2(23.45, -24.62), ], ); - final middleCurveShape = BezierCurveShape( - controlPoints: [ + final tunnelTopEdgeShape = EdgeShape() + ..set( topCurveShape.vertices.last, - Vector2(27.8, -19.3), - Vector2(26.8, -18.7), - ], - ); + Vector2(30.35, -27.32), + ); - final bottomCurveShape = BezierCurveShape( - controlPoints: [ - middleCurveShape.vertices.last, - Vector2(23, -14.2), - Vector2(27, -14.2), - ], - ); + final tunnelBottomEdgeShape = EdgeShape() + ..set( + Vector2(30.75, -23.17), + Vector2(25.45, -21.22), + ); - final bottomStraightShape = EdgeShape() + final middleEdgeShape = EdgeShape() ..set( - bottomCurveShape.vertices.last, - Vector2(31, -13.7), + tunnelBottomEdgeShape.vertex2, + Vector2(27.45, -19.32), + ); + + final bottomEdgeShape = EdgeShape() + ..set( + middleEdgeShape.vertex2, + Vector2(24.65, -15.02), + ); + + final undersideEdgeShape = EdgeShape() + ..set( + bottomEdgeShape.vertex2, + Vector2(31.75, -13.77), ); return [ - FixtureDef(topStraightShape), + FixtureDef(topEdgeShape), FixtureDef(topCurveShape), - FixtureDef(middleCurveShape), - FixtureDef(bottomCurveShape), - FixtureDef(bottomStraightShape), + FixtureDef(tunnelTopEdgeShape), + FixtureDef(tunnelBottomEdgeShape), + FixtureDef(middleEdgeShape), + FixtureDef(bottomEdgeShape), + FixtureDef(undersideEdgeShape), ]; } @@ -93,7 +104,15 @@ class _DinoTopWall extends BodyComponent with InitialPosition, ZIndex { } } -class _DinoTopWallSpriteComponent extends SpriteComponent with HasGameRef { +class _DinoTopWallSpriteComponent extends SpriteComponent + with HasGameRef, ZIndex { + _DinoTopWallSpriteComponent() + : super( + position: Vector2(22.75, -38.07), + ) { + zIndex = ZIndexes.dinoTopWall; + } + @override Future onLoad() async { await super.onLoad(); @@ -104,7 +123,26 @@ class _DinoTopWallSpriteComponent extends SpriteComponent with HasGameRef { ); this.sprite = sprite; size = sprite.originalSize / 10; - position = Vector2(22.8, -38.1); + } +} + +class _DinoTopWallTunnelSpriteComponent extends SpriteComponent + with HasGameRef, ZIndex { + _DinoTopWallTunnelSpriteComponent() + : super(position: Vector2(23.31, -26.01)) { + zIndex = ZIndexes.dinoTopWallTunnel; + } + + @override + Future onLoad() async { + await super.onLoad(); + final sprite = Sprite( + gameRef.images.fromCache( + Assets.images.dino.topWallTunnel.keyName, + ), + ); + this.sprite = sprite; + size = sprite.originalSize / 10; } } @@ -122,7 +160,7 @@ class _DinoBottomWall extends BodyComponent with InitialPosition, ZIndex { } List _createFixtureDefs() { - final topStraightShape = EdgeShape() + final topEdgeShape = EdgeShape() ..set( Vector2(32.4, -8.8), Vector2(25, -7.7), @@ -130,29 +168,29 @@ class _DinoBottomWall extends BodyComponent with InitialPosition, ZIndex { final topLeftCurveShape = BezierCurveShape( controlPoints: [ - topStraightShape.vertex2, + topEdgeShape.vertex2, Vector2(21.8, -7), Vector2(29.8, 13.8), ], ); - final bottomLeftStraightShape = EdgeShape() + final bottomLeftEdgeShape = EdgeShape() ..set( topLeftCurveShape.vertices.last, Vector2(31.9, 44.1), ); - final bottomStraightShape = EdgeShape() + final bottomEdgeShape = EdgeShape() ..set( - bottomLeftStraightShape.vertex2, + bottomLeftEdgeShape.vertex2, Vector2(37.8, 44.1), ); return [ - FixtureDef(topStraightShape), + FixtureDef(topEdgeShape), FixtureDef(topLeftCurveShape), - FixtureDef(bottomLeftStraightShape), - FixtureDef(bottomStraightShape), + FixtureDef(bottomLeftEdgeShape), + FixtureDef(bottomEdgeShape), ]; } diff --git a/packages/pinball_components/lib/src/components/z_indexes.dart b/packages/pinball_components/lib/src/components/z_indexes.dart index e3756f4a..a04402b5 100644 --- a/packages/pinball_components/lib/src/components/z_indexes.dart +++ b/packages/pinball_components/lib/src/components/z_indexes.dart @@ -59,6 +59,8 @@ abstract class ZIndexes { static const dinoTopWall = _above + ballOnBoard; + static const dinoTopWallTunnel = _below + ballOnBoard; + static const dino = _above + dinoTopWall; static const dinoBottomWall = _above + dino; diff --git a/packages/pinball_components/sandbox/lib/main.dart b/packages/pinball_components/sandbox/lib/main.dart index 9fdee65a..9bce5632 100644 --- a/packages/pinball_components/sandbox/lib/main.dart +++ b/packages/pinball_components/sandbox/lib/main.dart @@ -14,19 +14,17 @@ void main() { addBallStories(dashbook); addLayerStories(dashbook); addEffectsStories(dashbook); - addChromeDinoStories(dashbook); addFlutterForestStories(dashbook); - addBottomGroupStories(dashbook); - addPlungerStories(dashbook); - addSlingshotStories(dashbook); addSparkyScorchStories(dashbook); addAndroidAcresStories(dashbook); + addDinoDesertStories(dashbook); + addBottomGroupStories(dashbook); + addPlungerStories(dashbook); addBoundariesStories(dashbook); addGoogleWordStories(dashbook); addLaunchRampStories(dashbook); addScoreStories(dashbook); addBackboardStories(dashbook); - addDinoWallStories(dashbook); addMultiballStories(dashbook); addMultipliersStories(dashbook); diff --git a/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart b/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart deleted file mode 100644 index a4c70c03..00000000 --- a/packages/pinball_components/sandbox/lib/stories/chrome_dino/stories.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/chrome_dino/chrome_dino_game.dart'; - -void addChromeDinoStories(Dashbook dashbook) { - dashbook.storiesOf('Chrome Dino').addGame( - title: 'Traced', - description: ChromeDinoGame.description, - gameBuilder: (_) => ChromeDinoGame(), - ); -} diff --git a/packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/chrome_dino_game.dart similarity index 100% rename from packages/pinball_components/sandbox/lib/stories/chrome_dino/chrome_dino_game.dart rename to packages/pinball_components/sandbox/lib/stories/dino_desert/chrome_dino_game.dart diff --git a/packages/pinball_components/sandbox/lib/stories/dino_wall/dino_wall_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart similarity index 85% rename from packages/pinball_components/sandbox/lib/stories/dino_wall/dino_wall_game.dart rename to packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart index 0d213aa4..849e17a8 100644 --- a/packages/pinball_components/sandbox/lib/stories/dino_wall/dino_wall_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart @@ -4,8 +4,8 @@ import 'package:flame/input.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class DinoWallGame extends BallGame { - DinoWallGame() : super(); +class DinoWallsGame extends BallGame { + DinoWallsGame() : super(); static const description = ''' Shows how DinoWalls are rendered. @@ -20,6 +20,7 @@ class DinoWallGame extends BallGame { await images.loadAll([ Assets.images.dino.topWall.keyName, + Assets.images.dino.topWallTunnel.keyName, Assets.images.dino.bottomWall.keyName, ]); diff --git a/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart similarity index 92% rename from packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart rename to packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart index 11c38c0c..1a9eb2e5 100644 --- a/packages/pinball_components/sandbox/lib/stories/slingshot/slingshot_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart @@ -2,8 +2,8 @@ import 'package:flame/extensions.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; -class SlingshotGame extends BallGame { - SlingshotGame() +class SlingshotsGame extends BallGame { + SlingshotsGame() : super( imagesFileNames: [ Assets.images.slingshot.upper.keyName, diff --git a/packages/pinball_components/sandbox/lib/stories/dino_desert/stories.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/stories.dart new file mode 100644 index 00000000..bd8fc329 --- /dev/null +++ b/packages/pinball_components/sandbox/lib/stories/dino_desert/stories.dart @@ -0,0 +1,24 @@ +import 'package:dashbook/dashbook.dart'; +import 'package:sandbox/common/common.dart'; +import 'package:sandbox/stories/dino_desert/chrome_dino_game.dart'; +import 'package:sandbox/stories/dino_desert/dino_walls_game.dart'; +import 'package:sandbox/stories/dino_desert/slingshots_game.dart'; + +void addDinoDesertStories(Dashbook dashbook) { + dashbook.storiesOf('Dino Desert') + ..addGame( + title: 'Chrome Dino', + description: ChromeDinoGame.description, + gameBuilder: (_) => ChromeDinoGame(), + ) + ..addGame( + title: 'Dino Walls', + description: DinoWallsGame.description, + gameBuilder: (_) => DinoWallsGame(), + ) + ..addGame( + title: 'Slingshots', + description: SlingshotsGame.description, + gameBuilder: (_) => SlingshotsGame(), + ); +} diff --git a/packages/pinball_components/sandbox/lib/stories/dino_wall/stories.dart b/packages/pinball_components/sandbox/lib/stories/dino_wall/stories.dart deleted file mode 100644 index e24d26cc..00000000 --- a/packages/pinball_components/sandbox/lib/stories/dino_wall/stories.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/dino_wall/dino_wall_game.dart'; - -void addDinoWallStories(Dashbook dashbook) { - dashbook.storiesOf('DinoWall').addGame( - title: 'Traced', - description: DinoWallGame.description, - gameBuilder: (_) => DinoWallGame(), - ); -} diff --git a/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart b/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart deleted file mode 100644 index e4c04a0f..00000000 --- a/packages/pinball_components/sandbox/lib/stories/slingshot/stories.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:dashbook/dashbook.dart'; -import 'package:sandbox/common/common.dart'; -import 'package:sandbox/stories/slingshot/slingshot_game.dart'; - -void addSlingshotStories(Dashbook dashbook) { - dashbook.storiesOf('Slingshots').addGame( - title: 'Traced', - description: SlingshotGame.description, - gameBuilder: (_) => SlingshotGame(), - ); -} diff --git a/packages/pinball_components/sandbox/lib/stories/stories.dart b/packages/pinball_components/sandbox/lib/stories/stories.dart index 8cdd38b1..b8bc567c 100644 --- a/packages/pinball_components/sandbox/lib/stories/stories.dart +++ b/packages/pinball_components/sandbox/lib/stories/stories.dart @@ -3,8 +3,7 @@ export 'backboard/stories.dart'; export 'ball/stories.dart'; export 'bottom_group/stories.dart'; export 'boundaries/stories.dart'; -export 'chrome_dino/stories.dart'; -export 'dino_wall/stories.dart'; +export 'dino_desert/stories.dart'; export 'effects/stories.dart'; export 'flutter_forest/stories.dart'; export 'google_word/stories.dart'; @@ -14,5 +13,4 @@ export 'multiball/stories.dart'; export 'multipliers/stories.dart'; export 'plunger/stories.dart'; export 'score/stories.dart'; -export 'slingshot/stories.dart'; export 'sparky_scorch/stories.dart'; diff --git a/packages/pinball_components/test/helpers/helpers.dart b/packages/pinball_components/test/helpers/helpers.dart index 312f42ec..a8b9f7ff 100644 --- a/packages/pinball_components/test/helpers/helpers.dart +++ b/packages/pinball_components/test/helpers/helpers.dart @@ -1,2 +1 @@ -export 'mocks.dart'; export 'test_game.dart'; diff --git a/packages/pinball_components/test/helpers/mocks.dart b/packages/pinball_components/test/helpers/mocks.dart deleted file mode 100644 index 99959e03..00000000 --- a/packages/pinball_components/test/helpers/mocks.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:mocktail/mocktail.dart'; -import 'package:pinball_components/pinball_components.dart'; - -class MockFilter extends Mock implements Filter {} - -class MockFixture extends Mock implements Fixture {} - -class MockBody extends Mock implements Body {} - -class MockBall extends Mock implements Ball {} - -class MockGame extends Mock implements Forge2DGame {} - -class MockContact extends Mock implements Contact {} - -class MockComponent extends Mock implements Component {} - -class MockAndroidBumperCubit extends Mock implements AndroidBumperCubit {} - -class MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {} - -class MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} - -class MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {} - -class MockMultiballCubit extends Mock implements MultiballCubit {} - -class MockMultiplierCubit extends Mock implements MultiplierCubit {} - -class MockChromeDinoCubit extends Mock implements ChromeDinoCubit {} diff --git a/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart b/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart index e2fed1d2..aaca08fc 100644 --- a/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart +++ b/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart @@ -11,6 +11,8 @@ import 'package:pinball_components/src/components/bumping_behavior.dart'; import '../../../helpers/helpers.dart'; +class _MockAndroidBumperCubit extends Mock implements AndroidBumperCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -46,7 +48,7 @@ void main() { // https://github.com/flame-engine/flame/pull/1538 // ignore: public_member_api_docs flameTester.test('closes bloc when removed', (game) async { - final bloc = MockAndroidBumperCubit(); + final bloc = _MockAndroidBumperCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart index 69e6ce43..8c44a199 100644 --- a/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -9,6 +10,12 @@ import 'package:pinball_components/src/components/android_bumper/behaviors/behav import '../../../../helpers/helpers.dart'; +class _MockBall extends Mock implements Ball {} + +class _MockContact extends Mock implements Contact {} + +class _MockAndroidBumperCubit extends Mock implements AndroidBumperCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -27,7 +34,7 @@ void main() { 'beginContact emits onBallContacted when contacts with a ball', (game) async { final behavior = AndroidBumperBallContactBehavior(); - final bloc = MockAndroidBumperCubit(); + final bloc = _MockAndroidBumperCubit(); whenListen( bloc, const Stream.empty(), @@ -38,7 +45,7 @@ void main() { await androidBumper.add(behavior); await game.ensureAdd(androidBumper); - behavior.beginContact(MockBall(), MockContact()); + behavior.beginContact(_MockBall(), _MockContact()); verify(androidBumper.bloc.onBallContacted).called(1); }, diff --git a/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_blinking_behavior_test.dart b/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_blinking_behavior_test.dart index f7b09dfb..37cb93ba 100644 --- a/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_blinking_behavior_test.dart +++ b/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_blinking_behavior_test.dart @@ -9,6 +9,8 @@ import 'package:pinball_components/src/components/android_bumper/behaviors/behav import '../../../../helpers/helpers.dart'; +class _MockAndroidBumperCubit extends Mock implements AndroidBumperCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -20,7 +22,7 @@ void main() { 'calls onBlinked after 0.05 seconds when dimmed', setUp: (game, tester) async { final behavior = AndroidBumperBlinkingBehavior(); - final bloc = MockAndroidBumperCubit(); + final bloc = _MockAndroidBumperCubit(); final streamController = StreamController(); whenListen( bloc, diff --git a/packages/pinball_components/test/src/components/android_spaceship/behaviors/android_spaceship_entrance_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/android_spaceship/behaviors/android_spaceship_entrance_ball_contact_behavior_test.dart index 45a38e8d..d6056beb 100644 --- a/packages/pinball_components/test/src/components/android_spaceship/behaviors/android_spaceship_entrance_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/android_spaceship/behaviors/android_spaceship_entrance_ball_contact_behavior_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -12,6 +13,10 @@ import '../../../../helpers/helpers.dart'; class _MockAndroidSpaceshipCubit extends Mock implements AndroidSpaceshipCubit { } +class _MockBall extends Mock implements Ball {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -45,7 +50,7 @@ void main() { await entrance.add(behavior); await game.ensureAdd(androidSpaceship); - behavior.beginContact(MockBall(), MockContact()); + behavior.beginContact(_MockBall(), _MockContact()); verify(androidSpaceship.bloc.onBallEntered).called(1); }, 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 141d89de..8d052fab 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 @@ -2,6 +2,7 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flame/components.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -11,6 +12,12 @@ import 'package:pinball_components/src/components/chrome_dino/behaviors/behavior import '../../../../helpers/helpers.dart'; +class _MockChromeDinoCubit extends Mock implements ChromeDinoCubit {} + +class _MockContact extends Mock implements Contact {} + +class _MockFixture extends Mock implements Fixture {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -30,7 +37,7 @@ void main() { (game) async { final ball = Ball(baseColor: Colors.red); final behavior = ChromeDinoChompingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), @@ -44,8 +51,8 @@ void main() { await chromeDino.add(behavior); await game.ensureAddAll([chromeDino, ball]); - final contact = MockContact(); - final fixture = MockFixture(); + final contact = _MockContact(); + final fixture = _MockFixture(); when(() => contact.fixtureA).thenReturn(fixture); when(() => fixture.userData).thenReturn('inside_mouth'); diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart index 31e49cd4..69f57114 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart @@ -10,6 +10,14 @@ import 'package:pinball_components/src/components/chrome_dino/behaviors/behavior import '../../../../helpers/helpers.dart'; +class _MockChromeDinoCubit extends Mock implements ChromeDinoCubit {} + +class _MockContact extends Mock implements Contact {} + +class _MockFixture extends Mock implements Fixture {} + +class _MockBall extends Mock implements Ball {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -29,7 +37,7 @@ void main() { 'and there is not ball in the mouth', (game) async { final behavior = ChromeDinoMouthOpeningBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), @@ -43,12 +51,12 @@ void main() { await chromeDino.add(behavior); await game.ensureAdd(chromeDino); - final contact = MockContact(); - final fixture = MockFixture(); + final contact = _MockContact(); + final fixture = _MockFixture(); when(() => contact.fixtureA).thenReturn(fixture); when(() => fixture.userData).thenReturn('mouth_opening'); - behavior.preSolve(MockBall(), contact, Manifold()); + behavior.preSolve(_MockBall(), contact, Manifold()); verify(() => contact.setEnabled(false)).called(1); }, 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 9993fa16..1d0a55b4 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 @@ -13,6 +13,8 @@ import 'package:pinball_components/src/components/chrome_dino/behaviors/behavior import '../../../../helpers/helpers.dart'; +class _MockChromeDinoCubit extends Mock implements ChromeDinoCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -33,7 +35,7 @@ void main() { (game) async { final ball = Ball(baseColor: Colors.red); final behavior = ChromeDinoSpittingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); final streamController = StreamController(); final chompingState = ChromeDinoState( status: ChromeDinoStatus.chomping, @@ -71,7 +73,7 @@ void main() { (game) async { final ball = Ball(baseColor: Colors.red); final behavior = ChromeDinoSpittingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); final streamController = StreamController(); final chompingState = ChromeDinoState( status: ChromeDinoStatus.chomping, diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart index 5dd6c06d..9b6a05b6 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart @@ -10,6 +10,8 @@ import 'package:pinball_components/src/components/chrome_dino/behaviors/behavior import '../../../../helpers/helpers.dart'; +class _MockChromeDinoCubit extends Mock implements ChromeDinoCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -30,7 +32,7 @@ void main() { 'creates a RevoluteJoint', (game) async { final behavior = ChromeDinoSwivelingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), @@ -52,7 +54,7 @@ void main() { 'reverses swivel direction on each timer tick', (game) async { final behavior = ChromeDinoSwivelingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), @@ -84,7 +86,7 @@ void main() { 'and mouth is open', setUp: (game, tester) async { final behavior = ChromeDinoSwivelingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), @@ -113,7 +115,7 @@ void main() { 'and mouth is closed', setUp: (game, tester) async { final behavior = ChromeDinoSwivelingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), @@ -141,7 +143,7 @@ void main() { 'and mouth is closed', setUp: (game, tester) async { final behavior = ChromeDinoSwivelingBehavior(); - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart b/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart index 9826cf95..4c1802ef 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart @@ -10,6 +10,8 @@ import 'package:pinball_components/src/components/chrome_dino/behaviors/behavior import '../../../helpers/helpers.dart'; +class _MockChromeDinoCubit extends Mock implements ChromeDinoCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -73,7 +75,7 @@ void main() { // https://github.com/flame-engine/flame/pull/1538 // ignore: public_member_api_docs flameTester.test('closes bloc when removed', (game) async { - final bloc = MockChromeDinoCubit(); + final bloc = _MockChromeDinoCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart index bf7513bd..10627df6 100644 --- a/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/dash_nest_bumper/behaviors/dash_nest_bumper_ball_contact_behavior_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -9,6 +10,12 @@ import 'package:pinball_components/src/components/dash_nest_bumper/behaviors/beh import '../../../../helpers/helpers.dart'; +class _MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {} + +class _MockBall extends Mock implements Ball {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -27,7 +34,7 @@ void main() { 'beginContact emits onBallContacted when contacts with a ball', (game) async { final behavior = DashNestBumperBallContactBehavior(); - final bloc = MockDashNestBumperCubit(); + final bloc = _MockDashNestBumperCubit(); whenListen( bloc, const Stream.empty(), @@ -38,7 +45,7 @@ void main() { await dashNestBumper.add(behavior); await game.ensureAdd(dashNestBumper); - behavior.beginContact(MockBall(), MockContact()); + behavior.beginContact(_MockBall(), _MockContact()); verify(dashNestBumper.bloc.onBallContacted).called(1); }, diff --git a/packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart b/packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart index df3ee36f..195231bf 100644 --- a/packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart +++ b/packages/pinball_components/test/src/components/dash_nest_bumper/dash_nest_bumper_test.dart @@ -11,6 +11,8 @@ import 'package:pinball_components/src/components/dash_nest_bumper/behaviors/beh import '../../../helpers/helpers.dart'; +class _MockDashNestBumperCubit extends Mock implements DashNestBumperCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -48,7 +50,7 @@ void main() { // https://github.com/flame-engine/flame/pull/1538 // ignore: public_member_api_docs flameTester.test('closes bloc when removed', (game) async { - final bloc = MockDashNestBumperCubit(); + final bloc = _MockDashNestBumperCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_components/test/src/components/dino_walls_test.dart b/packages/pinball_components/test/src/components/dino_walls_test.dart index a93c6a3c..5e4471e5 100644 --- a/packages/pinball_components/test/src/components/dino_walls_test.dart +++ b/packages/pinball_components/test/src/components/dino_walls_test.dart @@ -12,6 +12,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ Assets.images.dino.topWall.keyName, + Assets.images.dino.topWallTunnel.keyName, Assets.images.dino.bottomWall.keyName, ]; final flameTester = FlameTester(() => TestGame(assets)); diff --git a/packages/pinball_components/test/src/components/golden/dino-walls.png b/packages/pinball_components/test/src/components/golden/dino-walls.png index 592c83fb..c7d55c04 100644 Binary files a/packages/pinball_components/test/src/components/golden/dino-walls.png and b/packages/pinball_components/test/src/components/golden/dino-walls.png differ diff --git a/packages/pinball_components/test/src/components/google_letter/behaviors/google_letter_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/google_letter/behaviors/google_letter_ball_contact_behavior_test.dart index 12c596e6..6a6fd437 100644 --- a/packages/pinball_components/test/src/components/google_letter/behaviors/google_letter_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/google_letter/behaviors/google_letter_ball_contact_behavior_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -9,6 +10,12 @@ import 'package:pinball_components/src/components/google_letter/behaviors/behavi import '../../../../helpers/helpers.dart'; +class _MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {} + +class _MockBall extends Mock implements Ball {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -27,7 +34,7 @@ void main() { 'beginContact emits onBallContacted when contacts with a ball', (game) async { final behavior = GoogleLetterBallContactBehavior(); - final bloc = MockGoogleLetterCubit(); + final bloc = _MockGoogleLetterCubit(); whenListen( bloc, const Stream.empty(), @@ -38,7 +45,7 @@ void main() { await googleLetter.add(behavior); await game.ensureAdd(googleLetter); - behavior.beginContact(MockBall(), MockContact()); + behavior.beginContact(_MockBall(), _MockContact()); verify(googleLetter.bloc.onBallContacted).called(1); }, diff --git a/packages/pinball_components/test/src/components/google_letter/google_letter_test.dart b/packages/pinball_components/test/src/components/google_letter/google_letter_test.dart index be1f9743..afd4c130 100644 --- a/packages/pinball_components/test/src/components/google_letter/google_letter_test.dart +++ b/packages/pinball_components/test/src/components/google_letter/google_letter_test.dart @@ -10,6 +10,8 @@ import 'package:pinball_components/src/components/google_letter/behaviors/behavi import '../../../helpers/helpers.dart'; +class _MockGoogleLetterCubit extends Mock implements GoogleLetterCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -104,7 +106,7 @@ void main() { // https://github.com/flame-engine/flame/pull/1538 // ignore: public_member_api_docs flameTester.test('closes bloc when removed', (game) async { - final bloc = MockGoogleLetterCubit(); + final bloc = _MockGoogleLetterCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_components/test/src/components/kicker/behaviors/kicker_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/kicker/behaviors/kicker_ball_contact_behavior_test.dart index 6c04cdcb..6fa6d4a7 100644 --- a/packages/pinball_components/test/src/components/kicker/behaviors/kicker_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/kicker/behaviors/kicker_ball_contact_behavior_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -11,6 +12,10 @@ import '../../../../helpers/helpers.dart'; class _MockKickerCubit extends Mock implements KickerCubit {} +class _MockBall extends Mock implements Ball {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -43,7 +48,7 @@ void main() { await kicker.add(behavior); await game.ensureAdd(kicker); - behavior.beginContact(MockBall(), MockContact()); + behavior.beginContact(_MockBall(), _MockContact()); verify(kicker.bloc.onBallContacted).called(1); }, diff --git a/packages/pinball_components/test/src/components/layer_sensor_test.dart b/packages/pinball_components/test/src/components/layer_sensor_test.dart index 9103a966..cfd19bb0 100644 --- a/packages/pinball_components/test/src/components/layer_sensor_test.dart +++ b/packages/pinball_components/test/src/components/layer_sensor_test.dart @@ -7,6 +7,12 @@ import 'package:pinball_components/pinball_components.dart'; import '../../helpers/helpers.dart'; +class _MockBall extends Mock implements Ball {} + +class _MockBody extends Mock implements Body {} + +class _MockContact extends Mock implements Contact {} + class TestLayerSensor extends LayerSensor { TestLayerSensor({ required LayerEntranceOrientation orientation, @@ -115,8 +121,8 @@ void main() { late Layer insideLayer; setUp(() { - ball = MockBall(); - body = MockBody(); + ball = _MockBall(); + body = _MockBody(); insideZIndex = 1; insideLayer = Layer.spaceshipEntranceRamp; @@ -136,13 +142,13 @@ void main() { when(() => body.linearVelocity).thenReturn(Vector2(0, -1)); - sensor.beginContact(ball, MockContact()); + sensor.beginContact(ball, _MockContact()); verify(() => ball.layer = insideLayer).called(1); verify(() => ball.zIndex = insideZIndex).called(1); when(() => ball.layer).thenReturn(insideLayer); - sensor.beginContact(ball, MockContact()); + sensor.beginContact(ball, _MockContact()); verify(() => ball.layer = Layer.board); verify(() => ball.zIndex = ZIndexes.ballOnBoard).called(1); }); @@ -159,13 +165,13 @@ void main() { when(() => body.linearVelocity).thenReturn(Vector2(0, 1)); - sensor.beginContact(ball, MockContact()); + sensor.beginContact(ball, _MockContact()); verify(() => ball.layer = insideLayer).called(1); verify(() => ball.zIndex = insidePriority).called(1); when(() => ball.layer).thenReturn(insideLayer); - sensor.beginContact(ball, MockContact()); + sensor.beginContact(ball, _MockContact()); verify(() => ball.layer = Layer.board); verify(() => ball.zIndex = ZIndexes.ballOnBoard).called(1); }); diff --git a/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart b/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart index 2b3885f9..379f8610 100644 --- a/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart +++ b/packages/pinball_components/test/src/components/multiball/behaviors/multiball_blinking_behavior_test.dart @@ -11,6 +11,8 @@ import 'package:pinball_components/src/components/multiball/behaviors/behaviors. import '../../../../helpers/helpers.dart'; +class _MockMultiballCubit extends Mock implements MultiballCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -22,7 +24,7 @@ void main() { 'calls onBlink every 0.1 seconds when animation state is animated', setUp: (game, tester) async { final behavior = MultiballBlinkingBehavior(); - final bloc = MockMultiballCubit(); + final bloc = _MockMultiballCubit(); final streamController = StreamController(); whenListen( bloc, @@ -57,7 +59,7 @@ void main() { 'calls onStop when animation state is stopped', setUp: (game, tester) async { final behavior = MultiballBlinkingBehavior(); - final bloc = MockMultiballCubit(); + final bloc = _MockMultiballCubit(); final streamController = StreamController(); whenListen( bloc, @@ -94,7 +96,7 @@ void main() { 'onTick stops when there is no animation', setUp: (game, tester) async { final behavior = MultiballBlinkingBehavior(); - final bloc = MockMultiballCubit(); + final bloc = _MockMultiballCubit(); final streamController = StreamController(); whenListen( bloc, @@ -125,7 +127,7 @@ void main() { 'onTick stops after 10 blinks repetitions', setUp: (game, tester) async { final behavior = MultiballBlinkingBehavior(); - final bloc = MockMultiballCubit(); + final bloc = _MockMultiballCubit(); final streamController = StreamController(); whenListen( bloc, diff --git a/packages/pinball_components/test/src/components/multiball/multiball_test.dart b/packages/pinball_components/test/src/components/multiball/multiball_test.dart index 9b1e0e2f..26dcf8a8 100644 --- a/packages/pinball_components/test/src/components/multiball/multiball_test.dart +++ b/packages/pinball_components/test/src/components/multiball/multiball_test.dart @@ -10,6 +10,8 @@ import 'package:pinball_components/src/components/multiball/behaviors/behaviors. import '../../../helpers/helpers.dart'; +class _MockMultiballCubit extends Mock implements MultiballCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -50,7 +52,7 @@ void main() { flameTester.test( 'closes bloc when removed', (game) async { - final bloc = MockMultiballCubit(); + final bloc = _MockMultiballCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart b/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart index edc2735f..deb69a44 100644 --- a/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart +++ b/packages/pinball_components/test/src/components/multiplier/multiplier_test.dart @@ -9,9 +9,9 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../helpers/helpers.dart'; -void main() { - final bloc = MockMultiplierCubit(); +class _MockMultiplierCubit extends Mock implements MultiplierCubit {} +void main() { group('Multiplier', () { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -27,6 +27,11 @@ void main() { Assets.images.multiplier.x6.dimmed.keyName, ]; final flameTester = FlameTester(() => TestGame(assets)); + late MultiplierCubit bloc; + + setUp(() { + bloc = _MockMultiplierCubit(); + }); flameTester.test('"x2" loads correctly', (game) async { final multiplier = Multiplier.x2( diff --git a/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behavior_test.dart index f67b28d7..1d10d0aa 100644 --- a/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_ball_contact_behavior_test.dart @@ -1,6 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -9,6 +10,12 @@ import 'package:pinball_components/src/components/sparky_bumper/behaviors/behavi import '../../../../helpers/helpers.dart'; +class _MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} + +class _MockBall extends Mock implements Ball {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -27,7 +34,7 @@ void main() { 'beginContact emits onBallContacted when contacts with a ball', (game) async { final behavior = SparkyBumperBallContactBehavior(); - final bloc = MockSparkyBumperCubit(); + final bloc = _MockSparkyBumperCubit(); whenListen( bloc, const Stream.empty(), @@ -38,7 +45,7 @@ void main() { await sparkyBumper.add(behavior); await game.ensureAdd(sparkyBumper); - behavior.beginContact(MockBall(), MockContact()); + behavior.beginContact(_MockBall(), _MockContact()); verify(sparkyBumper.bloc.onBallContacted).called(1); }, diff --git a/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior_test.dart b/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior_test.dart index 2210754f..e48998ed 100644 --- a/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior_test.dart +++ b/packages/pinball_components/test/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior_test.dart @@ -9,6 +9,8 @@ import 'package:pinball_components/src/components/sparky_bumper/behaviors/behavi import '../../../../helpers/helpers.dart'; +class _MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -20,7 +22,7 @@ void main() { 'calls onBlinked after 0.05 seconds when dimmed', setUp: (game, tester) async { final behavior = SparkyBumperBlinkingBehavior(); - final bloc = MockSparkyBumperCubit(); + final bloc = _MockSparkyBumperCubit(); final streamController = StreamController(); whenListen( bloc, diff --git a/packages/pinball_components/test/src/components/sparky_bumper/sparky_bumper_test.dart b/packages/pinball_components/test/src/components/sparky_bumper/sparky_bumper_test.dart index 709b3dc5..7544fdd2 100644 --- a/packages/pinball_components/test/src/components/sparky_bumper/sparky_bumper_test.dart +++ b/packages/pinball_components/test/src/components/sparky_bumper/sparky_bumper_test.dart @@ -11,6 +11,8 @@ import 'package:pinball_components/src/components/sparky_bumper/behaviors/behavi import '../../../helpers/helpers.dart'; +class _MockSparkyBumperCubit extends Mock implements SparkyBumperCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -46,7 +48,7 @@ void main() { // https://github.com/flame-engine/flame/pull/1538 // ignore: public_member_api_docs flameTester.test('closes bloc when removed', (game) async { - final bloc = MockSparkyBumperCubit(); + final bloc = _MockSparkyBumperCubit(); whenListen( bloc, const Stream.empty(), diff --git a/packages/pinball_flame/test/helpers/helpers.dart b/packages/pinball_flame/test/helpers/helpers.dart deleted file mode 100644 index efe914f6..00000000 --- a/packages/pinball_flame/test/helpers/helpers.dart +++ /dev/null @@ -1 +0,0 @@ -export 'mocks.dart'; diff --git a/packages/pinball_flame/test/helpers/mocks.dart b/packages/pinball_flame/test/helpers/mocks.dart deleted file mode 100644 index 1c5042ff..00000000 --- a/packages/pinball_flame/test/helpers/mocks.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:mocktail/mocktail.dart'; - -class MockForge2DGame extends Mock implements Forge2DGame {} - -class MockComponent extends Mock implements Component {} diff --git a/packages/pinball_flame/test/src/keyboard_input_controller_test.dart b/packages/pinball_flame/test/src/keyboard_input_controller_test.dart index 99a0006b..7b554e8c 100644 --- a/packages/pinball_flame/test/src/keyboard_input_controller_test.dart +++ b/packages/pinball_flame/test/src/keyboard_input_controller_test.dart @@ -6,13 +6,13 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball_flame/pinball_flame.dart'; -abstract class _KeyCallStub { +abstract class _KeyCall { bool onCall(); } -class KeyCallStub extends Mock implements _KeyCallStub {} +class _MockKeyCall extends Mock implements _KeyCall {} -class MockRawKeyUpEvent extends Mock implements RawKeyUpEvent { +class _MockRawKeyUpEvent extends Mock implements RawKeyUpEvent { @override String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { return super.toString(); @@ -20,7 +20,7 @@ class MockRawKeyUpEvent extends Mock implements RawKeyUpEvent { } RawKeyUpEvent _mockKeyUp(LogicalKeyboardKey key) { - final event = MockRawKeyUpEvent(); + final event = _MockRawKeyUpEvent(); when(() => event.logicalKey).thenReturn(key); return event; } @@ -28,7 +28,7 @@ RawKeyUpEvent _mockKeyUp(LogicalKeyboardKey key) { void main() { group('KeyboardInputController', () { test('calls registered handlers', () { - final stub = KeyCallStub(); + final stub = _MockKeyCall(); when(stub.onCall).thenReturn(true); final input = KeyboardInputController( @@ -44,7 +44,7 @@ void main() { test( 'returns false the handler return value', () { - final stub = KeyCallStub(); + final stub = _MockKeyCall(); when(stub.onCall).thenReturn(false); final input = KeyboardInputController( @@ -63,7 +63,7 @@ void main() { test( 'returns true (allowing event to bubble) when no handler is registered', () { - final stub = KeyCallStub(); + final stub = _MockKeyCall(); when(stub.onCall).thenReturn(true); final input = KeyboardInputController(); diff --git a/packages/pinball_flame/test/src/sprite_animation_test.dart b/packages/pinball_flame/test/src/sprite_animation_test.dart index e3b287de..dc37d983 100644 --- a/packages/pinball_flame/test/src/sprite_animation_test.dart +++ b/packages/pinball_flame/test/src/sprite_animation_test.dart @@ -3,12 +3,12 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball_flame/pinball_flame.dart'; -class MockSpriteAnimationController extends Mock +class _MockSpriteAnimationController extends Mock implements SpriteAnimationController {} -class MockSpriteAnimation extends Mock implements SpriteAnimation {} +class _MockSpriteAnimation extends Mock implements SpriteAnimation {} -class MockSprite extends Mock implements Sprite {} +class _MockSprite extends Mock implements Sprite {} // TODO(arturplaczek): Remove when this PR will be merged. // https://github.com/flame-engine/flame/pull/1552 @@ -20,9 +20,9 @@ void main() { late Sprite sprite; setUp(() { - controller = MockSpriteAnimationController(); - animation = MockSpriteAnimation(); - sprite = MockSprite(); + controller = _MockSpriteAnimationController(); + animation = _MockSpriteAnimation(); + sprite = _MockSprite(); when(() => controller.animation).thenAnswer((_) => animation); diff --git a/packages/pinball_ui/test/src/external_links/external_links_test.dart b/packages/pinball_ui/test/src/external_links/external_links_test.dart index 83cc2d63..a1b11a26 100644 --- a/packages/pinball_ui/test/src/external_links/external_links_test.dart +++ b/packages/pinball_ui/test/src/external_links/external_links_test.dart @@ -3,7 +3,7 @@ import 'package:mocktail/mocktail.dart'; import 'package:pinball_ui/pinball_ui.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; -class MockUrlLauncher extends Mock +class _MockUrlLauncher extends Mock with MockPlatformInterfaceMixin implements UrlLauncherPlatform {} @@ -11,7 +11,7 @@ void main() { late UrlLauncherPlatform urlLauncher; setUp(() { - urlLauncher = MockUrlLauncher(); + urlLauncher = _MockUrlLauncher(); UrlLauncherPlatform.instance = urlLauncher; }); diff --git a/test/app/view/app_test.dart b/test/app/view/app_test.dart index 83e37499..5ba5aca7 100644 --- a/test/app/view/app_test.dart +++ b/test/app/view/app_test.dart @@ -13,7 +13,13 @@ import 'package:pinball/app/app.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_audio/pinball_audio.dart'; -import '../../helpers/mocks.dart'; +class _MockAuthenticationRepository extends Mock + implements AuthenticationRepository {} + +class _MockPinballAudio extends Mock implements PinballAudio {} + +class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { +} void main() { group('App', () { @@ -22,9 +28,9 @@ void main() { late PinballAudio pinballAudio; setUp(() { - authenticationRepository = MockAuthenticationRepository(); - leaderboardRepository = MockLeaderboardRepository(); - pinballAudio = MockPinballAudio(); + authenticationRepository = _MockAuthenticationRepository(); + leaderboardRepository = _MockLeaderboardRepository(); + pinballAudio = _MockPinballAudio(); when(pinballAudio.load).thenAnswer((_) => Future.value()); }); diff --git a/test/footer/footer_test.dart b/test/footer/footer_test.dart index c18d76e7..f8f69259 100644 --- a/test/footer/footer_test.dart +++ b/test/footer/footer_test.dart @@ -3,15 +3,20 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:pinball/footer/footer.dart'; import 'package:pinball_ui/pinball_ui.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import '../helpers/helpers.dart'; +class _MockUrlLauncher extends Mock + with MockPlatformInterfaceMixin + implements UrlLauncherPlatform {} + void main() { group('Footer', () { late UrlLauncherPlatform urlLauncher; setUp(() async { - urlLauncher = MockUrlLauncher(); + urlLauncher = _MockUrlLauncher(); UrlLauncherPlatform.instance = urlLauncher; }); testWidgets('renders "Made with..." and "Google I/O"', (tester) async { diff --git a/test/game/components/android_acres/behaviors/android_spaceship_bonus_behavior_test.dart b/test/game/components/android_acres/behaviors/android_spaceship_bonus_behavior_test.dart index eb8ad211..6be120d5 100644 --- a/test/game/components/android_acres/behaviors/android_spaceship_bonus_behavior_test.dart +++ b/test/game/components/android_acres/behaviors/android_spaceship_bonus_behavior_test.dart @@ -11,6 +11,8 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -41,7 +43,7 @@ void main() { late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), diff --git a/test/game/components/controlled_ball_test.dart b/test/game/components/controlled_ball_test.dart index c84ddaa7..17178e87 100644 --- a/test/game/components/controlled_ball_test.dart +++ b/test/game/components/controlled_ball_test.dart @@ -14,8 +14,8 @@ import '../../helpers/helpers.dart'; // TODO(allisonryan0002): remove once // https://github.com/flame-engine/flame/pull/1520 is merged -class WrappedBallController extends BallController { - WrappedBallController(Ball ball, this._gameRef) : super(ball); +class _WrappedBallController extends BallController { + _WrappedBallController(Ball ball, this._gameRef) : super(ball); final PinballGame _gameRef; @@ -23,6 +23,14 @@ class WrappedBallController extends BallController { PinballGame get gameRef => _gameRef; } +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockPinballGame extends Mock implements PinballGame {} + +class _MockControlledBall extends Mock implements ControlledBall {} + +class _MockBall extends Mock implements Ball {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -32,7 +40,7 @@ void main() { setUp(() { ball = Ball(baseColor: const Color(0xFF00FFFF)); - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -47,7 +55,7 @@ void main() { test('can be instantiated', () { expect( - BallController(MockBall()), + BallController(_MockBall()), isA(), ); }); @@ -112,9 +120,9 @@ void main() { flameBlocTester.test( 'initially stops the ball', (game) async { - final gameRef = MockPinballGame(); - final ball = MockControlledBall(); - final controller = WrappedBallController(ball, gameRef); + final gameRef = _MockPinballGame(); + final ball = _MockControlledBall(); + final controller = _WrappedBallController(ball, gameRef); when(() => gameRef.read()).thenReturn(gameBloc); when(() => ball.controller).thenReturn(controller); when(() => ball.boost(any())).thenAnswer((_) async {}); @@ -128,9 +136,9 @@ void main() { flameBlocTester.test( 'resumes the ball', (game) async { - final gameRef = MockPinballGame(); - final ball = MockControlledBall(); - final controller = WrappedBallController(ball, gameRef); + final gameRef = _MockPinballGame(); + final ball = _MockControlledBall(); + final controller = _WrappedBallController(ball, gameRef); when(() => gameRef.read()).thenReturn(gameBloc); when(() => ball.controller).thenReturn(controller); when(() => ball.boost(any())).thenAnswer((_) async {}); @@ -144,9 +152,9 @@ void main() { flameBlocTester.test( 'boosts the ball', (game) async { - final gameRef = MockPinballGame(); - final ball = MockControlledBall(); - final controller = WrappedBallController(ball, gameRef); + final gameRef = _MockPinballGame(); + final ball = _MockControlledBall(); + final controller = _WrappedBallController(ball, gameRef); when(() => gameRef.read()).thenReturn(gameBloc); when(() => ball.controller).thenReturn(controller); when(() => ball.boost(any())).thenAnswer((_) async {}); diff --git a/test/game/components/controlled_flipper_test.dart b/test/game/components/controlled_flipper_test.dart index 36a8161b..e8b7aaf3 100644 --- a/test/game/components/controlled_flipper_test.dart +++ b/test/game/components/controlled_flipper_test.dart @@ -4,11 +4,14 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter/services.dart'; 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 '../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -22,7 +25,7 @@ void main() { final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () { - final bloc = MockGameBloc(); + final bloc = _MockGameBloc(); const state = GameState( score: 0, multiplier: 1, diff --git a/test/game/components/controlled_plunger_test.dart b/test/game/components/controlled_plunger_test.dart index a39bdef6..c832e24a 100644 --- a/test/game/components/controlled_plunger_test.dart +++ b/test/game/components/controlled_plunger_test.dart @@ -5,11 +5,14 @@ import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter/services.dart'; 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 '../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(EmptyPinballTestGame.new); @@ -17,7 +20,7 @@ void main() { final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () { - final bloc = MockGameBloc(); + final bloc = _MockGameBloc(); const state = GameState( score: 0, multiplier: 1, diff --git a/test/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior_test.dart b/test/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior_test.dart index 3b8f2dfa..22b6313b 100644 --- a/test/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior_test.dart +++ b/test/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior_test.dart @@ -10,6 +10,10 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockBall extends Mock implements Ball {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -25,7 +29,7 @@ void main() { late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -51,7 +55,7 @@ void main() { await game.ensureAdd(parent); await parent.ensureAdd(behavior); - chromeDino.bloc.onChomp(MockBall()); + chromeDino.bloc.onChomp(_MockBall()); await tester.pump(); verify( diff --git a/test/game/components/dino_desert/dino_desert_test.dart b/test/game/components/dino_desert/dino_desert_test.dart index 262ddc2d..20c9ad38 100644 --- a/test/game/components/dino_desert/dino_desert_test.dart +++ b/test/game/components/dino_desert/dino_desert_test.dart @@ -14,6 +14,7 @@ void main() { Assets.images.dino.animatronic.head.keyName, Assets.images.dino.animatronic.mouth.keyName, Assets.images.dino.topWall.keyName, + Assets.images.dino.topWallTunnel.keyName, Assets.images.dino.bottomWall.keyName, Assets.images.slingshot.upper.keyName, Assets.images.slingshot.lower.keyName, diff --git a/test/game/components/drain_test.dart b/test/game/components/drain_test.dart index f1875a56..984abce3 100644 --- a/test/game/components/drain_test.dart +++ b/test/game/components/drain_test.dart @@ -8,6 +8,12 @@ import 'package:pinball/game/game.dart'; import '../../helpers/helpers.dart'; +class _MockControlledBall extends Mock implements ControlledBall {} + +class _MockBallController extends Mock implements BallController {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(TestGame.new); @@ -18,7 +24,6 @@ void main() { (game) async { final drain = Drain(); await game.ensureAdd(drain); - expect(game.contains(drain), isTrue); }, ); @@ -28,7 +33,6 @@ void main() { (game) async { final drain = Drain(); await game.ensureAdd(drain); - expect(drain.body.bodyType, equals(BodyType.static)); }, ); @@ -38,7 +42,6 @@ void main() { (game) async { final drain = Drain(); await game.ensureAdd(drain); - expect(drain.body.fixtures.first.isSensor, isTrue); }, ); @@ -47,11 +50,11 @@ void main() { 'calls lost on contact with ball', () async { final drain = Drain(); - final ball = MockControlledBall(); - final controller = MockBallController(); + final ball = _MockControlledBall(); + final controller = _MockBallController(); when(() => ball.controller).thenReturn(controller); - drain.beginContact(ball, MockContact()); + drain.beginContact(ball, _MockContact()); verify(controller.lost).called(1); }, diff --git a/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart b/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart index 2de84edd..f9e2988d 100644 --- a/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart +++ b/test/game/components/flutter_forest/behaviors/flutter_forest_bonus_behavior_test.dart @@ -13,13 +13,15 @@ import 'package:pinball_flame/pinball_flame.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { group('FlutterForestBonusBehavior', () { late GameBloc gameBloc; final assets = [Assets.images.dash.animatronic.keyName]; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), diff --git a/test/game/components/game_flow_controller_test.dart b/test/game/components/game_flow_controller_test.dart index c3674146..c85d0b52 100644 --- a/test/game/components/game_flow_controller_test.dart +++ b/test/game/components/game_flow_controller_test.dart @@ -8,7 +8,16 @@ import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_theme/pinball_theme.dart'; -import '../../helpers/helpers.dart'; +class _MockPinballGame extends Mock implements PinballGame {} + +class _MockBackboard extends Mock implements Backboard {} + +class _MockCameraController extends Mock implements CameraController {} + +class _MockActiveOverlaysNotifier extends Mock + implements ActiveOverlaysNotifier {} + +class _MockPinballAudio extends Mock implements PinballAudio {} void main() { group('GameFlowController', () { @@ -23,7 +32,7 @@ void main() { final previous = GameState.initial(); expect( - GameFlowController(MockPinballGame()).listenWhen(previous, state), + GameFlowController(_MockPinballGame()).listenWhen(previous, state), isTrue, ); }); @@ -38,12 +47,12 @@ void main() { late ActiveOverlaysNotifier overlays; setUp(() { - game = MockPinballGame(); - backboard = MockBackboard(); - cameraController = MockCameraController(); + game = _MockPinballGame(); + backboard = _MockBackboard(); + cameraController = _MockCameraController(); gameFlowController = GameFlowController(game); - overlays = MockActiveOverlaysNotifier(); - pinballAudio = MockPinballAudio(); + overlays = _MockActiveOverlaysNotifier(); + pinballAudio = _MockPinballAudio(); when( () => backboard.gameOverMode( diff --git a/test/game/components/google_word/behaviors/google_word_bonus_behavior_test.dart b/test/game/components/google_word/behaviors/google_word_bonus_behavior_test.dart index 305a0c1f..c9910fd7 100644 --- a/test/game/components/google_word/behaviors/google_word_bonus_behavior_test.dart +++ b/test/game/components/google_word/behaviors/google_word_bonus_behavior_test.dart @@ -10,6 +10,8 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -31,7 +33,7 @@ void main() { late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), diff --git a/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart b/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart index 00049a83..5f8b1400 100644 --- a/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart +++ b/test/game/components/multiballs/behaviors/multiballs_behavior_test.dart @@ -12,6 +12,10 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockMultiballCubit extends Mock implements MultiballCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -23,7 +27,7 @@ void main() { late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -89,8 +93,8 @@ void main() { setUp: (game, tester) async { final behavior = MultiballsBehavior(); final parent = Multiballs.test(); - final multiballCubit = MockMultiballCubit(); - final otherMultiballCubit = MockMultiballCubit(); + final multiballCubit = _MockMultiballCubit(); + final otherMultiballCubit = _MockMultiballCubit(); final multiballs = [ Multiball.test( bloc: multiballCubit, diff --git a/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart b/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart index c4f2bd33..40a952f1 100644 --- a/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart +++ b/test/game/components/multipliers/behaviors/multipliers_behavior_test.dart @@ -3,6 +3,7 @@ import 'dart:async'; 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'; @@ -12,6 +13,12 @@ import 'package:pinball_components/pinball_components.dart'; import '../../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockComponent extends Mock implements Component {} + +class _MockMultiplierCubit extends Mock implements MultiplierCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -31,8 +38,8 @@ void main() { late GameBloc gameBloc; setUp(() { - registerFallbackValue(MockComponent()); - gameBloc = MockGameBloc(); + registerFallbackValue(_MockComponent()); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -84,8 +91,8 @@ void main() { setUp: (game, tester) async { final behavior = MultipliersBehavior(); final parent = Multipliers.test(); - final multiplierX2Cubit = MockMultiplierCubit(); - final multiplierX3Cubit = MockMultiplierCubit(); + final multiplierX2Cubit = _MockMultiplierCubit(); + final multiplierX3Cubit = _MockMultiplierCubit(); final multipliers = [ Multiplier.test( value: MultiplierValue.x2, diff --git a/test/game/components/scoring_behavior_test.dart b/test/game/components/scoring_behavior_test.dart index 2afa862d..485183aa 100644 --- a/test/game/components/scoring_behavior_test.dart +++ b/test/game/components/scoring_behavior_test.dart @@ -17,6 +17,16 @@ class _TestBodyComponent extends BodyComponent { Body createBody() => world.createBody(BodyDef()); } +class _MockPinballAudio extends Mock implements PinballAudio {} + +class _MockBall extends Mock implements Ball {} + +class _MockBody extends Mock implements Body {} + +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -34,10 +44,9 @@ void main() { late BodyComponent parent; setUp(() { - audio = MockPinballAudio(); - - ball = MockBall(); - final ballBody = MockBody(); + audio = _MockPinballAudio(); + ball = _MockBall(); + final ballBody = _MockBody(); when(() => ball.body).thenReturn(ballBody); when(() => ballBody.position).thenReturn(Vector2.all(4)); @@ -49,7 +58,7 @@ void main() { audio: audio, ), blocBuilder: () { - bloc = MockGameBloc(); + bloc = _MockGameBloc(); const state = GameState( score: 0, multiplier: 1, @@ -71,7 +80,7 @@ void main() { final canvas = ZCanvasComponent(children: [parent]); await game.ensureAdd(canvas); - scoringBehavior.beginContact(ball, MockContact()); + scoringBehavior.beginContact(ball, _MockContact()); verify( () => bloc.add( @@ -89,7 +98,7 @@ void main() { final canvas = ZCanvasComponent(children: [parent]); await game.ensureAdd(canvas); - scoringBehavior.beginContact(ball, MockContact()); + scoringBehavior.beginContact(ball, _MockContact()); verify(audio.score).called(1); }, @@ -104,7 +113,7 @@ void main() { final canvas = ZCanvasComponent(children: [parent]); await game.ensureAdd(canvas); - scoringBehavior.beginContact(ball, MockContact()); + scoringBehavior.beginContact(ball, _MockContact()); await game.ready(); final scoreText = game.descendants().whereType(); diff --git a/test/game/components/sparky_scorch_test.dart b/test/game/components/sparky_scorch_test.dart index d331e340..7d9c8c77 100644 --- a/test/game/components/sparky_scorch_test.dart +++ b/test/game/components/sparky_scorch_test.dart @@ -1,5 +1,6 @@ // ignore_for_file: cascade_invocations +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -8,6 +9,12 @@ import 'package:pinball_components/pinball_components.dart'; import '../../helpers/helpers.dart'; +class _MockControlledBall extends Mock implements ControlledBall {} + +class _MockBallController extends Mock implements BallController {} + +class _MockContact extends Mock implements Contact {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -73,8 +80,8 @@ void main() { group('SparkyComputerSensor', () { flameTester.test('calls turboCharge', (game) async { final sensor = SparkyComputerSensor(); - final ball = MockControlledBall(); - final controller = MockBallController(); + final ball = _MockControlledBall(); + final controller = _MockBallController(); when(() => ball.controller).thenReturn(controller); when(controller.turboCharge).thenAnswer((_) async {}); @@ -83,7 +90,7 @@ void main() { SparkyAnimatronic(), ]); - sensor.beginContact(ball, MockContact()); + sensor.beginContact(ball, _MockContact()); verify(() => ball.controller.turboCharge()).called(1); }); @@ -91,8 +98,8 @@ void main() { flameTester.test('plays SparkyAnimatronic', (game) async { final sensor = SparkyComputerSensor(); final sparkyAnimatronic = SparkyAnimatronic(); - final ball = MockControlledBall(); - final controller = MockBallController(); + final ball = _MockControlledBall(); + final controller = _MockBallController(); when(() => ball.controller).thenReturn(controller); when(controller.turboCharge).thenAnswer((_) async {}); await game.ensureAddAll([ @@ -101,7 +108,7 @@ void main() { ]); expect(sparkyAnimatronic.playing, isFalse); - sensor.beginContact(ball, MockContact()); + sensor.beginContact(ball, _MockContact()); expect(sparkyAnimatronic.playing, isTrue); }); }); diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index 732c2d82..884037f4 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -1,8 +1,7 @@ // ignore_for_file: cascade_invocations import 'package:bloc_test/bloc_test.dart'; -import 'package:flame/components.dart'; -import 'package:flame/game.dart'; +import 'package:flame/input.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -12,6 +11,20 @@ import 'package:pinball_components/pinball_components.dart'; import '../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockGameState extends Mock implements GameState {} + +class _MockEventPosition extends Mock implements EventPosition {} + +class _MockTapDownDetails extends Mock implements TapDownDetails {} + +class _MockTapDownInfo extends Mock implements TapDownInfo {} + +class _MockTapUpDetails extends Mock implements TapUpDetails {} + +class _MockTapUpInfo extends Mock implements TapUpInfo {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); final assets = [ @@ -35,6 +48,7 @@ void main() { Assets.images.dino.animatronic.mouth.keyName, Assets.images.dino.animatronic.head.keyName, Assets.images.dino.topWall.keyName, + Assets.images.dino.topWallTunnel.keyName, Assets.images.dino.bottomWall.keyName, Assets.images.dash.animatronic.keyName, Assets.images.dash.bumper.a.active.keyName, @@ -115,7 +129,7 @@ void main() { late GameBloc gameBloc; setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, const Stream.empty(), @@ -210,7 +224,7 @@ void main() { setUp: (game, tester) async { // TODO(ruimiguel): check why testGameWidget doesn't add any ball // to the game. Test needs to have no balls, so fortunately works. - final newState = MockGameState(); + final newState = _MockGameState(); when(() => newState.isGameOver).thenReturn(false); game.descendants().whereType().forEach( (ball) => ball.controller.lost(), @@ -218,7 +232,7 @@ void main() { await game.ready(); expect( - game.controller.listenWhen(MockGameState(), newState), + game.controller.listenWhen(_MockGameState(), newState), isTrue, ); }, @@ -227,7 +241,7 @@ void main() { flameTester.test( "doesn't listen when some balls are left", (game) async { - final newState = MockGameState(); + final newState = _MockGameState(); when(() => newState.isGameOver).thenReturn(false); expect( @@ -235,7 +249,7 @@ void main() { greaterThan(0), ); expect( - game.controller.listenWhen(MockGameState(), newState), + game.controller.listenWhen(_MockGameState(), newState), isFalse, ); }, @@ -246,7 +260,7 @@ void main() { setUp: (game, tester) async { // TODO(ruimiguel): check why testGameWidget doesn't add any ball // to the game. Test needs to have no balls, so fortunately works. - final newState = MockGameState(); + final newState = _MockGameState(); when(() => newState.isGameOver).thenReturn(true); game.descendants().whereType().forEach( (ball) => ball.controller.lost(), @@ -258,7 +272,7 @@ void main() { isTrue, ); expect( - game.controller.listenWhen(MockGameState(), newState), + game.controller.listenWhen(_MockGameState(), newState), isFalse, ); }, @@ -274,7 +288,7 @@ void main() { final previousBalls = game.descendants().whereType().toList(); - game.controller.onNewState(MockGameState()); + game.controller.onNewState(_MockGameState()); await game.ready(); final currentBalls = game.descendants().whereType().toList(); @@ -294,14 +308,14 @@ void main() { flameTester.test('tap down moves left flipper up', (game) async { await game.ready(); - final eventPosition = MockEventPosition(); + final eventPosition = _MockEventPosition(); when(() => eventPosition.game).thenReturn(Vector2.zero()); when(() => eventPosition.widget).thenReturn(Vector2.zero()); - final raw = MockTapDownDetails(); + final raw = _MockTapDownDetails(); when(() => raw.kind).thenReturn(PointerDeviceKind.touch); - final tapDownEvent = MockTapDownInfo(); + final tapDownEvent = _MockTapDownInfo(); when(() => tapDownEvent.eventPosition).thenReturn(eventPosition); when(() => tapDownEvent.raw).thenReturn(raw); @@ -317,14 +331,14 @@ void main() { flameTester.test('tap down moves right flipper up', (game) async { await game.ready(); - final eventPosition = MockEventPosition(); + final eventPosition = _MockEventPosition(); when(() => eventPosition.game).thenReturn(Vector2.zero()); when(() => eventPosition.widget).thenReturn(game.canvasSize); - final raw = MockTapDownDetails(); + final raw = _MockTapDownDetails(); when(() => raw.kind).thenReturn(PointerDeviceKind.touch); - final tapDownEvent = MockTapDownInfo(); + final tapDownEvent = _MockTapDownInfo(); when(() => tapDownEvent.eventPosition).thenReturn(eventPosition); when(() => tapDownEvent.raw).thenReturn(raw); @@ -340,14 +354,14 @@ void main() { flameTester.test('tap up moves flipper down', (game) async { await game.ready(); - final eventPosition = MockEventPosition(); + final eventPosition = _MockEventPosition(); when(() => eventPosition.game).thenReturn(Vector2.zero()); when(() => eventPosition.widget).thenReturn(Vector2.zero()); - final raw = MockTapDownDetails(); + final raw = _MockTapDownDetails(); when(() => raw.kind).thenReturn(PointerDeviceKind.touch); - final tapDownEvent = MockTapDownInfo(); + final tapDownEvent = _MockTapDownInfo(); when(() => tapDownEvent.eventPosition).thenReturn(eventPosition); when(() => tapDownEvent.raw).thenReturn(raw); @@ -359,7 +373,7 @@ void main() { expect(flippers.first.body.linearVelocity.y, isNegative); - final tapUpEvent = MockTapUpInfo(); + final tapUpEvent = _MockTapUpInfo(); when(() => tapUpEvent.eventPosition).thenReturn(eventPosition); game.onTapUp(tapUpEvent); @@ -371,14 +385,14 @@ void main() { flameTester.test('tap cancel moves flipper down', (game) async { await game.ready(); - final eventPosition = MockEventPosition(); + final eventPosition = _MockEventPosition(); when(() => eventPosition.game).thenReturn(Vector2.zero()); when(() => eventPosition.widget).thenReturn(Vector2.zero()); - final raw = MockTapDownDetails(); + final raw = _MockTapDownDetails(); when(() => raw.kind).thenReturn(PointerDeviceKind.touch); - final tapDownEvent = MockTapDownInfo(); + final tapDownEvent = _MockTapDownInfo(); when(() => tapDownEvent.eventPosition).thenReturn(eventPosition); when(() => tapDownEvent.raw).thenReturn(raw); @@ -400,13 +414,13 @@ void main() { flameTester.test('tap down moves plunger down', (game) async { await game.ready(); - final eventPosition = MockEventPosition(); + final eventPosition = _MockEventPosition(); when(() => eventPosition.game).thenReturn(Vector2(40, 60)); - final raw = MockTapDownDetails(); + final raw = _MockTapDownDetails(); when(() => raw.kind).thenReturn(PointerDeviceKind.touch); - final tapDownEvent = MockTapDownInfo(); + final tapDownEvent = _MockTapDownInfo(); when(() => tapDownEvent.eventPosition).thenReturn(eventPosition); when(() => tapDownEvent.raw).thenReturn(raw); @@ -425,13 +439,13 @@ void main() { debugModeFlameTester.test( 'adds a ball on tap up', (game) async { - final eventPosition = MockEventPosition(); + final eventPosition = _MockEventPosition(); when(() => eventPosition.game).thenReturn(Vector2.all(10)); - final raw = MockTapUpDetails(); + final raw = _MockTapUpDetails(); when(() => raw.kind).thenReturn(PointerDeviceKind.mouse); - final tapUpEvent = MockTapUpInfo(); + final tapUpEvent = _MockTapUpInfo(); when(() => tapUpEvent.eventPosition).thenReturn(eventPosition); when(() => tapUpEvent.raw).thenReturn(raw); diff --git a/test/game/view/pinball_game_page_test.dart b/test/game/view/pinball_game_page_test.dart index f8b62d05..d3b32d85 100644 --- a/test/game/view/pinball_game_page_test.dart +++ b/test/game/view/pinball_game_page_test.dart @@ -4,12 +4,21 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flame/game.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; import '../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockCharacterThemeCubit extends Mock implements CharacterThemeCubit {} + +class _MockAssetsManagerCubit extends Mock implements AssetsManagerCubit {} + +class _MockStartGameBloc extends Mock implements StartGameBloc {} + void main() { final game = PinballTestGame(); @@ -19,8 +28,8 @@ void main() { setUp(() async { await Future.wait(game.preLoadAssets()); - characterThemeCubit = MockCharacterThemeCubit(); - gameBloc = MockGameBloc(); + characterThemeCubit = _MockCharacterThemeCubit(); + gameBloc = _MockGameBloc(); whenListen( characterThemeCubit, @@ -47,7 +56,7 @@ void main() { testWidgets( 'renders the loading indicator while the assets load', (tester) async { - final assetsManagerCubit = MockAssetsManagerCubit(); + final assetsManagerCubit = _MockAssetsManagerCubit(); final initialAssetsState = AssetsManagerState( loadables: [Future.value()], loaded: const [], @@ -79,8 +88,8 @@ void main() { testWidgets( 'renders PinballGameLoadedView after resources have been loaded', (tester) async { - final assetsManagerCubit = MockAssetsManagerCubit(); - final startGameBloc = MockStartGameBloc(); + final assetsManagerCubit = _MockAssetsManagerCubit(); + final startGameBloc = _MockStartGameBloc(); final loadedAssetsState = AssetsManagerState( loadables: [Future.value()], @@ -168,8 +177,8 @@ void main() { }); group('PinballGameView', () { - final gameBloc = MockGameBloc(); - final startGameBloc = MockStartGameBloc(); + final gameBloc = _MockGameBloc(); + final startGameBloc = _MockStartGameBloc(); setUp(() async { await Future.wait(game.preLoadAssets()); diff --git a/test/game/view/widgets/bonus_animation_test.dart b/test/game/view/widgets/bonus_animation_test.dart index b726ac83..2284ca8d 100644 --- a/test/game/view/widgets/bonus_animation_test.dart +++ b/test/game/view/widgets/bonus_animation_test.dart @@ -1,7 +1,6 @@ // ignore_for_file: invalid_use_of_protected_member import 'dart:typed_data'; -import 'dart:ui' as ui; import 'package:flame/assets.dart'; import 'package:flame/flame.dart'; @@ -14,11 +13,9 @@ import 'package:pinball_flame/pinball_flame.dart'; import '../../../helpers/helpers.dart'; -class MockImages extends Mock implements Images {} +class _MockImages extends Mock implements Images {} -class MockImage extends Mock implements ui.Image {} - -class MockCallback extends Mock { +class _MockCallback extends Mock { void call(); } @@ -30,7 +27,7 @@ void main() { // TODO(arturplaczek): need to find for a better solution for loading image // or use original images from BonusAnimation.loadAssets() final image = await decodeImageFromList(Uint8List.fromList(fakeImage)); - final images = MockImages(); + final images = _MockImages(); when(() => images.fromCache(any())).thenReturn(image); when(() => images.load(any())).thenAnswer((_) => Future.value(image)); Flame.images = images; @@ -88,7 +85,7 @@ void main() { // https://github.com/flame-engine/flame/issues/1543 testWidgets('called onCompleted callback at the end of animation ', (tester) async { - final callback = MockCallback(); + final callback = _MockCallback(); await tester.runAsync(() async { await tester.pumpWidget( @@ -112,7 +109,7 @@ void main() { }); testWidgets('called onCompleted once when animation changed', (tester) async { - final callback = MockCallback(); + final callback = _MockCallback(); final secondAnimation = BonusAnimation.sparkyTurboCharge( onCompleted: callback.call, ); diff --git a/test/game/view/widgets/game_hud_test.dart b/test/game/view/widgets/game_hud_test.dart index 505ce5e0..f8be70c2 100644 --- a/test/game/view/widgets/game_hud_test.dart +++ b/test/game/view/widgets/game_hud_test.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'dart:typed_data'; -import 'dart:ui' as ui; import 'package:bloc_test/bloc_test.dart'; import 'package:flame/assets.dart'; @@ -19,9 +18,9 @@ import 'package:pinball_ui/pinball_ui.dart'; import '../../../helpers/helpers.dart'; -class MockImages extends Mock implements Images {} +class _MockImages extends Mock implements Images {} -class MockImage extends Mock implements ui.Image {} +class _MockGameBloc extends Mock implements GameBloc {} void main() { group('GameHud', () { @@ -35,12 +34,12 @@ void main() { ); setUp(() async { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); // TODO(arturplaczek): need to find for a better solution for loading // image or use original images from BonusAnimation.loadAssets() final image = await decodeImageFromList(Uint8List.fromList(fakeImage)); - final images = MockImages(); + final images = _MockImages(); when(() => images.fromCache(any())).thenReturn(image); when(() => images.load(any())).thenAnswer((_) => Future.value(image)); Flame.images = images; diff --git a/test/game/view/widgets/play_button_overlay_test.dart b/test/game/view/widgets/play_button_overlay_test.dart index ee9778bc..1d7070e0 100644 --- a/test/game/view/widgets/play_button_overlay_test.dart +++ b/test/game/view/widgets/play_button_overlay_test.dart @@ -8,6 +8,12 @@ import 'package:pinball_theme/pinball_theme.dart'; import '../../../helpers/helpers.dart'; +class _MockPinballGame extends Mock implements PinballGame {} + +class _MockGameFlowController extends Mock implements GameFlowController {} + +class _MockCharacterThemeCubit extends Mock implements CharacterThemeCubit {} + void main() { group('PlayButtonOverlay', () { late PinballGame game; @@ -20,9 +26,9 @@ void main() { await Flame.images.load(const AndroidTheme().animation.keyName); await Flame.images.load(const DinoTheme().animation.keyName); await Flame.images.load(const SparkyTheme().animation.keyName); - game = MockPinballGame(); - gameFlowController = MockGameFlowController(); - characterThemeCubit = MockCharacterThemeCubit(); + game = _MockPinballGame(); + gameFlowController = _MockGameFlowController(); + characterThemeCubit = _MockCharacterThemeCubit(); whenListen( characterThemeCubit, const Stream.empty(), diff --git a/test/game/view/widgets/round_count_display_test.dart b/test/game/view/widgets/round_count_display_test.dart index 335a1c32..e3a4b887 100644 --- a/test/game/view/widgets/round_count_display_test.dart +++ b/test/game/view/widgets/round_count_display_test.dart @@ -1,11 +1,14 @@ import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_ui/pinball_ui.dart'; import '../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { group('RoundCountDisplay renders', () { late GameBloc gameBloc; @@ -17,7 +20,7 @@ void main() { ); setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); whenListen( gameBloc, diff --git a/test/game/view/widgets/score_view_test.dart b/test/game/view/widgets/score_view_test.dart index 63f7d1c5..695dc6e1 100644 --- a/test/game/view/widgets/score_view_test.dart +++ b/test/game/view/widgets/score_view_test.dart @@ -3,12 +3,15 @@ import 'dart:async'; import 'package:bloc_test/bloc_test.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/l10n/l10n.dart'; import 'package:pinball_components/pinball_components.dart'; import '../../../helpers/helpers.dart'; +class _MockGameBloc extends Mock implements GameBloc {} + void main() { late GameBloc gameBloc; late StreamController stateController; @@ -21,7 +24,7 @@ void main() { ); setUp(() { - gameBloc = MockGameBloc(); + gameBloc = _MockGameBloc(); stateController = StreamController()..add(initialState); whenListen( diff --git a/test/helpers/helpers.dart b/test/helpers/helpers.dart index fb27f72a..50bb9bc1 100644 --- a/test/helpers/helpers.dart +++ b/test/helpers/helpers.dart @@ -8,7 +8,6 @@ export 'builders.dart'; export 'fakes.dart'; export 'forge2d.dart'; export 'key_testers.dart'; -export 'mocks.dart'; export 'pump_app.dart'; export 'test_games.dart'; export 'text_span.dart'; diff --git a/test/helpers/key_testers.dart b/test/helpers/key_testers.dart index 04fed1da..ff870d6c 100644 --- a/test/helpers/key_testers.dart +++ b/test/helpers/key_testers.dart @@ -1,8 +1,21 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:meta/meta.dart'; import 'package:mocktail/mocktail.dart'; -import 'helpers.dart'; +class _MockRawKeyDownEvent extends Mock implements RawKeyDownEvent { + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return super.toString(); + } +} + +class _MockRawKeyUpEvent extends Mock implements RawKeyUpEvent { + @override + String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { + return super.toString(); + } +} @isTest void testRawKeyUpEvents( @@ -15,7 +28,7 @@ void testRawKeyUpEvents( } RawKeyUpEvent _mockKeyUpEvent(LogicalKeyboardKey key) { - final event = MockRawKeyUpEvent(); + final event = _MockRawKeyUpEvent(); when(() => event.logicalKey).thenReturn(key); return event; } @@ -31,7 +44,7 @@ void testRawKeyDownEvents( } RawKeyDownEvent _mockKeyDownEvent(LogicalKeyboardKey key) { - final event = MockRawKeyDownEvent(); + final event = _MockRawKeyDownEvent(); when(() => event.logicalKey).thenReturn(key); return event; } diff --git a/test/helpers/mocks.dart b/test/helpers/mocks.dart deleted file mode 100644 index 7a5862e7..00000000 --- a/test/helpers/mocks.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:authentication_repository/authentication_repository.dart'; -import 'package:flame/components.dart'; -import 'package:flame/game.dart'; -import 'package:flame/input.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:leaderboard_repository/leaderboard_repository.dart'; -import 'package:mocktail/mocktail.dart'; -import 'package:pinball/game/game.dart'; -import 'package:pinball/select_character/select_character.dart'; -import 'package:pinball/start_game/start_game.dart'; -import 'package:pinball_audio/pinball_audio.dart'; -import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_ui/pinball_ui.dart'; -import 'package:plugin_platform_interface/plugin_platform_interface.dart'; - -class MockPinballGame extends Mock implements PinballGame {} - -class MockDrain extends Mock implements Drain {} - -class MockBody extends Mock implements Body {} - -class MockBall extends Mock implements Ball {} - -class MockControlledBall extends Mock implements ControlledBall {} - -class MockBallController extends Mock implements BallController {} - -class MockContact extends Mock implements Contact {} - -class MockGameBloc extends Mock implements GameBloc {} - -class MockStartGameBloc extends Mock implements StartGameBloc {} - -class MockGameState extends Mock implements GameState {} - -class MockCharacterThemeCubit extends Mock implements CharacterThemeCubit {} - -class MockAuthenticationRepository extends Mock - implements AuthenticationRepository {} - -class MockLeaderboardRepository extends Mock implements LeaderboardRepository {} - -class MockRawKeyDownEvent extends Mock implements RawKeyDownEvent { - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return super.toString(); - } -} - -class MockRawKeyUpEvent extends Mock implements RawKeyUpEvent { - @override - String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { - return super.toString(); - } -} - -class MockTapDownInfo extends Mock implements TapDownInfo {} - -class MockTapDownDetails extends Mock implements TapDownDetails {} - -class MockTapUpInfo extends Mock implements TapUpInfo {} - -class MockTapUpDetails extends Mock implements TapUpDetails {} - -class MockEventPosition extends Mock implements EventPosition {} - -class MockFilter extends Mock implements Filter {} - -class MockFixture extends Mock implements Fixture {} - -class MockComponent extends Mock implements Component {} - -class MockComponentSet extends Mock implements ComponentSet {} - -class MockDashNestBumper extends Mock implements DashNestBumper {} - -class MockPinballAudio extends Mock implements PinballAudio {} - -class MockSparkyComputerSensor extends Mock implements SparkyComputerSensor {} - -class MockAssetsManagerCubit extends Mock implements AssetsManagerCubit {} - -class MockBackboard extends Mock implements Backboard {} - -class MockCameraController extends Mock implements CameraController {} - -class MockActiveOverlaysNotifier extends Mock - implements ActiveOverlaysNotifier {} - -class MockGameFlowController extends Mock implements GameFlowController {} - -class MockAndroidBumper extends Mock implements AndroidBumper {} - -class MockSparkyBumper extends Mock implements SparkyBumper {} - -class MockMultiballCubit extends Mock implements MultiballCubit {} - -class MockMultiplierCubit extends Mock implements MultiplierCubit {} - -class MockUrlLauncher extends Mock - with MockPlatformInterfaceMixin - implements UrlLauncherPlatform {} diff --git a/test/helpers/pump_app.dart b/test/helpers/pump_app.dart index 672f9b5e..7347989d 100644 --- a/test/helpers/pump_app.dart +++ b/test/helpers/pump_app.dart @@ -19,26 +19,31 @@ import 'package:pinball/start_game/start_game.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_ui/pinball_ui.dart'; -import 'helpers.dart'; +class _MockAssetsManagerCubit extends Mock implements AssetsManagerCubit {} -PinballAudio _buildDefaultPinballAudio() { - final audio = MockPinballAudio(); +class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { +} - when(audio.load).thenAnswer((_) => Future.value()); +class _MockCharacterThemeCubit extends Mock implements CharacterThemeCubit {} + +class _MockGameBloc extends Mock implements GameBloc {} + +class _MockStartGameBloc extends Mock implements StartGameBloc {} +class _MockPinballAudio extends Mock implements PinballAudio {} + +PinballAudio _buildDefaultPinballAudio() { + final audio = _MockPinballAudio(); + when(audio.load).thenAnswer((_) => Future.value()); return audio; } -MockAssetsManagerCubit _buildDefaultAssetsManagerCubit() { - final cubit = MockAssetsManagerCubit(); - +AssetsManagerCubit _buildDefaultAssetsManagerCubit() { + final cubit = _MockAssetsManagerCubit(); final state = AssetsManagerState( loadables: [Future.value()], - loaded: [ - Future.value(), - ], + loaded: [Future.value()], ); - whenListen( cubit, Stream.value(state), @@ -63,7 +68,7 @@ extension PumpApp on WidgetTester { MultiRepositoryProvider( providers: [ RepositoryProvider.value( - value: leaderboardRepository ?? MockLeaderboardRepository(), + value: leaderboardRepository ?? _MockLeaderboardRepository(), ), RepositoryProvider.value( value: pinballAudio ?? _buildDefaultPinballAudio(), @@ -72,13 +77,13 @@ extension PumpApp on WidgetTester { child: MultiBlocProvider( providers: [ BlocProvider.value( - value: characterThemeCubit ?? MockCharacterThemeCubit(), + value: characterThemeCubit ?? _MockCharacterThemeCubit(), ), BlocProvider.value( - value: gameBloc ?? MockGameBloc(), + value: gameBloc ?? _MockGameBloc(), ), BlocProvider.value( - value: startGameBloc ?? MockStartGameBloc(), + value: startGameBloc ?? _MockStartGameBloc(), ), BlocProvider.value( value: assetsManagerCubit ?? _buildDefaultAssetsManagerCubit(), diff --git a/test/helpers/test_games.dart b/test/helpers/test_games.dart index baa466b8..5e67532a 100644 --- a/test/helpers/test_games.dart +++ b/test/helpers/test_games.dart @@ -4,11 +4,12 @@ import 'dart:async'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_theme/pinball_theme.dart'; -import 'helpers.dart'; +class _MockPinballAudio extends Mock implements PinballAudio {} class TestGame extends Forge2DGame with FlameBloc { TestGame() { @@ -23,7 +24,7 @@ class PinballTestGame extends PinballGame { CharacterTheme? theme, }) : _assets = assets, super( - audio: audio ?? MockPinballAudio(), + audio: audio ?? _MockPinballAudio(), characterTheme: theme ?? const DashTheme(), ); final List? _assets; @@ -44,7 +45,7 @@ class DebugPinballTestGame extends DebugPinballGame { CharacterTheme? theme, }) : _assets = assets, super( - audio: audio ?? MockPinballAudio(), + audio: audio ?? _MockPinballAudio(), characterTheme: theme ?? const DashTheme(), ); diff --git a/test/how_to_play/how_to_play_dialog_test.dart b/test/how_to_play/how_to_play_dialog_test.dart index 2e3d3fd4..2570c846 100644 --- a/test/how_to_play/how_to_play_dialog_test.dart +++ b/test/how_to_play/how_to_play_dialog_test.dart @@ -7,7 +7,7 @@ import 'package:platform_helper/platform_helper.dart'; import '../helpers/helpers.dart'; -class MockPlatformHelper extends Mock implements PlatformHelper {} +class _MockPlatformHelper extends Mock implements PlatformHelper {} void main() { group('HowToPlayDialog', () { @@ -16,7 +16,7 @@ void main() { setUp(() async { l10n = await AppLocalizations.delegate.load(const Locale('en')); - platformHelper = MockPlatformHelper(); + platformHelper = _MockPlatformHelper(); }); testWidgets( diff --git a/test/select_character/view/character_selection_page_test.dart b/test/select_character/view/character_selection_page_test.dart index c5cfb494..28033030 100644 --- a/test/select_character/view/character_selection_page_test.dart +++ b/test/select_character/view/character_selection_page_test.dart @@ -10,6 +10,8 @@ import 'package:pinball_ui/pinball_ui.dart'; import '../../helpers/helpers.dart'; +class _MockCharacterThemeCubit extends Mock implements CharacterThemeCubit {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); late CharacterThemeCubit characterThemeCubit; @@ -20,7 +22,7 @@ void main() { await Flame.images.load(const AndroidTheme().animation.keyName); await Flame.images.load(const DinoTheme().animation.keyName); await Flame.images.load(const SparkyTheme().animation.keyName); - characterThemeCubit = MockCharacterThemeCubit(); + characterThemeCubit = _MockCharacterThemeCubit(); whenListen( characterThemeCubit, const Stream.empty(), diff --git a/test/start_game/bloc/start_game_bloc_test.dart b/test/start_game/bloc/start_game_bloc_test.dart index ec1b3ced..6663ff4e 100644 --- a/test/start_game/bloc/start_game_bloc_test.dart +++ b/test/start_game/bloc/start_game_bloc_test.dart @@ -4,18 +4,20 @@ import 'package:mocktail/mocktail.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/start_game/bloc/start_game_bloc.dart'; -import '../../helpers/helpers.dart'; +class _MockPinballGame extends Mock implements PinballGame {} + +class _MockGameFlowController extends Mock implements GameFlowController {} void main() { late PinballGame pinballGame; setUp(() { - pinballGame = MockPinballGame(); + pinballGame = _MockPinballGame(); when( () => pinballGame.gameFlowController, ).thenReturn( - MockGameFlowController(), + _MockGameFlowController(), ); });