blob: 6ae393530ad383e116daa62ac2076cd26f2a088d [file] [log] [blame]
// 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.
// @dart = 2.9
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);
}