/*
 * 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 Stream<T> asBroadcastStream ({void onListen(StreamSubscription<T>
 *   subscription), void onCancel(StreamSubscription<T> subscription)})
 * Returns a multi-subscription stream that produces the same events as this.
 * If this stream is single-subscription, return a new stream that allows multiple subscribers.
 * It will subscribe to this stream when its first subscriber is added,
 * and will stay subscribed until this stream ends, or a callback cancels the subscription.
 * @description Checks that if this stream is single-subscription,
 * returned stream is indeed a broadcast stream.
 * @author kaigorodov
 */
import "dart:async";
import "dart:isolate";
import "../../../Utils/expect.dart";

main() {
  ReceivePort s1 = new ReceivePort();
  Stream s2 = s1.asBroadcastStream();
  Stream s3 = s2.asBroadcastStream();
  try {
    Expect.isFalse(s1.isBroadcast);
    Expect.isTrue(s2.isBroadcast);
    Expect.isTrue(s3.isBroadcast);
  } finally {
    s1.close();
  }
}
