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

// @dart = 2.9

/// @assertion StreamController.broadcast({void onListen(), void onCancel(),
///                                       bool sync: false})
/// Each listener subscription is handled independently, and if one pauses,
/// only the pausing listener is affected. A paused listener will buffer events
/// internally until unpaused or canceled.
///
/// @description Checks that if a listener is paused, only that listener is
/// affected. Checks that paused listener will buffer events internally.
/// @author a.semenov@unipro.ru


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

main() {
  StreamController controller = new StreamController.broadcast();
  Stream stream = controller.stream;
  asyncMultiStart(2);
  List log1 = [];
  StreamSubscription sub1 = stream.listen(
    (event) => log1.add(event),
    onDone: () {
      Expect.listEquals([1,2,3,4,5], log1);
      asyncEnd();
    }
  );

  List log2 = [];
  StreamSubscription sub2 = stream.listen(
    (event) => log2.add(event),
    onDone: () {
      Expect.listEquals([1,2,3,4,5], log2);
      asyncEnd();
    }
  );

  controller.add(1);
  controller.add(2);
  sub1.pause();
  controller.add(3);
  controller.add(4);
  sub1.resume();
  controller.add(5);
  controller.close();
}
