mirror of https://github.com/flutter/pinball.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.9 KiB
127 lines
3.9 KiB
// ignore_for_file: cascade_invocations
|
|
|
|
import 'package:flame_test/flame_test.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:pinball/game/behaviors/camera_focusing_behavior.dart';
|
|
import 'package:pinball/game/game.dart';
|
|
import 'package:pinball_components/pinball_components.dart';
|
|
|
|
import '../../helpers/helpers.dart';
|
|
|
|
void main() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
group(
|
|
'CameraFocusingBehavior',
|
|
() {
|
|
final flameTester = FlameTester(
|
|
EmptyPinballTestGame.new,
|
|
);
|
|
|
|
test('can be instantiated', () {
|
|
expect(
|
|
CameraFocusingBehavior(),
|
|
isA<CameraFocusingBehavior>(),
|
|
);
|
|
});
|
|
|
|
flameTester.test('loads', (game) async {
|
|
final behavior = CameraFocusingBehavior();
|
|
await game.ensureAdd(behavior);
|
|
expect(game.contains(behavior), isTrue);
|
|
});
|
|
|
|
flameTester.test(
|
|
'changes focus when loaded',
|
|
(game) async {
|
|
final behavior = CameraFocusingBehavior();
|
|
final previousZoom = game.camera.zoom;
|
|
expect(game.camera.follow, isNull);
|
|
|
|
await game.ensureAdd(behavior);
|
|
|
|
expect(game.camera.follow, isNotNull);
|
|
expect(game.camera.zoom, isNot(equals(previousZoom)));
|
|
},
|
|
);
|
|
|
|
flameTester.test(
|
|
'listenWhen only listens when status changes',
|
|
(game) async {
|
|
final behavior = CameraFocusingBehavior();
|
|
const waiting = GameState.initial();
|
|
final playing =
|
|
const GameState.initial().copyWith(status: GameStatus.playing);
|
|
final gameOver =
|
|
const GameState.initial().copyWith(status: GameStatus.gameOver);
|
|
|
|
expect(behavior.listenWhen(waiting, waiting), isFalse);
|
|
expect(behavior.listenWhen(waiting, playing), isTrue);
|
|
expect(behavior.listenWhen(waiting, gameOver), isTrue);
|
|
|
|
expect(behavior.listenWhen(playing, playing), isFalse);
|
|
expect(behavior.listenWhen(playing, waiting), isTrue);
|
|
expect(behavior.listenWhen(playing, gameOver), isTrue);
|
|
|
|
expect(behavior.listenWhen(gameOver, gameOver), isFalse);
|
|
expect(behavior.listenWhen(gameOver, waiting), isTrue);
|
|
expect(behavior.listenWhen(gameOver, playing), isTrue);
|
|
},
|
|
);
|
|
|
|
group('onNewState', () {
|
|
flameTester.test(
|
|
'zooms when started playing',
|
|
(game) async {
|
|
final playing =
|
|
const GameState.initial().copyWith(status: GameStatus.playing);
|
|
|
|
final behavior = CameraFocusingBehavior();
|
|
await game.ensureAdd(behavior);
|
|
|
|
behavior.onNewState(playing);
|
|
final previousPosition = game.camera.position.clone();
|
|
await game.ready();
|
|
|
|
final zoom = behavior.children.whereType<CameraZoom>().single;
|
|
game.update(zoom.controller.duration!);
|
|
game.update(0);
|
|
|
|
expect(zoom.controller.completed, isTrue);
|
|
expect(
|
|
game.camera.position,
|
|
isNot(equals(previousPosition)),
|
|
);
|
|
},
|
|
);
|
|
|
|
flameTester.test(
|
|
'zooms when game is over',
|
|
(game) async {
|
|
final playing = const GameState.initial().copyWith(
|
|
status: GameStatus.gameOver,
|
|
);
|
|
|
|
final behavior = CameraFocusingBehavior();
|
|
await game.ensureAdd(behavior);
|
|
|
|
behavior.onNewState(playing);
|
|
final previousPosition = game.camera.position.clone();
|
|
await game.ready();
|
|
|
|
final zoom = behavior.children.whereType<CameraZoom>().single;
|
|
game.update(zoom.controller.duration!);
|
|
game.update(0);
|
|
|
|
expect(zoom.controller.completed, isTrue);
|
|
expect(
|
|
game.camera.position,
|
|
isNot(equals(previousPosition)),
|
|
);
|
|
},
|
|
);
|
|
});
|
|
},
|
|
);
|
|
}
|