blob: b5a3ac5e5ffea567d55f5f2a86e697f00c982a4a [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();
}