blob: dcc6261092acf219b8297267ca267ec2e87e4b0b [file] [log] [blame]
// Copyright (c) 2011, 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.
/// @assertion Future<bool> moveNext()
/// Wait for the next stream value to be available.
///
/// Returns a future which will complete with either true or false. Completing
/// with true means that another event has been received and can be read as
/// current. Completing with false means that the stream itearation is done and
/// no further events will ever be available. The future may complete with an
/// error, if the stream produces an error, which also ends iteration.
///
/// The function must not be called again until the future returned by a previous
/// call is completed.
///
/// @description Checks that future returned by moveNext() completes with
/// an error if stream produces an error and that iterator is automatically
/// cancelled after that (see doc on cancel).
/// @author ilya
import "dart:async";
import "../../../Utils/expect.dart";
main() {
var c = new StreamController();
var si = new StreamIterator(c.stream);
asyncStart();
si.moveNext().then((value) {
Expect.identical(true, value);
Expect.identical(1, si.current);
si.moveNext().catchError((value) {
Expect.identical(2, value);
si.moveNext().then((value) {
Expect.identical(false, value);
asyncEnd();
return true;
});
return false;
});
return true;
});
c.add(1);
c.addError(2);
c.add(3);
c.close();
}