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 e2aab21d6da40b916a4f6d232e33b0ff1c487c7d..53be91005be249e8497bcff6447cc80b59971768 100644 |
--- a/tests/lib/async/stream_controller_async_test.dart |
+++ b/tests/lib/async/stream_controller_async_test.dart |
@@ -53,28 +53,6 @@ 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", |
() { |
@@ -93,33 +71,6 @@ 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() { |
@@ -478,10 +429,66 @@ 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(); |
} |