From c4971a6c6fff8d7c73493fa689163e66ffdaee20 Mon Sep 17 00:00:00 2001 From: RuiAlonso Date: Thu, 7 Apr 2022 14:28:35 +0200 Subject: [PATCH] test: tests for alien zone --- test/game/components/alien_zone_test.dart | 117 ++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 test/game/components/alien_zone_test.dart diff --git a/test/game/components/alien_zone_test.dart b/test/game/components/alien_zone_test.dart new file mode 100644 index 00000000..6bea22ed --- /dev/null +++ b/test/game/components/alien_zone_test.dart @@ -0,0 +1,117 @@ +// ignore_for_file: cascade_invocations + +import 'package:bloc_test/bloc_test.dart'; +import 'package:flame_test/flame_test.dart'; +import 'package:flutter/rendering.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'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + final flameTester = FlameTester(EmptyPinballGameTest.new); + + group('AlienZone', () { + flameTester.test( + 'loads correctly', + (game) async { + await game.ready(); + final alienZone = AlienZone(); + await game.ensureAdd(alienZone); + + expect(game.contains(alienZone), isTrue); + }, + ); + + group('loads', () { + flameTester.test( + 'two AlienBumper', + (game) async { + await game.ready(); + final alienZone = AlienZone(); + await game.ensureAdd(alienZone); + + expect( + alienZone.descendants().whereType().length, + equals(2), + ); + }, + ); + }); + + group('bumpers', () { + late Ball ball; + late GameBloc gameBloc; + + setUp(() { + ball = Ball(baseColor: const Color(0xFF00FFFF)); + gameBloc = MockGameBloc(); + whenListen( + gameBloc, + const Stream.empty(), + initialState: const GameState.initial(), + ); + }); + + final flameBlocTester = FlameBlocTester( + gameBuilder: EmptyPinballGameTest.new, + blocBuilder: () => gameBloc, + ); + + flameTester.testGameWidget( + 'activate when deactivated bumper is hit', + setUp: (game, tester) async { + final alienZone = AlienZone(); + await game.ensureAdd(ball); + + final bumpers = alienZone.descendants().whereType(); + + for (final bumper in bumpers) { + beginContact(game, bumper, ball); + final controller = bumper.firstChild()!; + expect(controller.isActivated, isTrue); + } + }, + ); + + flameTester.testGameWidget( + 'deactivate when activated bumper is hit', + setUp: (game, tester) async { + final alienZone = AlienZone(); + await game.ensureAdd(ball); + + final bumpers = alienZone.descendants().whereType(); + + for (final bumper in bumpers) { + final controller = bumper.firstChild()!; + expect(controller.isActivated, isFalse); + } + }, + ); + + flameBlocTester.testGameWidget( + 'add Scored event', + setUp: (game, tester) async { + final alienZone = AlienZone(); + await game.ensureAdd(alienZone); + await game.ensureAdd(ball); + game.addContactCallback(BallScorePointsCallback(game)); + + final bumpers = alienZone.descendants().whereType(); + + for (final bumper in bumpers) { + beginContact(game, bumper, ball); + verify( + () => gameBloc.add( + Scored(points: bumper.points), + ), + ).called(1); + } + }, + ); + }); + }); +}