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