// Copyright (c) 2017, 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 cancel()
 * Cancels the stream iterator (and the underlying stream subscription) early.
 *
 * The stream iterator is automatically canceled if the moveNext future
 * completes with either false or an error.
 *
 * If you need to stop listening for values before the stream iterator is
 * automatically closed, you must call cancel to ensure that the stream is
 * properly closed.
 *
 * If moveNext has been called when the iterator is cancelled, its returned
 * future will complete with false as value, as will all further calls to
 * moveNext.
 *
 * Returns a future if the cancel-operation is not completed synchronously.
 * Otherwise returns null.
 *
 * @description Checks that call to cancel() completes with false future
 * returned by moveNext(), that was called prior cancel().
 * @author a.semenov@unipro.ru
 */
import "dart:async";
import "../../../Utils/expect.dart";

main() {
  StreamController controller = new StreamController();
  StreamIterator streamIterator = new StreamIterator(controller.stream);
  streamIterator.moveNext().then((value) {
    Expect.isFalse(value);
    asyncEnd();
  });

  asyncStart();
  streamIterator.cancel();
}
