| // 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'; | |
| main() { | |
| Completer done = new Completer(); | |
| List events = []; | |
| Expect.identical(Zone.root, Zone.current); | |
| Zone forked; | |
| forked = Zone.current.fork( | |
| specification: new ZoneSpecification( | |
| createTimer: | |
| ( | |
| Zone self, | |
| ZoneDelegate parent, | |
| Zone origin, | |
| Duration duration, | |
| f(), | |
| ) { | |
| events.add("forked.createTimer"); | |
| return parent.createTimer(origin, duration, () { | |
| events.add("wrapped function ${duration.inMilliseconds}"); | |
| f(); | |
| }); | |
| }, | |
| ), | |
| ); | |
| asyncStart(); | |
| forked.run(() { | |
| new Timer(Duration.zero, () { | |
| events.add("createTimer"); | |
| Expect.identical(forked, Zone.current); | |
| done.complete(true); | |
| }); | |
| }); | |
| Expect.identical(Zone.root, Zone.current); | |
| events.add("after createTimer"); | |
| done.future.whenComplete(() { | |
| Expect.listEquals([ | |
| "forked.createTimer", | |
| "after createTimer", | |
| "wrapped function 0", | |
| "createTimer", | |
| ], events); | |
| asyncEnd(); | |
| }); | |
| } |