| // 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/expect.dart'; | |
| import 'package:async_helper/async_helper.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(() { | |
| Timer timer = new Timer(const Duration(milliseconds: 20), () { | |
| 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 20", | |
| "createTimer" | |
| ], events); | |
| asyncEnd(); | |
| }); | |
| } |