// 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.

// @dart = 2.9

/// @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();
}
