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

/// @assertion void close()
/// Close the sink. No further events can be added after closing.
///
/// @description Checks that if sink was closed, no events can be added after
/// closing.
/// @author ngl@unipro.ru

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

test(EventSink create()) {
  EventSink es1 = create();
  if (es1 is StreamController) {
    StreamController sc = es1;
    List values = [1, 2, 3];
    int i = 0;

    sc.stream.listen((value) {
      Expect.equals(values[i++], value);
    },
    onError: (error, StackTrace st) {
      Expect.equals(values[i++], error);
    },
    onDone: () {
      asyncEnd();
    });

    asyncStart();
    es1.add(values[0]);
    es1.addError(values[1]);

    sc.close();
    try {
      es1.add(3);
    } catch (e) {
      Expect.isTrue(e is StateError);
    }
    try {
      es1.addError(4);
    } catch (e) {
      Expect.isTrue(e is StateError);
    }
  }
}

