// 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 final Future done
/// The done Future completes with the same values as close, except for the
/// following case:
/// The synchronous methods of EventSink were called, resulting in an error.
/// If there is no active future (like from an addStream call), the done future
/// will complete with that error
/// @description Checks that done completes with the same value as close().
/// @author ilya

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

main() {
  var c = new StreamController();
  var sink = c.sink;
  sink.add(1);
  sink.add(2);

  asyncStart();
  c.stream.toList().then((x) {
    Expect.listEquals([1, 2], x);
    asyncEnd();
  });

  asyncStart();
  var sync = new Sync2((x, y) {
    Expect.identical(x, y);
    asyncEnd();
  });

  sink.done.then((x) {
    sync.put1(x);
  });

  sink.close().then((x) {
    sync.put2(x);
  });
}
