| // 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/async_helper.dart"; | |
| import "package:expect/expect.dart"; | |
| Stream timedStream(int n) { | |
| int i = 0; | |
| late 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); | |
| } |