// 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(); }); }