Files
flame/packages/flame/test/components/component_lifecycle_test.dart
Lukas Klingsbo 5c47d7f6d7 chore: analyze issues introduced from new dart version (#1196)
* Added Component.childrenFactory

* fix some of the lint warnings

* more lint warnings

* remove changelog entry

* more analyzer warnings

* one more warning

* one more warning

* remove more unused imports

* fix more warnings

* another warning

* one more warning

* a lot more warnings

* some more warnings

* fix warnings in flame_svg

* fix warnings in flame_bloc

* Remove OrderedSet override feature

* Remove testRandom change

* Remove unnecessary type checks

* Re-remove deprecated argument in random_test

Co-authored-by: Pasha Stetsenko <stpasha@google.com>
2021-12-09 15:40:43 +01:00

109 lines
2.6 KiB
Dart

import 'package:flame/components.dart';
import 'package:flame_test/flame_test.dart';
import 'package:flutter_test/flutter_test.dart';
class _MyComponent extends Component {
final List<String> events;
_MyComponent(this.events);
@override
void prepare(Component parent) {
super.prepare(parent);
events.add('prepared: $isPrepared');
}
@override
Future<void> onLoad() async {
await super.onLoad();
events.add('onLoad');
}
@override
void onMount() {
events.add('onMount');
}
@override
void onGameResize(Vector2 size) {
super.onGameResize(size);
events.add('onGameResize');
}
}
void main() {
group('Component Lifecycle', () {
flameGame.test('correct order', (game) async {
final events = <String>[];
await game.ensureAdd(_MyComponent(events));
expect(
events,
['onGameResize', 'prepared: true', 'onLoad', 'onMount'],
);
});
flameGame.test('parent prepares the component', (game) async {
final parentEvents = <String>[];
final childEvents = <String>[];
final parent = _MyComponent(parentEvents);
await parent.add(_MyComponent(childEvents));
await game.ensureAdd(parent);
// The parent tries to prepare the component before it is added to the
// game and fails since it doesn't have a game root and therefore re-adds
// the child when it has a proper root.
expect(
parentEvents,
['onGameResize', 'prepared: true', 'onLoad', 'onMount'],
);
expect(
childEvents,
[
'prepared: false',
'onGameResize',
'prepared: true',
'onLoad',
'onMount',
],
);
});
flameGame.test('correct lifecycle on parent change', (game) async {
final parentEvents = <String>[];
final childEvents = <String>[];
final parent = _MyComponent(parentEvents);
final child = _MyComponent(childEvents);
await parent.add(child);
await game.ensureAdd(parent);
child.changeParent(game);
game.update(0);
expect(
parentEvents,
[
'onGameResize',
'prepared: true',
'onLoad',
'onMount',
],
);
// onLoad should only be called the first time that the component is
// loaded.
expect(
childEvents,
[
'prepared: false',
'onGameResize',
'prepared: true',
'onLoad',
'onMount',
'onGameResize',
'prepared: true',
'onMount',
],
);
});
});
}