refactor: load assets in test games

pull/204/head
Allison Ryan 3 years ago
parent 74c2b0483e
commit aa86ef302b

@ -2,9 +2,19 @@ import 'package:flame/input.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
class TestGame extends Forge2DGame { class TestGame extends Forge2DGame {
TestGame() { TestGame([List<String>? assets]) : _assets = assets {
images.prefix = ''; images.prefix = '';
} }
final List<String>? _assets;
@override
Future<void> onLoad() async {
if (_assets != null) {
await Future.wait(_assets!.map(images.load));
}
await super.onLoad();
}
} }
class KeyboardTestGame extends TestGame with HasKeyboardHandlerComponents {} class KeyboardTestGame extends TestGame with HasKeyboardHandlerComponents {}

@ -1,16 +1,23 @@
import 'package:flame/src/game/flame_game.dart'; import 'package:flame/game.dart';
import 'package:flame_test/flame_test.dart'; import 'package:flame_test/flame_test.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_test/flutter_test.dart';
class FlameBlocTester<T extends FlameGame, B extends Bloc<dynamic, dynamic>> class FlameBlocTester<T extends FlameGame, B extends Bloc<dynamic, dynamic>>
extends FlameTester<T> { extends FlameTester<T> {
FlameBlocTester({ FlameBlocTester({
required GameCreateFunction<T> gameBuilder, required GameCreateFunction<T> gameBuilder,
required B Function() blocBuilder, required B Function() blocBuilder,
// TODO(allisonryan0002): find alternative for testGameWidget. Loading
// assets in onLoad fails because the game loads after
List<String>? assets,
List<RepositoryProvider> Function()? repositories, List<RepositoryProvider> Function()? repositories,
}) : super( }) : super(
gameBuilder, gameBuilder,
pumpWidget: (gameWidget, tester) async { pumpWidget: (gameWidget, tester) async {
if (assets != null) {
await Future.wait(assets.map(gameWidget.game.images.load));
}
await tester.pumpWidget( await tester.pumpWidget(
BlocProvider.value( BlocProvider.value(
value: blocBuilder(), value: blocBuilder(),

@ -1,5 +1,7 @@
// ignore_for_file: must_call_super // ignore_for_file: must_call_super
import 'dart:async';
import 'package:flame_bloc/flame_bloc.dart'; import 'package:flame_bloc/flame_bloc.dart';
import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flame_forge2d/flame_forge2d.dart';
import 'package:pinball/game/game.dart'; import 'package:pinball/game/game.dart';
@ -14,26 +16,53 @@ class TestGame extends Forge2DGame with FlameBloc {
} }
class PinballTestGame extends PinballGame { class PinballTestGame extends PinballGame {
PinballTestGame() PinballTestGame([List<String>? assets])
: super( : _assets = assets,
super(
audio: MockPinballAudio(), audio: MockPinballAudio(),
theme: const PinballTheme( theme: const PinballTheme(
characterTheme: DashTheme(), characterTheme: DashTheme(),
), ),
); );
final List<String>? _assets;
@override
Future<void> onLoad() async {
if (_assets != null) {
await Future.wait(_assets!.map(images.load));
}
await super.onLoad();
}
} }
class DebugPinballTestGame extends DebugPinballGame { class DebugPinballTestGame extends DebugPinballGame {
DebugPinballTestGame() DebugPinballTestGame([List<String>? assets])
: super( : _assets = assets,
super(
audio: MockPinballAudio(), audio: MockPinballAudio(),
theme: const PinballTheme( theme: const PinballTheme(
characterTheme: DashTheme(), characterTheme: DashTheme(),
), ),
); );
final List<String>? _assets;
@override
Future<void> onLoad() async {
if (_assets != null) {
await Future.wait(_assets!.map(images.load));
}
await super.onLoad();
}
} }
class EmptyPinballTestGame extends PinballTestGame { class EmptyPinballTestGame extends PinballTestGame {
EmptyPinballTestGame([List<String>? assets]) : super(assets);
@override @override
Future<void> onLoad() async {} Future<void> onLoad() async {
if (_assets != null) {
await Future.wait(_assets!.map(images.load));
}
}
} }

Loading…
Cancel
Save