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

Side by Side Diff: LayoutTests/http/tests/fetch/script-tests/stream-reader.js

Issue 837673002: Introduce ExclusiveStreamReader. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 10 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
(Empty)
1 if (self.importScripts) {
2 importScripts('/fetch/resources/fetch-test-helpers.js');
3 }
4
5 function read_until_end(reader) {
6 var chunks = [];
7 function rec(resolve, reject) {
8 while (reader.state === 'readable') {
9 chunks.push(reader.read());
10 }
11 if (reader.state === 'closed') {
12 resolve(chunks);
13 return;
14 }
15 if (reader.state === 'errored') {
16 resolve(reader.closed);
17 }
18 reader.ready.then(function() {
19 rec(resolve, reject);
20 }).catch(reject);
21 }
22 return new Promise(rec);
23 }
24
25 promise_test(function(t) {
26 return fetch('/fetch/resources/doctype.html').then(function(res) {
27 var stream = res.body;
28 var reader = stream.getReader();
29 assert_true(reader.isActive);
30 assert_throws({name: 'TypeError'}, function() { stream.getReader() });
31 reader.releaseLock();
32 stream.getReader();
tyoshino (SeeGerritForStatus) 2015/02/02 08:38:24 what is this getReader() call for?
yhirano 2015/02/02 10:21:20 For checking that an exception is not thrown. I ad
33 });
34 }, 'ExclusiveStreamReader acquisition / releasing');
35
36 promise_test(function(t) {
37 function wait_until_readable(reader) {
38 return reader.ready.then(function() {
39 if (reader.state === 'waiting') {
40 return wait_until_readable(reader);
41 }
42 if (reader.state === 'readable') {
43 return undefined;
44 }
45 return Promise.reject(new Error('state = ' + reader.state));
46 });
47 }
48 var stream;
49 var reader;
50 return fetch('/fetch/resources/doctype.html').then(function(res) {
51 stream = res.body;
52 reader = stream.getReader();
53 return wait_until_readable(reader);
54 }).then(function() {
55 assert_equals(reader.state, 'readable');
56 assert_equals(stream.state, 'waiting');
57 reader.releaseLock();
58 assert_equals(reader.state, 'closed');
59 assert_equals(stream.state, 'readable');
60 var another = stream.getReader();
61 assert_equals(reader.state, 'closed');
62 assert_equals(stream.state, 'waiting');
63 assert_equals(another.state, 'readable');
64 });
65 }, 'ExclusiveStreamReader state masking');
66
67 promise_test(function(t) {
68 return fetch('/fetch/resources/doctype.html').then(function(res) {
69 var reader = res.body.getReader();
70 return read_until_end(reader);
71 }).then(function(chunks) {
72 return Promise.all(chunks.map(function(chunk) {
tyoshino (SeeGerritForStatus) 2015/02/02 08:38:24 this works since only ASCII characters are used?
yhirano 2015/02/02 10:21:20 You're right, but I don't want to rely on it. Fixe
73 return new TextDecoder().decode(chunk);
74 }));
75 }).then(function(strings) {
76 var string = String.prototype.concat.apply('', strings);
77 assert_equals(string, '<!DOCTYPE html>\n');
78 });
79 }, 'read contents with ExclusiveStreamReader');
80
81 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698