| Index: tests/lib/async/stream_controller_async_test.dart
|
| diff --git a/tests/lib/async/stream_controller_async_test.dart b/tests/lib/async/stream_controller_async_test.dart
|
| index 53be91005be249e8497bcff6447cc80b59971768..e2aab21d6da40b916a4f6d232e33b0ff1c487c7d 100644
|
| --- a/tests/lib/async/stream_controller_async_test.dart
|
| +++ b/tests/lib/async/stream_controller_async_test.dart
|
| @@ -53,6 +53,28 @@ testSingleController() {
|
| c.add(42);
|
| });
|
|
|
| + test("Single-subscription StreamController subscription changes", () {
|
| + StreamController c = new StreamController();
|
| + EventSink sink = c.sink;
|
| + Stream stream = c.stream;
|
| + int counter = 0;
|
| + var subscription;
|
| + subscription = stream.listen((data) {
|
| + counter += data;
|
| + Expect.throws(() => stream.listen(null), (e) => e is StateError);
|
| + subscription.cancel();
|
| + stream.listen((data) {
|
| + counter += data * 10;
|
| + },
|
| + onDone: expectAsync0(() {
|
| + Expect.equals(1 + 20, counter);
|
| + }));
|
| + });
|
| + sink.add(1);
|
| + sink.add(2);
|
| + sink.close();
|
| + });
|
| +
|
| test("Single-subscription StreamController events are buffered when"
|
| " there is no subscriber",
|
| () {
|
| @@ -71,6 +93,33 @@ testSingleController() {
|
| Expect.equals(3, counter);
|
| }));
|
| });
|
| +
|
| + // Test subscription changes while firing.
|
| + test("Single-subscription StreamController subscription changes while firing",
|
| + () {
|
| + StreamController c = new StreamController();
|
| + EventSink sink = c.sink;
|
| + Stream stream = c.stream;
|
| + int counter = 0;
|
| + var subscription = stream.listen(null);
|
| + subscription.onData(expectAsync1((data) {
|
| + counter += data;
|
| + subscription.cancel();
|
| + stream.listen((data) {
|
| + counter += 10 * data;
|
| + },
|
| + onDone: expectAsync0(() {
|
| + Expect.equals(1 + 20 + 30 + 40 + 50, counter);
|
| + }));
|
| + Expect.throws(() => stream.listen(null), (e) => e is StateError);
|
| + }));
|
| + sink.add(1); // seen by stream 1
|
| + sink.add(2); // seen by stream 10 and 100
|
| + sink.add(3); // -"-
|
| + sink.add(4); // -"-
|
| + sink.add(5); // seen by stream 10
|
| + sink.close();
|
| + });
|
| }
|
|
|
| testExtraMethods() {
|
| @@ -429,66 +478,10 @@ testRethrow() {
|
| testFuture("drain", (s, act) => s.drain().then(act));
|
| }
|
|
|
| -void testMultiplex() {
|
| - test("multiplex-basic", () {
|
| - StreamController<int> c = new StreamController.multiplex(
|
| - onListen: expectAsync0(() {}),
|
| - onCancel: expectAsync0(() {})
|
| - );
|
| - Stream<int> s = c.stream;
|
| - s.listen(expectAsync1((x) { expect(x, equals(42)); }));
|
| - c.add(42);
|
| - c.close();
|
| - });
|
| -
|
| - test("multiplex-listen-twice", () {
|
| - StreamController<int> c = new StreamController.multiplex(
|
| - onListen: expectAsync0(() {}),
|
| - onCancel: expectAsync0(() {})
|
| - );
|
| - c.stream.listen(expectAsync1((x) { expect(x, equals(42)); }, count: 2));
|
| - c.add(42);
|
| - c.stream.listen(expectAsync1((x) { expect(x, equals(42)); }));
|
| - c.add(42);
|
| - c.close();
|
| - });
|
| -
|
| - test("multiplex-listen-twice-non-overlap", () {
|
| - StreamController<int> c = new StreamController.multiplex(
|
| - onListen: expectAsync0(() {}, count: 2),
|
| - onCancel: expectAsync0(() {}, count: 2)
|
| - );
|
| - var sub = c.stream.listen(expectAsync1((x) { expect(x, equals(42)); }));
|
| - c.add(42);
|
| - sub.cancel();
|
| - c.stream.listen(expectAsync1((x) { expect(x, equals(42)); }));
|
| - c.add(42);
|
| - c.close();
|
| - });
|
| -
|
| - test("multiplex-individual-pause", () {
|
| - StreamController<int> c = new StreamController.multiplex(
|
| - onListen: expectAsync0(() {}),
|
| - onCancel: expectAsync0(() {})
|
| - );
|
| - var sub1 = c.stream.listen(expectAsync1((x) { expect(x, equals(42)); }));
|
| - var sub2 = c.stream.listen(expectAsync1((x) { expect(x, equals(42)); },
|
| - count: 3));
|
| - c.add(42);
|
| - sub1.pause();
|
| - c.add(42);
|
| - sub1.cancel();
|
| - var sub3 = c.stream.listen(expectAsync1((x) { expect(x, equals(42)); }));
|
| - c.add(42);
|
| - c.close();
|
| - });
|
| -}
|
| -
|
| main() {
|
| testController();
|
| testSingleController();
|
| testExtraMethods();
|
| testPause();
|
| testRethrow();
|
| - testMultiplex();
|
| }
|
|
|