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

import 'dart:async';

import 'package:async/async.dart';
import 'package:test/test.dart';

import 'utils.dart';

void main() {
  test("buffers events as soon as it's bound", () async {
    var controller = new StreamController.broadcast();
    var stream = controller.stream.transform(
        const SingleSubscriptionTransformer());

    // Add events before [stream] has a listener to be sure it buffers them.
    controller.add(1);
    controller.add(2);
    await flushMicrotasks();

    expect(stream.toList(), completion(equals([1, 2, 3, 4])));
    await flushMicrotasks();

    controller.add(3);
    controller.add(4);
    controller.close();
  });

  test("cancels the subscription to the broadcast stream when it's canceled",
      () async {
    var canceled = false;
    var controller = new StreamController.broadcast(onCancel: () {
      canceled = true;
    });
    var stream = controller.stream.transform(
        const SingleSubscriptionTransformer());
    await flushMicrotasks();
    expect(canceled, isFalse);

    var subscription = stream.listen(null);
    await flushMicrotasks();
    expect(canceled, isFalse);

    subscription.cancel();
    await flushMicrotasks();
    expect(canceled, isTrue);
  });
}
