| // 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. |
| |
| // @dart = 2.9 |
| |
| import 'package:expect/expect.dart'; |
| import 'package:async_helper/async_helper.dart'; |
| import 'dart:async'; |
| |
| main() { |
| Completer done = new Completer(); |
| |
| Expect.identical(Zone.root, Zone.current); |
| // New zone, does nothing by itself. |
| Zone forked = Zone.current.fork(specification: new ZoneSpecification()); |
| |
| int ctr = 0; |
| void expectZone([timer]) { |
| Expect.identical(forked, Zone.current); |
| if (timer != null) timer.cancel(); |
| if (++ctr == 3) { |
| asyncEnd(); |
| } |
| } |
| |
| asyncStart(); |
| Duration now = const Duration(seconds: 0); |
| // Check that the callback is bound to the zone. |
| forked.scheduleMicrotask(expectZone); |
| forked.createTimer(now, expectZone); |
| forked.createPeriodicTimer(now, expectZone); |
| } |