blob: 1acd558ed32c6d6c794e4dd3e00f74f4e9e09bc4 [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.
/// @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. Async cases.
/// @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()));
main() {
var z = Zone.current;
same([_]) {
Expect.isTrue(Zone.current.inSameErrorZone(z));
asyncEnd();
}
diff([_]) {
Expect.isFalse(Zone.current.inSameErrorZone(z));
asyncEnd();
}
asyncStart();
scheduleMicrotask(same); // the same zone
asyncStart();
z.fork().scheduleMicrotask(same); // both do not have error callback
asyncStart();
new Future.value(1).then(same); // the same zone
asyncStart();
new Future.error(1).catchError(same); // the same zone
asyncStart();
newErrorZone(z).scheduleMicrotask(diff); // child is new error zone
}