| Index: tests/lib_strong/async/stream_iterator_double_cancel_test.dart
|
| diff --git a/tests/lib_strong/async/stream_iterator_double_cancel_test.dart b/tests/lib_strong/async/stream_iterator_double_cancel_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..16bb5730c7ddd4ca4b912cfbb14348926e3d2c24
|
| --- /dev/null
|
| +++ b/tests/lib_strong/async/stream_iterator_double_cancel_test.dart
|
| @@ -0,0 +1,38 @@
|
| +// 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";
|
| +
|
| +Stream timedStream(int n) {
|
| + int i = 0;
|
| + StreamController controller;
|
| + tick() {
|
| + if (i >= n) {
|
| + controller.close();
|
| + return;
|
| + }
|
| + controller.add(i);
|
| + i++;
|
| + new Future.delayed(new Duration(milliseconds: 0), tick);
|
| + }
|
| + controller = new StreamController(onListen: tick);
|
| + return controller.stream;
|
| +}
|
| +
|
| +void main() {
|
| + asyncStart();
|
| + StreamIterator iterator = new StreamIterator(timedStream(10));
|
| + helper(more) {
|
| + if (!more) {
|
| + // Canceling the already closed iterator should not lead to a crash.
|
| + iterator.cancel();
|
| + asyncEnd();
|
| + } else {
|
| + iterator.moveNext().then(helper);
|
| + }
|
| + }
|
| + iterator.moveNext().then(helper);
|
| +}
|
|
|