Chromium Code Reviews| OLD | NEW |
|---|---|
| (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(); | |
| OLD | NEW |