blob: 41bf4f242aba8b396f950277f25e463b21e2e8ca [file] [log] [blame]
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// @dart = 2.9
/// @assertion abstract bool inSameErrorZone(Zone otherZone)
/// Returns true if this and otherZone are in the same error zone.
/// Two zones are in the same error zone if they share the same
/// handleUncaughtError callback.
/// @description Checks that inSameErrorZone returns true if zones share the
/// same handleUncaughtError callback and false otherwise.
/// @author ilya
import "dart:async";
import "../../../Utils/expect.dart";
var count=0;
HandleUncaughtErrorHandler newHandler() {
return (Zone self, ZoneDelegate parent, Zone zone, e, st) {
Expect.fail('shoud not be called');
};
}
newErrorZone (Zone z) =>
z.fork(specification: new ZoneSpecification(handleUncaughtError: newHandler()));
same () => Expect.isTrue(Zone.current.inSameErrorZone(Zone.current.parent));
diff () => Expect.isFalse(Zone.current.inSameErrorZone(Zone.current.parent));
main() {
var z = Zone.current;
runZoned(same); // both do not have error callback
z.fork().run(same); //
newErrorZone(z).run(() {
runZoned(same); // parent is error zone, child is not and shares callback
z.fork().run(same); //
});
runZoned(diff, onError: (_,__) {}); // child is new error zone
newErrorZone(z).run(diff); // child is new error zone
newErrorZone(z).run(() {
newErrorZone(Zone.current).run(diff); // have different error callbacks
});
}