65 lines
2.8 KiB
Dart
65 lines
2.8 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 'dart:async';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
class TestBinding extends BindingBase {}
|
|
|
|
void main() {
|
|
test('BindingBase.debugCheckZone', () async {
|
|
final BindingBase binding = TestBinding();
|
|
binding.debugCheckZone('test1');
|
|
BindingBase.debugZoneErrorsAreFatal = true;
|
|
Zone.current.fork().run(() {
|
|
try {
|
|
binding.debugCheckZone('test2');
|
|
fail('expected an exception');
|
|
} catch (error) {
|
|
expect(error, isA<FlutterError>());
|
|
expect(
|
|
error.toString(),
|
|
'Zone mismatch.\n'
|
|
'The Flutter bindings were initialized in a different zone than is now being used. '
|
|
'This will likely cause confusion and bugs as any zone-specific configuration will '
|
|
'inconsistently use the configuration of the original binding initialization zone '
|
|
'or this zone based on hard-to-predict factors such as which zone was active when '
|
|
'a particular callback was set.\n'
|
|
'It is important to use the same zone when calling `ensureInitialized` on the '
|
|
'binding as when calling `test2` later.\n'
|
|
'To make this error non-fatal, set BindingBase.debugZoneErrorsAreFatal to false '
|
|
'before the bindings are initialized (i.e. as the first statement in `void main() { }`).',
|
|
);
|
|
}
|
|
});
|
|
BindingBase.debugZoneErrorsAreFatal = false;
|
|
Zone.current.fork().run(() {
|
|
var sawError = false;
|
|
final FlutterExceptionHandler? lastHandler = FlutterError.onError;
|
|
FlutterError.onError = (FlutterErrorDetails details) {
|
|
final Object error = details.exception;
|
|
expect(error, isA<FlutterError>());
|
|
expect(
|
|
error.toString(),
|
|
'Zone mismatch.\n'
|
|
'The Flutter bindings were initialized in a different zone than is now being used. '
|
|
'This will likely cause confusion and bugs as any zone-specific configuration will '
|
|
'inconsistently use the configuration of the original binding initialization zone '
|
|
'or this zone based on hard-to-predict factors such as which zone was active when '
|
|
'a particular callback was set.\n'
|
|
'It is important to use the same zone when calling `ensureInitialized` on the '
|
|
'binding as when calling `test3` later.\n'
|
|
'To make this warning fatal, set BindingBase.debugZoneErrorsAreFatal to true '
|
|
'before the bindings are initialized (i.e. as the first statement in `void main() { }`).',
|
|
);
|
|
sawError = true;
|
|
};
|
|
binding.debugCheckZone('test3');
|
|
expect(sawError, isTrue);
|
|
FlutterError.onError = lastHandler;
|
|
});
|
|
});
|
|
}
|