Index: third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/body-mixin.js |
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/body-mixin.js b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/body-mixin.js |
index ea9e07b8ccbcab8f3c15289ca0fb92c836ac2656..491f4b9555194e95baf3e7d1432071dc37e9ded4 100644 |
--- a/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/body-mixin.js |
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/script-tests/body-mixin.js |
@@ -12,6 +12,16 @@ function readStream(reader, values) { |
return reader.closed; |
} |
+function isLocked(stream) { |
+ try { |
+ var reader = stream.getReader(); |
+ reader.releaseLock(); |
+ return false; |
+ } catch(e) { |
+ return true; |
+ } |
+} |
+ |
promise_test(function(test) { |
return fetch('/fetch/resources/doctype.html') |
.then(function(response) { |
@@ -63,55 +73,90 @@ promise_test(function(test) { |
}, 'FetchTwiceTest'); |
promise_test(function(test) { |
+ var response; |
return fetch('/fetch/resources/doctype.html') |
- .then(function(response) { |
- return response.arrayBuffer(); |
+ .then(function(res) { |
+ response = res; |
+ assert_false(response.bodyUsed); |
+ var p = response.arrayBuffer(); |
+ assert_true(response.bodyUsed); |
+ assert_true(isLocked(response.body)); |
+ return p; |
}) |
.then(function(b) { |
+ assert_true(isLocked(response.body)); |
assert_equals(b.byteLength, 16); |
}) |
}, 'ArrayBufferTest'); |
promise_test(function(test) { |
+ var response; |
return fetch('/fetch/resources/doctype.html') |
- .then(function(response) { |
- return response.blob(); |
+ .then(function(res) { |
+ response = res; |
+ assert_false(response.bodyUsed); |
+ var p = response.blob(); |
+ assert_true(response.bodyUsed); |
+ assert_true(isLocked(response.body)); |
+ return p; |
}) |
.then(function(blob) { |
+ assert_true(isLocked(response.body)); |
assert_equals(blob.size, 16); |
assert_equals(blob.type, 'text/html'); |
}) |
}, 'BlobTest'); |
promise_test(function(test) { |
+ var response; |
return fetch('/fetch/resources/doctype.html') |
- .then(function(response) { |
- return response.json(); |
+ .then(function(res) { |
+ response = res; |
+ assert_false(response.bodyUsed); |
+ var p = response.json(); |
+ assert_true(response.bodyUsed); |
+ assert_true(isLocked(response.body)); |
+ return p; |
}) |
.then( |
test.unreached_func('json() must fail'), |
function(e) { |
+ assert_true(isLocked(response.body)); |
assert_equals(e.name, 'SyntaxError', 'expected JSON error'); |
}) |
}, 'JSONFailedTest'); |
promise_test(function(test) { |
+ var response; |
return fetch('/fetch/resources/simple.json') |
- .then(function(response) { |
- return response.json(); |
+ .then(function(res) { |
+ response = res; |
+ assert_false(response.bodyUsed); |
+ var p = response.json(); |
+ assert_true(response.bodyUsed); |
+ assert_true(isLocked(response.body)); |
+ return p; |
}) |
.then(function(json) { |
+ assert_true(isLocked(response.body)); |
assert_equals(json['a'], 1); |
assert_equals(json['b'], 2); |
}) |
}, 'JSONTest'); |
promise_test(function(test) { |
+ var response; |
return fetch('/fetch/resources/doctype.html') |
- .then(function(response) { |
- return response.text(); |
+ .then(function(res) { |
+ response = res; |
+ assert_false(response.bodyUsed); |
+ var p = response.text(); |
+ assert_true(response.bodyUsed); |
+ assert_true(isLocked(response.body)); |
+ return p; |
}) |
.then(function(text) { |
+ assert_true(isLocked(response.body)); |
assert_equals(text, '<!DOCTYPE html>\n'); |
}) |
}, 'TextTest'); |
@@ -119,45 +164,110 @@ promise_test(function(test) { |
promise_test(function(test) { |
return fetch('/fetch/resources/non-ascii.txt') |
.then(function(response) { |
- return response.text(); |
+ assert_false(response.bodyUsed); |
+ var p = response.text(); |
+ assert_true(response.bodyUsed); |
+ return p; |
}) |
.then(function(text) { |
assert_equals(text, '\u4e2d\u6587 Gem\u00fcse\n'); |
}) |
}, 'NonAsciiTextTest'); |
-promise_test(function(test) { |
- var expected = ''; |
- for (var i = 0; i < 100; ++i) |
- expected += i; |
+test(t => { |
+ var req = new Request('/'); |
+ assert_false(req.bodyUsed); |
+ req.text(); |
+ assert_false(req.bodyUsed); |
+ }, 'BodyUsedShouldNotBeSetForNullBody'); |
- var decoder = new TextDecoder(); |
- var actual = ''; |
- var response; |
- var reader; |
- return fetch('/fetch/resources/progressive.php') |
- .then(function(res) { |
- response = res; |
- reader = response.body.getReader(); |
- return reader.read(); |
- }) |
- .then(function(r) { |
- assert_false(r.done); |
- actual += decoder.decode(r.value, {stream: true}); |
- }) |
- .then(function() { |
- return response.text().then(unreached_fulfillment(test), function() { |
- // response.text() should fail because we have a reader. |
- }); |
- }) |
- .then(function() { |
- reader.releaseLock(); |
- return response.arrayBuffer(); |
- }) |
- .then(function(buffer) { |
- actual += decoder.decode(buffer); |
- assert_equals(actual, expected); |
- }) |
- }, 'PartiallyReadFromStreamAndReadArrayBufferTest'); |
+test(t => { |
+ var req = new Request('/', {method: 'POST', body: ''}); |
+ assert_false(req.bodyUsed); |
+ req.text(); |
+ assert_true(req.bodyUsed); |
+ }, 'BodyUsedShouldBeSetForEmptyBody'); |
+ |
+test(t => { |
+ var res = new Response(''); |
+ assert_false(res.bodyUsed); |
+ var reader = res.body.getReader(); |
+ assert_false(res.bodyUsed); |
+ reader.read(); |
+ assert_true(res.bodyUsed); |
+ }, 'BodyUsedShouldBeSetWhenRead'); |
+ |
+test(t => { |
+ var res = new Response(''); |
+ assert_false(res.bodyUsed); |
+ var reader = res.body.getReader(); |
+ assert_false(res.bodyUsed); |
+ reader.cancel(); |
+ assert_true(res.bodyUsed); |
+ }, 'BodyUsedShouldBeSetWhenCancelled'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.cancel(); |
+ return res.arrayBuffer().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Used => arrayBuffer'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.cancel(); |
+ return res.blob().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Used => blob'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.cancel(); |
+ return res.json().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Used => json'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.cancel(); |
+ return res.text().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Used => text'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.getReader(); |
+ return res.arrayBuffer().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Locked => arrayBuffer'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.getReader(); |
+ return res.blob().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Locked => blob'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.getReader(); |
+ return res.json().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Locked => json'); |
+ |
+promise_test(t => { |
+ var res = new Response(''); |
+ res.body.getReader(); |
+ return res.text().then(unreached_fulfillment(t), e => { |
+ assert_equals(e.name, 'TypeError'); |
+ }); |
+ }, 'Locked => text'); |
done(); |