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

// Test the basic StreamController and StreamController.singleSubscription.
library stream_single_test;

import 'dart:async';

import 'package:expect/expect.dart';
import 'package:async_helper/async_minitest.dart';

import 'event_helper.dart';

main() {
  test("tomulti 1", () {
    StreamController<int> c = new StreamController<int>(sync: true);
    Stream<int> multi = c.stream.asBroadcastStream();
    // Listen twice.
    multi.listen(expectAsync((v) => Expect.equals(42, v)));
    multi.listen(expectAsync((v) => Expect.equals(42, v)));
    c.add(42);
  });

  test("tomulti 2", () {
    StreamController<int> c = new StreamController<int>(sync: true);
    Stream<int> multi = c.stream.asBroadcastStream();
    Events expected = new Events.fromIterable([1, 2, 3, 4, 5]);
    Events actual1 = new Events.capture(multi);
    Events actual2 = new Events.capture(multi);
    actual1.onDone(expectAsync(() {
      Expect.listEquals(expected.events, actual1.events);
    }));
    actual2.onDone(expectAsync(() {
      Expect.listEquals(expected.events, actual2.events);
    }));
    expected.replay(c);
  });

  test("tomulti no-op", () {
    StreamController<int> c = new StreamController<int>(sync: true);
    Stream<int> multi = c.stream.asBroadcastStream();
    Events expected = new Events.fromIterable([1, 2, 3, 4, 5]);
    Events actual1 = new Events.capture(multi);
    Events actual2 = new Events.capture(multi);
    actual1.onDone(expectAsync(() {
      Expect.listEquals(expected.events, actual1.events);
    }));
    actual2.onDone(expectAsync(() {
      Expect.listEquals(expected.events, actual2.events);
    }));
    expected.replay(c);
  });
}
