// 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 StreamController.broadcast({void onListen(), void onCancel(),
///                                       bool sync: false})
/// A controller where stream can be listened to more than once.
///
/// The Stream returned by stream is a broadcast stream. It can be listened to
/// more than once.
///
/// The controller distributes any events to all currently subscribed listeners
/// at the time when add, addError or close is called.
///
/// @description Checks that property stream implements Stream interface
/// @author a.semenov@unipro.ru

import "dart:async";
import "../Stream/allTests_A01.lib.dart";

Stream<T> create<T>(Iterable<T> data, {bool isError(T element)?}) {
  StreamController<T>? sc;
  sc = new StreamController<T>.broadcast(
    onListen:() {
      for (T e in data) {
        if (isError != null && isError(e)) {
          sc?.addError(e as Object);
        } else {
          sc?.add(e);
        }
      }
      new Future(() => sc?.close());
    },
    onCancel: () {
      sc?.close();
    }
  );
  return sc.stream;
}

main() {
  test(create);
}
