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

Side by Side Diff: LayoutTests/http/tests/fetch/script-tests/fetch-body-mixin.js

Issue 1001233002: Streams Implementation Update: Reader name and Stream methods (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « no previous file | LayoutTests/http/tests/fetch/script-tests/stream-reader.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 if (self.importScripts) { 1 if (self.importScripts) {
2 importScripts('../resources/fetch-test-helpers.js'); 2 importScripts('../resources/fetch-test-helpers.js');
3 } 3 }
4 4
5 function arrayBufferToString(buffer) { 5 function arrayBufferToString(buffer) {
6 return new Promise(function(resolve) { 6 return new Promise(function(resolve) {
7 var reader = new FileReader(); 7 var reader = new FileReader();
8 reader.onload = function() { 8 reader.onload = function() {
9 resolve(reader.result); 9 resolve(reader.result);
10 }; 10 };
11 reader.readAsText(new Blob([buffer])); 11 reader.readAsText(new Blob([buffer]));
12 }); 12 });
13 } 13 }
14 14
15 function readStream(stream, values) { 15 function readStream(reader, values) {
16 while (stream.state === 'readable') { 16 while (reader.state === 'readable') {
17 values.push(stream.read()); 17 values.push(reader.read());
18 } 18 }
19 if (stream.state === 'waiting') { 19 if (reader.state === 'waiting') {
20 return stream.ready.then(function() { 20 return reader.ready.then(function() {
21 readStream(stream, values); 21 readStream(reader, values);
22 }); 22 });
23 } 23 }
24 return stream.closed; 24 return reader.closed;
25 } 25 }
26 26
27 sequential_promise_test(function(test) { 27 sequential_promise_test(function(test) {
28 var response; 28 var response;
29 var reader;
29 return fetch('/fetch/resources/doctype.html') 30 return fetch('/fetch/resources/doctype.html')
30 .then(function(resp) { 31 .then(function(resp) {
31 response = resp; 32 response = resp;
32 return response.body.ready; 33 reader = resp.body.getReader();
34 return reader.ready;
33 }) 35 })
34 .then(function() { 36 .then(function() {
35 if (response.body.state !== 'readable') { 37 if (reader.state !== 'readable') {
36 return Promise.reject(TypeError('stream state get wrong')); 38 return Promise.reject(TypeError('stream state get wrong'));
37 } else { 39 } else {
40 reader.releaseLock();
38 return response.text(); 41 return response.text();
39 } 42 }
40 }) 43 })
41 .then(function(text) { 44 .then(function(text) {
42 assert_equals(text, '<!DOCTYPE html>\n', 'response.body'); 45 assert_equals(text, '<!DOCTYPE html>\n', 'response.body');
43 }) 46 })
44 }, 'FetchTextAfterStreamGetReadableTest'); 47 }, 'FetchTextAfterStreamGetReadableTest');
45 48
46 sequential_promise_test(function(test) { 49 sequential_promise_test(function(test) {
47 return fetch('/fetch/resources/doctype.html') 50 return fetch('/fetch/resources/doctype.html')
48 .then(function(response) { 51 .then(function(response) {
49 // Accessing the body property makes the stream start working. 52 // Accessing the body property makes the stream start working.
50 var stream = response.body; 53 var stream = response.body;
51 return response.text(); 54 return response.text();
52 }) 55 })
53 .then(function(text) { 56 .then(function(text) {
54 assert_equals(text, '<!DOCTYPE html>\n'); 57 assert_equals(text, '<!DOCTYPE html>\n');
55 }) 58 })
56 }, 'FetchTextAfterAccessingStreamTest'); 59 }, 'FetchTextAfterAccessingStreamTest');
57 60
58 sequential_promise_test(function(test) { 61 sequential_promise_test(function(test) {
59 var values = []; 62 var values = [];
60 return fetch('/fetch/resources/doctype.html') 63 return fetch('/fetch/resources/doctype.html')
61 .then(function(response) { 64 .then(function(response) {
62 r = response; 65 r = response;
63 return readStream(response.body, values); 66 return readStream(response.body.getReader(), values);
64 }) 67 })
65 .then(function() { 68 .then(function() {
66 return Promise.all(values.map(arrayBufferToString)); 69 return Promise.all(values.map(arrayBufferToString));
67 }) 70 })
68 .then(function(strings) { 71 .then(function(strings) {
69 var string = String.prototype.concat.apply('', strings); 72 var string = String.prototype.concat.apply('', strings);
70 assert_equals(string, '<!DOCTYPE html>\n'); 73 assert_equals(string, '<!DOCTYPE html>\n');
71 }) 74 })
72 }, 'FetchStreamTest'); 75 }, 'FetchStreamTest');
73 76
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 }) 145 })
143 }, 'TextTest'); 146 }, 'TextTest');
144 147
145 sequential_promise_test(function(test) { 148 sequential_promise_test(function(test) {
146 var expectedText = ''; 149 var expectedText = '';
147 for (var i = 0; i < 100; ++i) 150 for (var i = 0; i < 100; ++i)
148 expectedText += i; 151 expectedText += i;
149 152
150 var values = []; 153 var values = [];
151 function partialReadResponse(response, read_count) { 154 function partialReadResponse(response, read_count) {
155 var reader = response.body.getReader();
152 function read(resolve, reject) { 156 function read(resolve, reject) {
153 while (response.body.state === 'readable') { 157 while (reader.state === 'readable') {
154 values.push(response.body.read()); 158 values.push(reader.read());
155 if (values.length > read_count) { 159 if (values.length > read_count) {
160 reader.releaseLock();
156 resolve(); 161 resolve();
157 return; 162 return;
158 } 163 }
159 } 164 }
160 if (response.body.state === 'closed') { 165 if (reader.state === 'closed') {
166 reader.releaseLock();
161 resolve(); 167 resolve();
162 return; 168 return;
163 } 169 }
164 response.body.ready.then(function() { 170 reader.ready.then(function() {
165 read(resolve, reject); 171 read(resolve, reject);
166 }).catch(reject); 172 }).catch(reject);
167 } 173 }
168 return new Promise(read); 174 return new Promise(read);
169 } 175 }
170 var response; 176 var response;
171 return fetch('/fetch/resources/progressive.php') 177 return fetch('/fetch/resources/progressive.php')
172 .then(function(res) { 178 .then(function(res) {
173 response = res; 179 response = res;
174 return partialReadResponse(response, 10); 180 return partialReadResponse(response, 10);
175 }) 181 })
176 .then(function() { 182 .then(function() {
177 return Promise.all( 183 return Promise.all(
178 values.map(arrayBufferToString).concat(response.text())); 184 values.map(arrayBufferToString).concat(response.text()));
179 }) 185 })
180 .then(function(strings) { 186 .then(function(strings) {
181 var string = String.prototype.concat.apply('', strings); 187 var string = String.prototype.concat.apply('', strings);
182 assert_equals(string, expectedText); 188 assert_equals(string, expectedText);
183 }) 189 })
184 }, 'PartiallyReadFromStreamAndReadTextTest'); 190 }, 'PartiallyReadFromStreamAndReadTextTest');
185 191
186 sequential_promise_test_done(); 192 sequential_promise_test_done();
187 done(); 193 done();
OLDNEW
« no previous file with comments | « no previous file | LayoutTests/http/tests/fetch/script-tests/stream-reader.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698