Chromium Code Reviews| Index: tests/lib/async/catch_errors13_test.dart |
| diff --git a/tests/lib/async/catch_errors13_test.dart b/tests/lib/async/catch_errors13_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cb8e321d7794d37ce3ddd8b7d2a58bfddbf081a0 |
| --- /dev/null |
| +++ b/tests/lib/async/catch_errors13_test.dart |
| @@ -0,0 +1,58 @@ |
| +// 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 'dart:async'; |
| +import 'dart:isolate'; |
| + |
| +main() { |
| + // We keep a ReceivePort open until all tests are done. This way the VM will |
| + // time out if the callbacks are not invoked. |
| + var port = new ReceivePort(); |
| + var events = []; |
| + // Work around bug that makes runAsync use Timers. Not sure it is still |
| + // necessary, but it definitely doesn't hurt. |
|
Lasse Reichstein Nielsen
2013/05/29 08:04:59
A "not sure" in a unit test is worrying.
Can we fi
floitsch
2013/05/29 15:21:29
Changed comment.
Still necessary, since we still u
|
| + runAsync(() { }); |
| + |
| + // Test that errors are caught by nested `catchErrors`. Also uses `runAsync` |
| + // in the body of a Timer. |
| + catchErrors(() { |
| + events.add("catch error entry"); |
| + catchErrors(() { |
| + events.add("catch error entry2"); |
| + Timer.run(() { throw "timer error"; }); |
| + new Timer(const Duration(milliseconds: 50), |
| + () { |
| + runAsync(() { throw "runAsync"; }); |
| + throw "delayed error"; |
| + }); |
| + }).listen((x) { events.add(x); }) |
| + .asFuture() |
| + .then((_) => events.add("inner done")) |
| + .then((_) { throw "inner done throw"; }); |
| + events.add("after inner"); |
| + Timer.run(() { throw "timer outer"; }); |
| + throw "inner throw"; |
| + }).listen((x) { |
| + events.add(x); |
| + }, |
| + onDone: () { |
| + Expect.listEquals([ |
| + "catch error entry", |
| + "catch error entry2", |
| + "after inner", |
| + "main exit", |
| + "inner throw", |
| + "timer error", |
| + "timer outer", |
| + "delayed error", |
| + "runAsync", |
| + "inner done", |
| + "inner done throw" |
| + ], |
| + events); |
| + port.close(); |
| + }); |
| + events.add("main exit"); |
| +} |