/*
 * 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 addError(errorEvent, [StackTrace stackTrace])
 * Send an async error to a stream.
 *
 * @description Checks the addError method.
 * @author ngl@unipro.ru
 */
library addError_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.fail("Should not be here: $value");
    },
    onError: (error, StackTrace st) {
      Expect.equals(values[i++], error);
    },
    onDone: () {
      asyncEnd();
    });

    asyncStart();
    for (int k = 0; k < values.length; k++) {
      es1.addError(values[k]);
    }
    sc.close();
  }
}

