// Copyright (c) 2016, 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 T current
/// The current value of the stream.
///
/// Is null before the first call to moveNext and after a call to moveNext
/// completes with a false result or an error.
///
/// When a moveNext call completes with true, the current field holds the most
/// recent event of the stream, and it stays like that until the next call to
/// moveNext. Between a call to moveNext and when its returned future completes,
/// the value is unspecified.
///
/// @description Checks that the property current returns null before the first
/// call to moveNext and after a call to moveNext completes with a false result.
/// @author ngl@unipro.ru


import "dart:async";
import "../../../Utils/expect.dart";

main() {
  StreamController c = new StreamController();
  StreamIterator si = new StreamIterator(c.stream);

  Expect.isNull(si.current);
  c.add(1);
  Expect.isNull(si.current);

  asyncStart();
  si.moveNext().then((bool value) {
    Expect.isTrue(value);
    Expect.equals(1, si.current);

    si.moveNext().then((bool value) {
      Expect.isFalse(value);
      Expect.isNull(si.current);
      asyncEnd();
    });

  });

  c.close();
}
