Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Side by Side Diff: tests/lib/async/merge_stream_test.dart

Issue 11783009: Big merge from experimental to bleeding edge. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/lib/async/future_test.dart ('k') | tests/lib/async/slow_consumer2_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 // Test merging streams.
6 import "dart:async";
7 import '../../../pkg/unittest/lib/unittest.dart';
8 import 'event_helper.dart';
9
10 testSupercedeStream() {
11 { // Simple case of superceding lower priority streams.
12 StreamController s1 = new StreamController();
13 StreamController s2 = new StreamController();
14 StreamController s3 = new StreamController();
15 Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
16 Events expected = new Events()..add(1)..add(2)..add(3)..add(4)..close();
17 Events actual = new Events.capture(merge);
18 s1.add(1);
19 s2.add(2);
20 s1.add(1); // Ignored.
21 s2.add(3);
22 s3.add(4);
23 s2.add(3); // Ignored.
24 s3.close();
25 Expect.listEquals(expected.events, actual.events);
26 }
27
28 { // Superceding more than one stream at a time.
29 StreamController s1 = new StreamController();
30 StreamController s2 = new StreamController();
31 StreamController s3 = new StreamController();
32 Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
33 Events expected = new Events()..add(1)..add(2)..close();
34 Events actual = new Events.capture(merge);
35 s1.add(1);
36 s3.add(2);
37 s1.add(1); // Ignored.
38 s2.add(1); // Ignored.
39 s3.close();
40 Expect.listEquals(expected.events, actual.events);
41 }
42
43 { // Closing a stream before superceding it.
44 StreamController s1 = new StreamController();
45 StreamController s2 = new StreamController();
46 StreamController s3 = new StreamController();
47 Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
48 Events expected = new Events()..add(1)..add(2)..add(3)..close();
49 Events actual = new Events.capture(merge);
50 s1.add(1);
51 s1.close();
52 s3.close();
53 s2.add(2);
54 s2.add(3);
55 s2.close();
56 Expect.listEquals(expected.events, actual.events);
57 }
58
59 { // Errors from all non-superceded streams are forwarded.
60 StreamController s1 = new StreamController();
61 StreamController s2 = new StreamController();
62 StreamController s3 = new StreamController();
63 Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
64 Events expected =
65 new Events()..add(1)..error("1")..error("2")..error("3")
66 ..add(3)..error("6")..add(4)..close();
67 Events actual = new Events.capture(merge);
68 s1.add(1);
69 s1.signalError(new AsyncError("1"));
70 s2.signalError(new AsyncError("2"));
71 s3.signalError(new AsyncError("3"));
72 s3.add(3);
73 s1.signalError(new AsyncError("4"));
74 s2.signalError(new AsyncError("5"));
75 s3.signalError(new AsyncError("6"));
76 s1.close();
77 s2.close();
78 s3.add(4);
79 s3.close();
80 Expect.listEquals(expected.events, actual.events);
81 }
82
83 test("Pausing on a superceding stream", () {
84 StreamController s1 = new StreamController();
85 StreamController s2 = new StreamController();
86 StreamController s3 = new StreamController();
87 Stream merge = new Stream.superceding([s1.stream, s2.stream, s3.stream]);
88 Events expected = new Events()..add(1)..add(2)..add(3);
89 Events actual = new Events.capture(merge);
90 s1.add(1);
91 s2.add(2);
92 s2.add(3);
93 Expect.listEquals(expected.events, actual.events);
94 actual.pause(); // Pauses the stream that feeds the actual Events.
95 Events expected2 = expected.copy();
96 expected..add(5)..add(6)..close();
97 expected2..add(6)..close();
98 s1.add(4);
99 s2.add(5); // May or may not arrive before '6' when resuming.
100 s3.add(6);
101 s3.close();
102 actual.onDone(expectAsync0(() {
103 if (expected.events.length == actual.events.length) {
104 Expect.listEquals(expected.events, actual.events);
105 } else {
106 Expect.listEquals(expected2.events, actual.events);
107 }
108 }));
109 actual.resume();
110 });
111 }
112
113 void testCyclicStream() {
114 test("Simple case of superceding lower priority streams", () {
115 StreamController s1 = new StreamController();
116 StreamController s2 = new StreamController();
117 StreamController s3 = new StreamController();
118 Stream merge = new Stream.cyclic([s1.stream, s2.stream, s3.stream]);
119 Events expected =
120 new Events()..add(1)..add(2)..add(3)..add(4)..add(5)..add(6)..close();
121 Events actual = new Events.capture(merge);
122 Expect.isFalse(s1.isPaused);
123 Expect.isTrue(s2.isPaused);
124 Expect.isTrue(s3.isPaused);
125 s3.add(3);
126 s1.add(1);
127 s1.add(4);
128 s1.add(6);
129 s1.close();
130 s2.add(2);
131 s2.add(5);
132 s2.close();
133 s3.close();
134 actual.onDone(expectAsync0(() {
135 Expect.listEquals(expected.events, actual.events);
136 }));
137 });
138
139 test("Cyclic merge with errors", () {
140 StreamController s1 = new StreamController();
141 StreamController s2 = new StreamController();
142 StreamController s3 = new StreamController();
143 Stream merge = new Stream.cyclic([s1.stream, s2.stream, s3.stream]);
144 Events expected =
145 new Events()..add(1)..error("1")..add(2)..add(3)..error("2")
146 ..add(4)..add(5)..error("3")..add(6)..close();
147 Events actual = new Events.capture(merge);
148 Expect.isFalse(s1.isPaused);
149 Expect.isTrue(s2.isPaused);
150 Expect.isTrue(s3.isPaused);
151 s3.add(3);
152 s3.signalError(new AsyncError("3")); // Error just before a "done".
153 s1.add(1);
154 s1.signalError(new AsyncError("2")); // Error between events.
155 s1.add(4);
156 s1.add(6);
157 s1.close();
158 s2.signalError(new AsyncError("1")); // Error as first event.
159 s2.add(2);
160 s2.add(5);
161 s2.close();
162 s3.close();
163 actual.onDone(expectAsync0(() {
164 Expect.listEquals(expected.events, actual.events);
165 }));
166 });
167 }
168
169 main() {
170 testSupercedeStream();
171 testCyclicStream();
172 }
OLDNEW
« no previous file with comments | « tests/lib/async/future_test.dart ('k') | tests/lib/async/slow_consumer2_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698