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

// @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 returns the current value of the stream.
/// @author kaigorodov


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

void check(expected) {
  StreamController controller = new StreamController();
  StreamIterator streamIterator = new StreamIterator(controller.stream);
  asyncStart();
  controller.add(expected);
  streamIterator.moveNext().then((bool value) {
    Expect.isTrue(value);
    Expect.equals(expected, streamIterator.current);
    asyncEnd();
  });
  controller.close();
}

main() {
  check(null);
  check(12345);
  check("expected");
  check(["expected"]);
}
