Chromium Code Reviews| Index: tests/lib/async/zone_register_callback1_test.dart |
| diff --git a/tests/lib/async/zone_register_callback1_test.dart b/tests/lib/async/zone_register_callback1_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6b11e6867af0ffbca1efc3548768116d4d365c0a |
| --- /dev/null |
| +++ b/tests/lib/async/zone_register_callback1_test.dart |
| @@ -0,0 +1,39 @@ |
| +// 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(); |
| + |
| + var valueToCapture; |
| + var restoredValue; |
| + |
| + Expect.identical(Zone.ROOT, Zone.current); |
| + Zone forked = Zone.current.fork(null, new ZoneDescription( |
| + registerCallback1: (Zone self, ZoneDelegate parent, Zone origin, f(arg)) { |
| + // The zone is still the same as when origin.run was invoked, which |
| + // is the root zone. (The origin zone hasn't been set yet). |
| + Expect.identical(Zone.current, Zone.ROOT); |
| + // Note that not forwarding is completely legal, though not encouraged. |
| + var capturedValue = valueToCapture; |
| + return parent.registerCallback1(origin, (arg) { |
| + restoredValue = capturedValue; |
| + return f(arg); |
| + }); |
| + })); |
| + |
| + valueToCapture = 499; |
| + var fun = (x) => x + 99; |
| + var registered = forked.registerCallback1(fun); |
| + Expect.isFalse(identical(fun, registered)); |
| + |
| + // It is legal to invoke the callback in a different zone. This is, of course, |
|
Lasse Reichstein Nielsen
2013/09/23 14:24:12
I generally prefer "allowed" or "valid" to "legal"
floitsch
2013/09/23 17:12:07
Done.
|
| + // extremely discouraged. |
| + var result = registered(399); |
| + Expect.equals(498, result); |
| + Expect.equals(499, restoredValue); |
| +} |