| // Copyright (c) 2013, 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. | |
| import 'package:expect/async_helper.dart'; | |
| import 'package:expect/expect.dart'; | |
| import 'dart:async'; | |
| testForkedZone(Zone forked) { | |
| var result; | |
| result = forked.run(() { | |
| Expect.identical(forked, Zone.current); | |
| return 499; | |
| }); | |
| Expect.equals(499, result); | |
| Expect.identical(Zone.root, Zone.current); | |
| result = forked.runUnary((x) { | |
| Expect.equals(42, x); | |
| Expect.identical(forked, Zone.current); | |
| return -499; | |
| }, 42); | |
| Expect.equals(-499, result); | |
| Expect.identical(Zone.root, Zone.current); | |
| bool runGuardedDidRun = false; | |
| forked.runGuarded(() { | |
| runGuardedDidRun = true; | |
| Expect.identical(forked, Zone.current); | |
| }); | |
| Expect.identical(Zone.root, Zone.current); | |
| Expect.isTrue(runGuardedDidRun); | |
| runGuardedDidRun = false; | |
| forked.runUnaryGuarded((x) { | |
| runGuardedDidRun = true; | |
| Expect.equals(42, x); | |
| Expect.identical(forked, Zone.current); | |
| }, 42); | |
| Expect.identical(Zone.root, Zone.current); | |
| Expect.isTrue(runGuardedDidRun); | |
| var callback = () => 499; | |
| Expect.identical(callback, forked.registerCallback(callback)); | |
| Expect.identical(Zone.root, Zone.current); | |
| var callback1 = (x) => 42 + x; | |
| Expect.identical(callback1, forked.registerUnaryCallback(callback1)); | |
| Expect.identical(Zone.root, Zone.current); | |
| asyncStart(); | |
| bool asyncDidRun = false; | |
| forked.scheduleMicrotask(() { | |
| Expect.identical(forked, Zone.current); | |
| asyncDidRun = true; | |
| asyncEnd(); | |
| }); | |
| Expect.isFalse(asyncDidRun); | |
| Expect.identical(Zone.root, Zone.current); | |
| asyncStart(); | |
| bool timerDidRun = false; | |
| forked.createTimer(const Duration(milliseconds: 0), () { | |
| Expect.identical(forked, Zone.current); | |
| timerDidRun = true; | |
| asyncEnd(); | |
| }); | |
| Expect.identical(Zone.root, Zone.current); | |
| } | |
| main() { | |
| Expect.identical(Zone.root, Zone.current); | |
| Zone forked = Zone.current.fork(); | |
| Expect.isFalse(identical(Zone.root, forked)); | |
| testForkedZone(forked); | |
| Zone forkedChild = forked.fork(); | |
| testForkedZone(forkedChild); | |
| } |