Chromium Code Reviews| Index: tests/language/async_star_no_cancel_test.dart |
| diff --git a/tests/language/async_star_no_cancel_test.dart b/tests/language/async_star_no_cancel_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..da63a5d902c3401af08555bec7797948329ed00e |
| --- /dev/null |
| +++ b/tests/language/async_star_no_cancel_test.dart |
| @@ -0,0 +1,48 @@ |
| +// Copyright (c) 2016, 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"; |
| + |
| +var events = []; |
| + |
| +ticker() async* { |
| + var sc; |
| + var sentTickCount = 0; |
| + sc = new StreamController(onListen: () { |
| + events.add("listen"); |
| + }, onCancel: () { |
| + events.add("cancel"); |
| + }); |
| + |
| + try { |
| + var counter = 0; |
| + await for (var tick in sc.stream) { |
| + counter++; |
| + } |
| + } finally { |
| + events.add("finally"); |
| + } |
| +} |
| + |
| +void main() { |
| + asyncStart(); |
| + events.add("main"); |
| + final subscription = ticker().listen((val) { }); |
| + |
| + bool cancelFinished = false; |
| + // Cancel the subscription. |
| + // The async* function is blocked on an `await` (the inner stream) and won't |
| + // be able to complete. |
| + Timer.run(() { |
| + subscription.cancel().then((_) => cancelFinished = true); |
|
hausner
2016/02/10 21:13:17
Maybe add and event here that proves that the subs
floitsch
2016/02/11 13:53:26
Done.
|
| + }); |
| + |
| + new Timer(const Duration(milliseconds: 100), () { |
| + Expect.isFalse(cancelFinished); |
| + Expect.listEquals(["main", "listen"], events); |
| + asyncEnd(); |
| + }); |
| +} |