flutter/packages/flutter/test/widgets/run_app_async_test.dart
Michael Goderbauer 48bb12dfbe
Make Element tree root generic (#123352)
Make Element tree root generic
2023-03-27 20:31:49 +00:00

59 lines
1.6 KiB
Dart

// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:fake_async/fake_async.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
// This test is very fragile and bypasses some zone-related checks.
// It is written this way to verify some invariants that would otherwise
// be difficult to check.
// Do not use this test as a guide for writing good Flutter code.
class TestBinding extends WidgetsFlutterBinding {
@override
void initInstances() {
super.initInstances();
_instance = this;
}
@override
bool debugCheckZone(String entryPoint) { return true; }
static TestBinding get instance => BindingBase.checkInstance(_instance);
static TestBinding? _instance;
static TestBinding ensureInitialized() {
if (TestBinding._instance == null) {
TestBinding();
}
return TestBinding.instance;
}
}
void main() {
setUp(() {
TestBinding.ensureInitialized();
WidgetsBinding.instance.resetEpoch();
});
test('WidgetBinding build rendering tree and warm up frame back to back', () {
final FakeAsync fakeAsync = FakeAsync();
fakeAsync.run((FakeAsync async) {
runApp(
const MaterialApp(
home: Material(
child: Text('test'),
),
),
);
// Rendering tree is not built synchronously.
expect(WidgetsBinding.instance.rootElement, isNull);
fakeAsync.flushTimers();
expect(WidgetsBinding.instance.rootElement, isNotNull);
});
});
}