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

Side by Side Diff: third_party/WebKit/LayoutTests/external/wpt/streams/resources/rs-test-templates.js

Issue 2642393002: Import wpt@40665266227e475bc4a56884247d8c09d78dfb6a (Closed)
Patch Set: rebaseline-cl Created 3 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
OLDNEW
1 'use strict'; 1 'use strict';
2 2
3 // These tests can be run against any readable stream produced by the web platfo rm that meets the given descriptions. 3 // These tests can be run against any readable stream produced by the web platfo rm that meets the given descriptions.
4 // For readable stream tests, the factory should return the stream. For reader t ests, the factory should return a 4 // For readable stream tests, the factory should return the stream. For reader t ests, the factory should return a
5 // { stream, reader } object. (You can use this to vary the time at which you ac quire a reader.) 5 // { stream, reader } object. (You can use this to vary the time at which you ac quire a reader.)
6 6
7 self.templatedRSEmpty = (label, factory) => { 7 self.templatedRSEmpty = (label, factory) => {
8 test(() => {}, 'Running templatedRSEmpty with ' + label); 8 test(() => {}, 'Running templatedRSEmpty with ' + label);
9 9
10 test(() => { 10 test(() => {
11 11
12 const rs = factory(); 12 const rs = factory();
13 13
14 assert_equals(typeof rs.locked, 'boolean', 'has a boolean locked getter'); 14 assert_equals(typeof rs.locked, 'boolean', 'has a boolean locked getter');
15 assert_equals(typeof rs.cancel, 'function', 'has a cancel method'); 15 assert_equals(typeof rs.cancel, 'function', 'has a cancel method');
16 assert_equals(typeof rs.getReader, 'function', 'has a getReader method'); 16 assert_equals(typeof rs.getReader, 'function', 'has a getReader method');
17 assert_equals(typeof rs.pipeThrough, 'function', 'has a pipeThrough method') ; 17 assert_equals(typeof rs.pipeThrough, 'function', 'has a pipeThrough method') ;
18 assert_equals(typeof rs.pipeTo, 'function', 'has a pipeTo method'); 18 assert_equals(typeof rs.pipeTo, 'function', 'has a pipeTo method');
19 assert_equals(typeof rs.tee, 'function', 'has a tee method'); 19 assert_equals(typeof rs.tee, 'function', 'has a tee method');
20 20
21 }, 'instances have the correct methods and properties'); 21 }, label + ': instances have the correct methods and properties');
22 22
23 test(() => { 23 test(() => {
24 const rs = factory(); 24 const rs = factory();
25 25
26 assert_throws(new RangeError(), () => rs.getReader({ mode: '' }), 'empty str ing mode should throw'); 26 assert_throws(new RangeError(), () => rs.getReader({ mode: '' }), 'empty str ing mode should throw');
27 assert_throws(new RangeError(), () => rs.getReader({ mode: null }), 'null mo de should throw'); 27 assert_throws(new RangeError(), () => rs.getReader({ mode: null }), 'null mo de should throw');
28 assert_throws(new RangeError(), () => rs.getReader({ mode: 'asdf' }), 'asdf mode should throw'); 28 assert_throws(new RangeError(), () => rs.getReader({ mode: 'asdf' }), 'asdf mode should throw');
29 assert_throws(new TypeError(), () => rs.getReader(null), 'null should throw' ); 29 assert_throws(new TypeError(), () => rs.getReader(null), 'null should throw' );
30 30
31 }, 'calling getReader with invalid arguments should throw appropriate errors') ; 31 }, label + ': calling getReader with invalid arguments should throw appropriat e errors');
32 }; 32 };
33 33
34 self.templatedRSClosed = (label, factory) => { 34 self.templatedRSClosed = (label, factory) => {
35 test(() => {}, 'Running templatedRSClosed with ' + label); 35 test(() => {}, 'Running templatedRSClosed with ' + label);
36 36
37 promise_test(() => { 37 promise_test(() => {
38 38
39 const rs = factory(); 39 const rs = factory();
40 const cancelPromise1 = rs.cancel(); 40 const cancelPromise1 = rs.cancel();
41 const cancelPromise2 = rs.cancel(); 41 const cancelPromise2 = rs.cancel();
42 42
43 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises'); 43 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
44 44
45 return Promise.all([ 45 return Promise.all([
46 cancelPromise1.then(v => assert_equals(v, undefined, 'first cancel() call should fulfill with undefined')), 46 cancelPromise1.then(v => assert_equals(v, undefined, 'first cancel() call should fulfill with undefined')),
47 cancelPromise2.then(v => assert_equals(v, undefined, 'second cancel() call should fulfill with undefined')) 47 cancelPromise2.then(v => assert_equals(v, undefined, 'second cancel() call should fulfill with undefined'))
48 ]); 48 ]);
49 49
50 }, 'cancel() should return a distinct fulfilled promise each time'); 50 }, label + ': cancel() should return a distinct fulfilled promise each time');
51 51
52 test(() => { 52 test(() => {
53 53
54 const rs = factory(); 54 const rs = factory();
55 assert_false(rs.locked, 'locked getter should return false'); 55 assert_false(rs.locked, 'locked getter should return false');
56 56
57 }, 'locked should be false'); 57 }, label + ': locked should be false');
58 58
59 test(() => { 59 test(() => {
60 60
61 const rs = factory(); 61 const rs = factory();
62 rs.getReader(); // getReader() should not throw. 62 rs.getReader(); // getReader() should not throw.
63 63
64 }, 'getReader() should be OK'); 64 }, label + ': getReader() should be OK');
65 65
66 test(() => { 66 test(() => {
67 67
68 const rs = factory(); 68 const rs = factory();
69 69
70 const reader = rs.getReader(); 70 const reader = rs.getReader();
71 reader.releaseLock(); 71 reader.releaseLock();
72 72
73 const reader2 = rs.getReader(); // Getting a second reader should not throw. 73 const reader2 = rs.getReader(); // Getting a second reader should not throw.
74 reader2.releaseLock(); 74 reader2.releaseLock();
75 75
76 rs.getReader(); // Getting a third reader should not throw. 76 rs.getReader(); // Getting a third reader should not throw.
77 77
78 }, 'should be able to acquire multiple readers if they are released in success ion'); 78 }, label + ': should be able to acquire multiple readers if they are released in succession');
79 79
80 test(() => { 80 test(() => {
81 81
82 const rs = factory(); 82 const rs = factory();
83 83
84 rs.getReader(); 84 rs.getReader();
85 85
86 assert_throws(new TypeError(), () => rs.getReader(), 'getting a second reade r should throw'); 86 assert_throws(new TypeError(), () => rs.getReader(), 'getting a second reade r should throw');
87 assert_throws(new TypeError(), () => rs.getReader(), 'getting a third reader should throw'); 87 assert_throws(new TypeError(), () => rs.getReader(), 'getting a third reader should throw');
88 88
89 }, 'should not be able to acquire a second reader if we don\'t release the fir st one'); 89 }, label + ': should not be able to acquire a second reader if we don\'t relea se the first one');
90 }; 90 };
91 91
92 self.templatedRSErrored = (label, factory, error) => { 92 self.templatedRSErrored = (label, factory, error) => {
93 test(() => {}, 'Running templatedRSErrored with ' + label); 93 test(() => {}, 'Running templatedRSErrored with ' + label);
94 94
95 promise_test(t => { 95 promise_test(t => {
96 96
97 const rs = factory(); 97 const rs = factory();
98 const reader = rs.getReader(); 98 const reader = rs.getReader();
99 99
100 return Promise.all([ 100 return Promise.all([
101 promise_rejects(t, error, reader.closed), 101 promise_rejects(t, error, reader.closed),
102 promise_rejects(t, error, reader.read()) 102 promise_rejects(t, error, reader.read())
103 ]); 103 ]);
104 104
105 }, 'getReader() should return a reader that acts errored'); 105 }, label + ': getReader() should return a reader that acts errored');
106 106
107 promise_test(t => { 107 promise_test(t => {
108 108
109 const rs = factory(); 109 const rs = factory();
110 const reader = rs.getReader(); 110 const reader = rs.getReader();
111 111
112 return Promise.all([ 112 return Promise.all([
113 promise_rejects(t, error, reader.read()), 113 promise_rejects(t, error, reader.read()),
114 promise_rejects(t, error, reader.read()), 114 promise_rejects(t, error, reader.read()),
115 promise_rejects(t, error, reader.closed) 115 promise_rejects(t, error, reader.closed)
116 ]); 116 ]);
117 117
118 }, 'read() twice should give the error each time'); 118 }, label + ': read() twice should give the error each time');
119 119
120 test(() => { 120 test(() => {
121 const rs = factory(); 121 const rs = factory();
122 122
123 assert_false(rs.locked, 'locked getter should return false'); 123 assert_false(rs.locked, 'locked getter should return false');
124 }, 'locked should be false'); 124 }, label + ': locked should be false');
125 }; 125 };
126 126
127 self.templatedRSErroredSyncOnly = (label, factory, error) => { 127 self.templatedRSErroredSyncOnly = (label, factory, error) => {
128 test(() => {}, 'Running templatedRSErroredSyncOnly with ' + label); 128 test(() => {}, 'Running templatedRSErroredSyncOnly with ' + label);
129 129
130 promise_test(t => { 130 promise_test(t => {
131 131
132 const rs = factory(); 132 const rs = factory();
133 rs.getReader().releaseLock(); 133 rs.getReader().releaseLock();
134 const reader = rs.getReader(); // Calling getReader() twice does not throw ( the stream is not locked). 134 const reader = rs.getReader(); // Calling getReader() twice does not throw ( the stream is not locked).
135 135
136 return promise_rejects(t, error, reader.closed); 136 return promise_rejects(t, error, reader.closed);
137 137
138 }, 'should be able to obtain a second reader, with the correct closed promise' ); 138 }, label + ': should be able to obtain a second reader, with the correct close d promise');
139 139
140 test(() => { 140 test(() => {
141 141
142 const rs = factory(); 142 const rs = factory();
143 rs.getReader(); 143 rs.getReader();
144 144
145 assert_throws(new TypeError(), () => rs.getReader(), 'getting a second reade r should throw a TypeError'); 145 assert_throws(new TypeError(), () => rs.getReader(), 'getting a second reade r should throw a TypeError');
146 assert_throws(new TypeError(), () => rs.getReader(), 'getting a third reader should throw a TypeError'); 146 assert_throws(new TypeError(), () => rs.getReader(), 'getting a third reader should throw a TypeError');
147 147
148 }, 'should not be able to obtain additional readers if we don\'t release the f irst lock'); 148 }, label + ': should not be able to obtain additional readers if we don\'t rel ease the first lock');
149 149
150 promise_test(t => { 150 promise_test(t => {
151 151
152 const rs = factory(); 152 const rs = factory();
153 const cancelPromise1 = rs.cancel(); 153 const cancelPromise1 = rs.cancel();
154 const cancelPromise2 = rs.cancel(); 154 const cancelPromise2 = rs.cancel();
155 155
156 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises'); 156 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
157 157
158 return Promise.all([ 158 return Promise.all([
159 promise_rejects(t, error, cancelPromise1), 159 promise_rejects(t, error, cancelPromise1),
160 promise_rejects(t, error, cancelPromise2) 160 promise_rejects(t, error, cancelPromise2)
161 ]); 161 ]);
162 162
163 }, 'cancel() should return a distinct rejected promise each time'); 163 }, label + ': cancel() should return a distinct rejected promise each time');
164 164
165 promise_test(t => { 165 promise_test(t => {
166 166
167 const rs = factory(); 167 const rs = factory();
168 const reader = rs.getReader(); 168 const reader = rs.getReader();
169 const cancelPromise1 = reader.cancel(); 169 const cancelPromise1 = reader.cancel();
170 const cancelPromise2 = reader.cancel(); 170 const cancelPromise2 = reader.cancel();
171 171
172 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises'); 172 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
173 173
174 return Promise.all([ 174 return Promise.all([
175 promise_rejects(t, error, cancelPromise1), 175 promise_rejects(t, error, cancelPromise1),
176 promise_rejects(t, error, cancelPromise2) 176 promise_rejects(t, error, cancelPromise2)
177 ]); 177 ]);
178 178
179 }, 'reader cancel() should return a distinct rejected promise each time'); 179 }, label + ': reader cancel() should return a distinct rejected promise each t ime');
180 }; 180 };
181 181
182 self.templatedRSEmptyReader = (label, factory) => { 182 self.templatedRSEmptyReader = (label, factory) => {
183 test(() => {}, 'Running templatedRSEmptyReader with ' + label); 183 test(() => {}, 'Running templatedRSEmptyReader with ' + label);
184 184
185 test(() => { 185 test(() => {
186 186
187 const reader = factory().reader; 187 const reader = factory().reader;
188 188
189 assert_true('closed' in reader, 'has a closed property'); 189 assert_true('closed' in reader, 'has a closed property');
190 assert_equals(typeof reader.closed.then, 'function', 'closed property is the nable'); 190 assert_equals(typeof reader.closed.then, 'function', 'closed property is the nable');
191 191
192 assert_equals(typeof reader.cancel, 'function', 'has a cancel method'); 192 assert_equals(typeof reader.cancel, 'function', 'has a cancel method');
193 assert_equals(typeof reader.read, 'function', 'has a read method'); 193 assert_equals(typeof reader.read, 'function', 'has a read method');
194 assert_equals(typeof reader.releaseLock, 'function', 'has a releaseLock meth od'); 194 assert_equals(typeof reader.releaseLock, 'function', 'has a releaseLock meth od');
195 195
196 }, 'instances have the correct methods and properties'); 196 }, label + ': instances have the correct methods and properties');
197 197
198 test(() => { 198 test(() => {
199 199
200 const stream = factory().stream; 200 const stream = factory().stream;
201 201
202 assert_true(stream.locked, 'locked getter should return true'); 202 assert_true(stream.locked, 'locked getter should return true');
203 203
204 }, 'locked should be true'); 204 }, label + ': locked should be true');
205 205
206 promise_test(t => { 206 promise_test(t => {
207 207
208 const reader = factory().reader; 208 const reader = factory().reader;
209 209
210 reader.read().then( 210 reader.read().then(
211 t.unreached_func('read() should not fulfill'), 211 t.unreached_func('read() should not fulfill'),
212 t.unreached_func('read() should not reject') 212 t.unreached_func('read() should not reject')
213 ); 213 );
214 214
215 return delay(500); 215 return delay(500);
216 216
217 }, 'read() should never settle'); 217 }, label + ': read() should never settle');
218 218
219 promise_test(t => { 219 promise_test(t => {
220 220
221 const reader = factory().reader; 221 const reader = factory().reader;
222 222
223 reader.read().then( 223 reader.read().then(
224 t.unreached_func('read() should not fulfill'), 224 t.unreached_func('read() should not fulfill'),
225 t.unreached_func('read() should not reject') 225 t.unreached_func('read() should not reject')
226 ); 226 );
227 227
228 reader.read().then( 228 reader.read().then(
229 t.unreached_func('read() should not fulfill'), 229 t.unreached_func('read() should not fulfill'),
230 t.unreached_func('read() should not reject') 230 t.unreached_func('read() should not reject')
231 ); 231 );
232 232
233 return delay(500); 233 return delay(500);
234 234
235 }, 'two read()s should both never settle'); 235 }, label + ': two read()s should both never settle');
236 236
237 test(() => { 237 test(() => {
238 238
239 const reader = factory().reader; 239 const reader = factory().reader;
240 assert_not_equals(reader.read(), reader.read(), 'the promises returned shoul d be distinct'); 240 assert_not_equals(reader.read(), reader.read(), 'the promises returned shoul d be distinct');
241 241
242 }, 'read() should return distinct promises each time'); 242 }, label + ': read() should return distinct promises each time');
243 243
244 test(() => { 244 test(() => {
245 245
246 const stream = factory().stream; 246 const stream = factory().stream;
247 assert_throws(new TypeError(), () => stream.getReader(), 'stream.getReader() should throw a TypeError'); 247 assert_throws(new TypeError(), () => stream.getReader(), 'stream.getReader() should throw a TypeError');
248 248
249 }, 'getReader() again on the stream should fail'); 249 }, label + ': getReader() again on the stream should fail');
250 250
251 promise_test(t => { 251 promise_test(t => {
252 252
253 const streamAndReader = factory(); 253 const streamAndReader = factory();
254 const stream = streamAndReader.stream; 254 const stream = streamAndReader.stream;
255 const reader = streamAndReader.reader; 255 const reader = streamAndReader.reader;
256 256
257 reader.read().then( 257 reader.read().then(
258 t.unreached_func('first read() should not fulfill'), 258 t.unreached_func('first read() should not fulfill'),
259 t.unreached_func('first read() should not reject') 259 t.unreached_func('first read() should not reject')
260 ); 260 );
261 261
262 reader.read().then( 262 reader.read().then(
263 t.unreached_func('second read() should not fulfill'), 263 t.unreached_func('second read() should not fulfill'),
264 t.unreached_func('second read() should not reject') 264 t.unreached_func('second read() should not reject')
265 ); 265 );
266 266
267 reader.closed.then( 267 reader.closed.then(
268 t.unreached_func('closed should not fulfill'), 268 t.unreached_func('closed should not fulfill'),
269 t.unreached_func('closed should not reject') 269 t.unreached_func('closed should not reject')
270 ); 270 );
271 271
272 assert_throws(new TypeError(), () => reader.releaseLock(), 'releaseLock shou ld throw a TypeError'); 272 assert_throws(new TypeError(), () => reader.releaseLock(), 'releaseLock shou ld throw a TypeError');
273 273
274 assert_true(stream.locked, 'the stream should still be locked'); 274 assert_true(stream.locked, 'the stream should still be locked');
275 275
276 return delay(500); 276 return delay(500);
277 277
278 }, 'releasing the lock with pending read requests should throw but the read re quests should stay pending'); 278 }, label + ': releasing the lock with pending read requests should throw but t he read requests should stay pending');
279 279
280 promise_test(t => { 280 promise_test(t => {
281 281
282 const reader = factory().reader; 282 const reader = factory().reader;
283 reader.releaseLock(); 283 reader.releaseLock();
284 284
285 return Promise.all([ 285 return Promise.all([
286 promise_rejects(t, new TypeError(), reader.read()), 286 promise_rejects(t, new TypeError(), reader.read()),
287 promise_rejects(t, new TypeError(), reader.read()) 287 promise_rejects(t, new TypeError(), reader.read())
288 ]); 288 ]);
289 289
290 }, 'releasing the lock should cause further read() calls to reject with a Type Error'); 290 }, label + ': releasing the lock should cause further read() calls to reject w ith a TypeError');
291 291
292 promise_test(t => { 292 promise_test(t => {
293 293
294 const reader = factory().reader; 294 const reader = factory().reader;
295 295
296 const closedBefore = reader.closed; 296 const closedBefore = reader.closed;
297 reader.releaseLock(); 297 reader.releaseLock();
298 const closedAfter = reader.closed; 298 const closedAfter = reader.closed;
299 299
300 assert_equals(closedBefore, closedAfter, 'the closed promise should not chan ge identity'); 300 assert_equals(closedBefore, closedAfter, 'the closed promise should not chan ge identity');
301 301
302 return promise_rejects(t, new TypeError(), closedBefore); 302 return promise_rejects(t, new TypeError(), closedBefore);
303 303
304 }, 'releasing the lock should cause closed calls to reject with a TypeError'); 304 }, label + ': releasing the lock should cause closed calls to reject with a Ty peError');
305 305
306 test(() => { 306 test(() => {
307 307
308 const streamAndReader = factory(); 308 const streamAndReader = factory();
309 const stream = streamAndReader.stream; 309 const stream = streamAndReader.stream;
310 const reader = streamAndReader.reader; 310 const reader = streamAndReader.reader;
311 311
312 reader.releaseLock(); 312 reader.releaseLock();
313 assert_false(stream.locked, 'locked getter should return false'); 313 assert_false(stream.locked, 'locked getter should return false');
314 314
315 }, 'releasing the lock should cause locked to become false'); 315 }, label + ': releasing the lock should cause locked to become false');
316 316
317 promise_test(() => { 317 promise_test(() => {
318 318
319 const reader = factory().reader; 319 const reader = factory().reader;
320 reader.cancel(); 320 reader.cancel();
321 321
322 return reader.read().then(r => { 322 return reader.read().then(r => {
323 assert_object_equals(r, { value: undefined, done: true }, 'read()ing from the reader should give a done result'); 323 assert_object_equals(r, { value: undefined, done: true }, 'read()ing from the reader should give a done result');
324 }); 324 });
325 325
326 }, 'canceling via the reader should cause the reader to act closed'); 326 }, label + ': canceling via the reader should cause the reader to act closed') ;
327 327
328 promise_test(t => { 328 promise_test(t => {
329 329
330 const stream = factory().stream; 330 const stream = factory().stream;
331 return promise_rejects(t, new TypeError(), stream.cancel()); 331 return promise_rejects(t, new TypeError(), stream.cancel());
332 332
333 }, 'canceling via the stream should fail'); 333 }, label + ': canceling via the stream should fail');
334 }; 334 };
335 335
336 self.templatedRSClosedReader = (label, factory) => { 336 self.templatedRSClosedReader = (label, factory) => {
337 test(() => {}, 'Running templatedRSClosedReader with ' + label); 337 test(() => {}, 'Running templatedRSClosedReader with ' + label);
338 338
339 promise_test(() => { 339 promise_test(() => {
340 340
341 const reader = factory().reader; 341 const reader = factory().reader;
342 342
343 return reader.read().then(v => { 343 return reader.read().then(v => {
344 assert_object_equals(v, { value: undefined, done: true }, 'read() should f ulfill correctly'); 344 assert_object_equals(v, { value: undefined, done: true }, 'read() should f ulfill correctly');
345 }); 345 });
346 346
347 }, 'read() should fulfill with { value: undefined, done: true }'); 347 }, label + ': read() should fulfill with { value: undefined, done: true }');
348 348
349 promise_test(() => { 349 promise_test(() => {
350 350
351 const reader = factory().reader; 351 const reader = factory().reader;
352 352
353 return Promise.all([ 353 return Promise.all([
354 reader.read().then(v => { 354 reader.read().then(v => {
355 assert_object_equals(v, { value: undefined, done: true }, 'read() should fulfill correctly'); 355 assert_object_equals(v, { value: undefined, done: true }, 'read() should fulfill correctly');
356 }), 356 }),
357 reader.read().then(v => { 357 reader.read().then(v => {
358 assert_object_equals(v, { value: undefined, done: true }, 'read() should fulfill correctly'); 358 assert_object_equals(v, { value: undefined, done: true }, 'read() should fulfill correctly');
359 }) 359 })
360 ]); 360 ]);
361 361
362 }, 'read() multiple times should fulfill with { value: undefined, done: true } '); 362 }, label + ': read() multiple times should fulfill with { value: undefined, do ne: true }');
363 363
364 promise_test(() => { 364 promise_test(() => {
365 365
366 const reader = factory().reader; 366 const reader = factory().reader;
367 367
368 return reader.read().then(() => reader.read()).then(v => { 368 return reader.read().then(() => reader.read()).then(v => {
369 assert_object_equals(v, { value: undefined, done: true }, 'read() should f ulfill correctly'); 369 assert_object_equals(v, { value: undefined, done: true }, 'read() should f ulfill correctly');
370 }); 370 });
371 371
372 }, 'read() should work when used within another read() fulfill callback'); 372 }, label + ': read() should work when used within another read() fulfill callb ack');
373 373
374 promise_test(() => { 374 promise_test(() => {
375 375
376 const reader = factory().reader; 376 const reader = factory().reader;
377 377
378 return reader.closed.then(v => assert_equals(v, undefined, 'reader closed sh ould fulfill with undefined')); 378 return reader.closed.then(v => assert_equals(v, undefined, 'reader closed sh ould fulfill with undefined'));
379 379
380 }, 'closed should fulfill with undefined'); 380 }, label + ': closed should fulfill with undefined');
381 381
382 promise_test(t => { 382 promise_test(t => {
383 383
384 const reader = factory().reader; 384 const reader = factory().reader;
385 385
386 const closedBefore = reader.closed; 386 const closedBefore = reader.closed;
387 reader.releaseLock(); 387 reader.releaseLock();
388 const closedAfter = reader.closed; 388 const closedAfter = reader.closed;
389 389
390 assert_not_equals(closedBefore, closedAfter, 'the closed promise should chan ge identity'); 390 assert_not_equals(closedBefore, closedAfter, 'the closed promise should chan ge identity');
391 391
392 return Promise.all([ 392 return Promise.all([
393 closedBefore.then(v => assert_equals(v, undefined, 'reader.closed acquired before release should fulfill')), 393 closedBefore.then(v => assert_equals(v, undefined, 'reader.closed acquired before release should fulfill')),
394 promise_rejects(t, new TypeError(), closedAfter) 394 promise_rejects(t, new TypeError(), closedAfter)
395 ]); 395 ]);
396 396
397 }, 'releasing the lock should cause closed to reject and change identity'); 397 }, label + ': releasing the lock should cause closed to reject and change iden tity');
398 398
399 promise_test(() => { 399 promise_test(() => {
400 400
401 const reader = factory().reader; 401 const reader = factory().reader;
402 const cancelPromise1 = reader.cancel(); 402 const cancelPromise1 = reader.cancel();
403 const cancelPromise2 = reader.cancel(); 403 const cancelPromise2 = reader.cancel();
404 const closedReaderPromise = reader.closed; 404 const closedReaderPromise = reader.closed;
405 405
406 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises'); 406 assert_not_equals(cancelPromise1, cancelPromise2, 'cancel() calls should ret urn distinct promises');
407 assert_not_equals(cancelPromise1, closedReaderPromise, 'cancel() promise 1 s hould be distinct from reader.closed'); 407 assert_not_equals(cancelPromise1, closedReaderPromise, 'cancel() promise 1 s hould be distinct from reader.closed');
408 assert_not_equals(cancelPromise2, closedReaderPromise, 'cancel() promise 2 s hould be distinct from reader.closed'); 408 assert_not_equals(cancelPromise2, closedReaderPromise, 'cancel() promise 2 s hould be distinct from reader.closed');
409 409
410 return Promise.all([ 410 return Promise.all([
411 cancelPromise1.then(v => assert_equals(v, undefined, 'first cancel() shoul d fulfill with undefined')), 411 cancelPromise1.then(v => assert_equals(v, undefined, 'first cancel() shoul d fulfill with undefined')),
412 cancelPromise2.then(v => assert_equals(v, undefined, 'second cancel() shou ld fulfill with undefined')) 412 cancelPromise2.then(v => assert_equals(v, undefined, 'second cancel() shou ld fulfill with undefined'))
413 ]); 413 ]);
414 414
415 }, 'cancel() should return a distinct fulfilled promise each time'); 415 }, label + ': cancel() should return a distinct fulfilled promise each time');
416 }; 416 };
417 417
418 self.templatedRSErroredReader = (label, factory, error) => { 418 self.templatedRSErroredReader = (label, factory, error) => {
419 test(() => {}, 'Running templatedRSErroredReader with ' + label); 419 test(() => {}, 'Running templatedRSErroredReader with ' + label);
420 420
421 promise_test(t => { 421 promise_test(t => {
422 422
423 const reader = factory().reader; 423 const reader = factory().reader;
424 return promise_rejects(t, error, reader.closed); 424 return promise_rejects(t, error, reader.closed);
425 425
426 }, 'closed should reject with the error'); 426 }, label + ': closed should reject with the error');
427 427
428 promise_test(t => { 428 promise_test(t => {
429 429
430 const reader = factory().reader; 430 const reader = factory().reader;
431 const closedBefore = reader.closed; 431 const closedBefore = reader.closed;
432 432
433 return promise_rejects(t, error, closedBefore).then(() => { 433 return promise_rejects(t, error, closedBefore).then(() => {
434 reader.releaseLock(); 434 reader.releaseLock();
435 435
436 const closedAfter = reader.closed; 436 const closedAfter = reader.closed;
437 assert_not_equals(closedBefore, closedAfter, 'the closed promise should ch ange identity'); 437 assert_not_equals(closedBefore, closedAfter, 'the closed promise should ch ange identity');
438 438
439 return promise_rejects(t, new TypeError(), closedAfter); 439 return promise_rejects(t, new TypeError(), closedAfter);
440 }); 440 });
441 441
442 }, 'releasing the lock should cause closed to reject and change identity'); 442 }, label + ': releasing the lock should cause closed to reject and change iden tity');
443 443
444 promise_test(t => { 444 promise_test(t => {
445 445
446 const reader = factory().reader; 446 const reader = factory().reader;
447 return promise_rejects(t, error, reader.read()); 447 return promise_rejects(t, error, reader.read());
448 448
449 }, 'read() should reject with the error'); 449 }, label + ': read() should reject with the error');
450 }; 450 };
451 451
452 self.templatedRSTwoChunksOpenReader = (label, factory, chunks) => { 452 self.templatedRSTwoChunksOpenReader = (label, factory, chunks) => {
453 test(() => {}, 'Running templatedRSTwoChunksOpenReader with ' + label); 453 test(() => {}, 'Running templatedRSTwoChunksOpenReader with ' + label);
454 454
455 promise_test(() => { 455 promise_test(() => {
456 456
457 const reader = factory().reader; 457 const reader = factory().reader;
458 458
459 return Promise.all([ 459 return Promise.all([
460 reader.read().then(r => { 460 reader.read().then(r => {
461 assert_object_equals(r, { value: chunks[0], done: false }, 'first result should be correct'); 461 assert_object_equals(r, { value: chunks[0], done: false }, 'first result should be correct');
462 }), 462 }),
463 reader.read().then(r => { 463 reader.read().then(r => {
464 assert_object_equals(r, { value: chunks[1], done: false }, 'second resul t should be correct'); 464 assert_object_equals(r, { value: chunks[1], done: false }, 'second resul t should be correct');
465 }) 465 })
466 ]); 466 ]);
467 467
468 }, 'calling read() twice without waiting will eventually give both chunks (seq uential)'); 468 }, label + ': calling read() twice without waiting will eventually give both c hunks (sequential)');
469 469
470 promise_test(() => { 470 promise_test(() => {
471 471
472 const reader = factory().reader; 472 const reader = factory().reader;
473 473
474 return reader.read().then(r => { 474 return reader.read().then(r => {
475 assert_object_equals(r, { value: chunks[0], done: false }, 'first result s hould be correct'); 475 assert_object_equals(r, { value: chunks[0], done: false }, 'first result s hould be correct');
476 476
477 return reader.read().then(r2 => { 477 return reader.read().then(r2 => {
478 assert_object_equals(r2, { value: chunks[1], done: false }, 'second resu lt should be correct'); 478 assert_object_equals(r2, { value: chunks[1], done: false }, 'second resu lt should be correct');
479 }); 479 });
480 }); 480 });
481 481
482 }, 'calling read() twice without waiting will eventually give both chunks (nes ted)'); 482 }, label + ': calling read() twice without waiting will eventually give both c hunks (nested)');
483 483
484 test(() => { 484 test(() => {
485 485
486 const reader = factory().reader; 486 const reader = factory().reader;
487 assert_not_equals(reader.read(), reader.read(), 'the promises returned shoul d be distinct'); 487 assert_not_equals(reader.read(), reader.read(), 'the promises returned shoul d be distinct');
488 488
489 }, 'read() should return distinct promises each time'); 489 }, label + ': read() should return distinct promises each time');
490 490
491 promise_test(() => { 491 promise_test(() => {
492 492
493 const reader = factory().reader; 493 const reader = factory().reader;
494 494
495 const promise1 = reader.closed.then(v => { 495 const promise1 = reader.closed.then(v => {
496 assert_equals(v, undefined, 'reader closed should fulfill with undefined') ; 496 assert_equals(v, undefined, 'reader closed should fulfill with undefined') ;
497 }); 497 });
498 498
499 const promise2 = reader.read().then(r => { 499 const promise2 = reader.read().then(r => {
500 assert_object_equals(r, { value: chunks[0], done: false }, 500 assert_object_equals(r, { value: chunks[0], done: false },
501 'promise returned before cancellation should fulfill with a chunk'); 501 'promise returned before cancellation should fulfill with a chunk');
502 }); 502 });
503 503
504 reader.cancel(); 504 reader.cancel();
505 505
506 const promise3 = reader.read().then(r => { 506 const promise3 = reader.read().then(r => {
507 assert_object_equals(r, { value: undefined, done: true }, 507 assert_object_equals(r, { value: undefined, done: true },
508 'promise returned after cancellation should fulfill w ith an end-of-stream signal'); 508 'promise returned after cancellation should fulfill w ith an end-of-stream signal');
509 }); 509 });
510 510
511 return Promise.all([promise1, promise2, promise3]); 511 return Promise.all([promise1, promise2, promise3]);
512 512
513 }, 'cancel() after a read() should still give that single read result'); 513 }, label + ': cancel() after a read() should still give that single read resul t');
514 }; 514 };
515 515
516 self.templatedRSTwoChunksClosedReader = function (label, factory, chunks) { 516 self.templatedRSTwoChunksClosedReader = function (label, factory, chunks) {
517 test(() => {}, 'Running templatedRSTwoChunksClosedReader with ' + label); 517 test(() => {}, 'Running templatedRSTwoChunksClosedReader with ' + label);
518 518
519 promise_test(() => { 519 promise_test(() => {
520 520
521 const reader = factory().reader; 521 const reader = factory().reader;
522 522
523 return Promise.all([ 523 return Promise.all([
524 reader.read().then(r => { 524 reader.read().then(r => {
525 assert_object_equals(r, { value: chunks[0], done: false }, 'first result should be correct'); 525 assert_object_equals(r, { value: chunks[0], done: false }, 'first result should be correct');
526 }), 526 }),
527 reader.read().then(r => { 527 reader.read().then(r => {
528 assert_object_equals(r, { value: chunks[1], done: false }, 'second resul t should be correct'); 528 assert_object_equals(r, { value: chunks[1], done: false }, 'second resul t should be correct');
529 }), 529 }),
530 reader.read().then(r => { 530 reader.read().then(r => {
531 assert_object_equals(r, { value: undefined, done: true }, 'third result should be correct'); 531 assert_object_equals(r, { value: undefined, done: true }, 'third result should be correct');
532 }) 532 })
533 ]); 533 ]);
534 534
535 }, 'third read(), without waiting, should give { value: undefined, done: true } (sequential)'); 535 }, label + ': third read(), without waiting, should give { value: undefined, d one: true } (sequential)');
536 536
537 promise_test(() => { 537 promise_test(() => {
538 538
539 const reader = factory().reader; 539 const reader = factory().reader;
540 540
541 return reader.read().then(r => { 541 return reader.read().then(r => {
542 assert_object_equals(r, { value: chunks[0], done: false }, 'first result s hould be correct'); 542 assert_object_equals(r, { value: chunks[0], done: false }, 'first result s hould be correct');
543 543
544 return reader.read().then(r2 => { 544 return reader.read().then(r2 => {
545 assert_object_equals(r2, { value: chunks[1], done: false }, 'second resu lt should be correct'); 545 assert_object_equals(r2, { value: chunks[1], done: false }, 'second resu lt should be correct');
546 546
547 return reader.read().then(r3 => { 547 return reader.read().then(r3 => {
548 assert_object_equals(r3, { value: undefined, done: true }, 'third resu lt should be correct'); 548 assert_object_equals(r3, { value: undefined, done: true }, 'third resu lt should be correct');
549 }); 549 });
550 }); 550 });
551 }); 551 });
552 552
553 }, 'third read(), without waiting, should give { value: undefined, done: true } (nested)'); 553 }, label + ': third read(), without waiting, should give { value: undefined, d one: true } (nested)');
554 554
555 promise_test(() => { 555 promise_test(() => {
556 556
557 const streamAndReader = factory(); 557 const streamAndReader = factory();
558 const stream = streamAndReader.stream; 558 const stream = streamAndReader.stream;
559 const reader = streamAndReader.reader; 559 const reader = streamAndReader.reader;
560 560
561 assert_true(stream.locked, 'stream should start locked'); 561 assert_true(stream.locked, 'stream should start locked');
562 562
563 const promise = reader.closed.then(v => { 563 const promise = reader.closed.then(v => {
564 assert_equals(v, undefined, 'reader closed should fulfill with undefined') ; 564 assert_equals(v, undefined, 'reader closed should fulfill with undefined') ;
565 assert_true(stream.locked, 'stream should remain locked'); 565 assert_true(stream.locked, 'stream should remain locked');
566 }); 566 });
567 567
568 reader.read(); 568 reader.read();
569 reader.read(); 569 reader.read();
570 570
571 return promise; 571 return promise;
572 572
573 }, 'draining the stream via read() should cause the reader closed promise to f ulfill, but locked stays true'); 573 }, label +
574 ': draining the stream via read() should cause the reader closed promise to fulfill, but locked stays true');
574 575
575 promise_test(() => { 576 promise_test(() => {
576 577
577 const streamAndReader = factory(); 578 const streamAndReader = factory();
578 const stream = streamAndReader.stream; 579 const stream = streamAndReader.stream;
579 const reader = streamAndReader.reader; 580 const reader = streamAndReader.reader;
580 581
581 const promise = reader.closed.then(() => { 582 const promise = reader.closed.then(() => {
582 assert_true(stream.locked, 'the stream should start locked'); 583 assert_true(stream.locked, 'the stream should start locked');
583 reader.releaseLock(); // Releasing the lock after reader closed should not throw. 584 reader.releaseLock(); // Releasing the lock after reader closed should not throw.
584 assert_false(stream.locked, 'the stream should end unlocked'); 585 assert_false(stream.locked, 'the stream should end unlocked');
585 }); 586 });
586 587
587 reader.read(); 588 reader.read();
588 reader.read(); 589 reader.read();
589 590
590 return promise; 591 return promise;
591 592
592 }, 'releasing the lock after the stream is closed should cause locked to becom e false'); 593 }, label + ': releasing the lock after the stream is closed should cause locke d to become false');
593 594
594 promise_test(t => { 595 promise_test(t => {
595 596
596 const reader = factory().reader; 597 const reader = factory().reader;
597 598
598 reader.releaseLock(); 599 reader.releaseLock();
599 600
600 return Promise.all([ 601 return Promise.all([
601 promise_rejects(t, new TypeError(), reader.read()), 602 promise_rejects(t, new TypeError(), reader.read()),
602 promise_rejects(t, new TypeError(), reader.read()), 603 promise_rejects(t, new TypeError(), reader.read()),
603 promise_rejects(t, new TypeError(), reader.read()) 604 promise_rejects(t, new TypeError(), reader.read())
604 ]); 605 ]);
605 606
606 }, 'releasing the lock should cause further read() calls to reject with a Type Error'); 607 }, label + ': releasing the lock should cause further read() calls to reject w ith a TypeError');
607 608
608 promise_test(() => { 609 promise_test(() => {
609 610
610 const streamAndReader = factory(); 611 const streamAndReader = factory();
611 const stream = streamAndReader.stream; 612 const stream = streamAndReader.stream;
612 const reader = streamAndReader.reader; 613 const reader = streamAndReader.reader;
613 614
614 const readerClosed = reader.closed; 615 const readerClosed = reader.closed;
615 616
616 assert_equals(reader.closed, readerClosed, 'accessing reader.closed twice in succession gives the same value'); 617 assert_equals(reader.closed, readerClosed, 'accessing reader.closed twice in succession gives the same value');
617 618
618 const promise = reader.read().then(() => { 619 const promise = reader.read().then(() => {
619 assert_equals(reader.closed, readerClosed, 'reader.closed is the same afte r read() fulfills'); 620 assert_equals(reader.closed, readerClosed, 'reader.closed is the same afte r read() fulfills');
620 621
621 reader.releaseLock(); 622 reader.releaseLock();
622 623
623 assert_equals(reader.closed, readerClosed, 'reader.closed is the same afte r releasing the lock'); 624 assert_equals(reader.closed, readerClosed, 'reader.closed is the same afte r releasing the lock');
624 625
625 const newReader = stream.getReader(); 626 const newReader = stream.getReader();
626 return newReader.read(); 627 return newReader.read();
627 }); 628 });
628 629
629 assert_equals(reader.closed, readerClosed, 'reader.closed is the same after calling read()'); 630 assert_equals(reader.closed, readerClosed, 'reader.closed is the same after calling read()');
630 631
631 return promise; 632 return promise;
632 633
633 }, 'reader\'s closed property always returns the same promise'); 634 }, label + ': reader\'s closed property always returns the same promise');
634 }; 635 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698