diff options
Diffstat (limited to 'testing/web-platform/tests/fetch/api/request/request-disturbed.html')
-rw-r--r-- | testing/web-platform/tests/fetch/api/request/request-disturbed.html | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/testing/web-platform/tests/fetch/api/request/request-disturbed.html b/testing/web-platform/tests/fetch/api/request/request-disturbed.html new file mode 100644 index 000000000..dbc218e50 --- /dev/null +++ b/testing/web-platform/tests/fetch/api/request/request-disturbed.html @@ -0,0 +1,77 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <title>Request disturbed</title> + <meta name="help" href="https://fetch.spec.whatwg.org/#request"> + <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> + <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <script> + var initValuesDict = {"method" : "POST", + "body" : "Request's body" + }; + + var noBodyConsumed = new Request(""); + noBodyConsumed.blob(); + var bodyConsumed = new Request("", initValuesDict); + bodyConsumed.blob(); + + test(function() { + assert_false(noBodyConsumed.bodyUsed , "bodyUsed is false when request is not disturbed"); + try { + noBodyConsumed.clone(); + } catch (e) { + assert_unreached("Can use request not disturbed for creating or cloning request"); + } + }, "Request without body cannot be disturbed"); + + test(function() { + assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); + assert_throws(new TypeError(), function() { bodyConsumed.clone(); }); + }, "Check cloning a disturbed request"); + + test(function() { + assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); + assert_throws(new TypeError(), function() { new Request(bodyConsumed); }); + }, "Check creating a new request from a disturbed request"); + + test(function() { + var bodyRequest = new Request("", initValuesDict); + assert_false(bodyRequest.bodyUsed , "bodyUsed is false when request is not disturbed"); + var requestFromRequest = new Request(bodyRequest); + assert_true(bodyRequest.bodyUsed , "bodyUsed is true when request is disturbed"); + }, "Input request used for creating new request became disturbed"); + + promise_test(function(test) { + assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is disturbed"); + return promise_rejects(test, new TypeError(), bodyConsumed.blob()); + }, "Check consuming a disturbed request"); + + test(function() { + var req = new Request(URL, {method: 'POST', body: 'hello'}); + assert_false(req.bodyUsed, + 'Request should not be flagged as used if it has not been ' + + 'consumed.'); + assert_throws(new TypeError(), + function() { new Request(req, {method: 'GET'}); }, + 'A get request may not have body.'); + + assert_false(req.bodyUsed, 'After the GET case'); + + assert_throws(new TypeError(), + function() { new Request(req, {method: 'CONNECT'}); }, + 'Request() with a forbidden method must throw.'); + + assert_false(req.bodyUsed, 'After the forbidden method case'); + + var req2 = new Request(req); + assert_true(req.bodyUsed, + 'Request should be flagged as used if it has been consumed.'); + }, 'Request construction failure should not set "bodyUsed"'); + </script> + </body> +</html> |