Chromium Code Reviews| Index: tests/language/async_star_cancel_and_throw_in_finally_test.dart |
| diff --git a/tests/language/async_star_cancel_and_throw_in_finally_test.dart b/tests/language/async_star_cancel_and_throw_in_finally_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..900dfafcac680c26b410e1ec7c36942ee4617f2b |
| --- /dev/null |
| +++ b/tests/language/async_star_cancel_and_throw_in_finally_test.dart |
| @@ -0,0 +1,42 @@ |
| +// Copyright (c) 2015, 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"dart:async"; |
| +import "package:expect/expect.dart"; |
| +import "package:async_helper/async_helper.dart"; |
| + |
| +// When an exception is thrown in the finally block cleaning up after a cancel, |
| +// the future returned from cancel should complete with an error. |
| + |
| +foo() async* { |
| + try { |
| + int i = 0; |
| + while(true) { |
| + yield i++; |
| + } |
| + } finally { |
| + throw "Error"; |
| + } |
| +} |
| + |
| +test() async { |
| + var completer = new Completer(); |
| + var s; |
| + s = foo().listen((e) async { |
| + Expect.equals(0, e); |
| + try { |
| + await s.cancel(); |
| + Expect.fail("Did not throw"); |
| + } catch(e) { |
| + Expect.equals("Error", e); |
|
floitsch
2015/03/22 23:47:45
Make sure this catch clause is called.
sigurdm
2015/03/23 13:45:16
Done.
|
| + } |
| + completer.complete(); |
| + }); |
| + await completer.future; |
| +} |
| + |
| +main() { |
| + asyncStart(); |
| + test().then((_) => asyncEnd()); |
| +} |