// 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:pinball/game/game.dart'; import '../../helpers/helpers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); final flameTester = FlameTester(EmptyPinballTestGame.new); group('Wall', () { flameTester.test( 'loads correctly', (game) async { await game.ready(); final wall = Wall( start: Vector2.zero(), end: Vector2(100, 0), ); await game.ensureAdd(wall); expect(game.contains(wall), isTrue); }, ); group('body', () { flameTester.test( 'positions correctly', (game) async { final wall = Wall( start: Vector2.zero(), end: Vector2(100, 0), ); await game.ensureAdd(wall); game.contains(wall); expect(wall.body.position, Vector2.zero()); }, ); flameTester.test( 'is static', (game) async { final wall = Wall( start: Vector2.zero(), end: Vector2(100, 0), ); await game.ensureAdd(wall); expect(wall.body.bodyType, equals(BodyType.static)); }, ); }); group('fixture', () { flameTester.test( 'exists', (game) async { final wall = Wall( start: Vector2.zero(), end: Vector2(100, 0), ); await game.ensureAdd(wall); expect(wall.body.fixtures[0], isA()); }, ); flameTester.test( 'has restitution', (game) async { final wall = Wall( start: Vector2.zero(), end: Vector2(100, 0), ); await game.ensureAdd(wall); final fixture = wall.body.fixtures[0]; expect(fixture.restitution, greaterThan(0)); }, ); flameTester.test( 'has no friction', (game) async { final wall = Wall( start: Vector2.zero(), end: Vector2(100, 0), ); await game.ensureAdd(wall); final fixture = wall.body.fixtures[0]; expect(fixture.friction, equals(0)); }, ); }); }); group( 'BottomWall', () { group('removes ball on contact', () { late GameBloc gameBloc; setUp(() { gameBloc = GameBloc(); }); final flameBlocTester = FlameBlocTester( gameBuilder: EmptyPinballTestGame.new, blocBuilder: () => gameBloc, ); flameBlocTester.testGameWidget( 'when ball is launch', setUp: (game, tester) async { final ball = ControlledBall.launch( characterTheme: game.characterTheme, ); final wall = BottomWall(); await game.ensureAddAll([ball, wall]); beginContact(game, ball, wall); await game.ready(); expect(game.contains(ball), isFalse); }, ); flameBlocTester.testGameWidget( 'when ball is bonus', setUp: (game, tester) async { final ball = ControlledBall.bonus( characterTheme: game.characterTheme, ); final wall = BottomWall(); await game.ensureAddAll([ball, wall]); beginContact(game, ball, wall); await game.ready(); expect(game.contains(ball), isFalse); }, ); flameBlocTester.testGameWidget( 'when ball is debug', setUp: (game, tester) async { final ball = ControlledBall.debug(); final wall = BottomWall(); await game.ensureAddAll([ball, wall]); beginContact(game, ball, wall); await game.ready(); expect(game.contains(ball), isFalse); }, ); }); }, ); }