OLD | NEW |
(Empty) | |
| 1 <!doctype html> |
| 2 <html> |
| 3 <head> |
| 4 <meta charset="utf-8"> |
| 5 <title>Request disturbed</title> |
| 6 <meta name="help" href="https://fetch.spec.whatwg.org/#request"> |
| 7 <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin"> |
| 8 <meta name="author" title="Canon Research France" href="https://www.crf.cano
n.fr"> |
| 9 <script src="/resources/testharness.js"></script> |
| 10 <script src="/resources/testharnessreport.js"></script> |
| 11 </head> |
| 12 <body> |
| 13 <script> |
| 14 var initValuesDict = {"method" : "POST", |
| 15 "body" : "Request's body" |
| 16 }; |
| 17 |
| 18 var noBodyConsumed = new Request(""); |
| 19 var bodyConsumed = new Request("", initValuesDict); |
| 20 |
| 21 test(() => { |
| 22 assert_equals(noBodyConsumed.body, null, "body's default value is null")
; |
| 23 assert_false(noBodyConsumed.bodyUsed , "bodyUsed is false when request i
s not disturbed"); |
| 24 assert_not_equals(bodyConsumed.body, null, "non-null body"); |
| 25 assert_true(bodyConsumed.body instanceof ReadableStream, "non-null body
type"); |
| 26 assert_false(noBodyConsumed.bodyUsed, "bodyUsed is false when request is
not disturbed"); |
| 27 }, "Request's body: initial state"); |
| 28 |
| 29 noBodyConsumed.blob(); |
| 30 bodyConsumed.blob(); |
| 31 |
| 32 test(function() { |
| 33 assert_false(noBodyConsumed.bodyUsed , "bodyUsed is false when request i
s not disturbed"); |
| 34 try { |
| 35 noBodyConsumed.clone(); |
| 36 } catch (e) { |
| 37 assert_unreached("Can use request not disturbed for creating or clonin
g request"); |
| 38 } |
| 39 }, "Request without body cannot be disturbed"); |
| 40 |
| 41 test(function() { |
| 42 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is di
sturbed"); |
| 43 assert_throws(new TypeError(), function() { bodyConsumed.clone(); }); |
| 44 }, "Check cloning a disturbed request"); |
| 45 |
| 46 test(function() { |
| 47 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is di
sturbed"); |
| 48 assert_throws(new TypeError(), function() { new Request(bodyConsumed); }
); |
| 49 }, "Check creating a new request from a disturbed request"); |
| 50 |
| 51 promise_test(function() { |
| 52 var bodyRequest = new Request("", initValuesDict); |
| 53 const originalBody = bodyRequest.body; |
| 54 assert_false(bodyRequest.bodyUsed , "bodyUsed is false when request is n
ot disturbed"); |
| 55 var requestFromRequest = new Request(bodyRequest); |
| 56 assert_true(bodyRequest.bodyUsed , "bodyUsed is true when request is dis
turbed"); |
| 57 assert_equals(bodyRequest.body, originalBody, "body should not change"); |
| 58 assert_not_equals(originalBody, undefined, "body should not be undefined
"); |
| 59 assert_not_equals(originalBody, null, "body should not be null"); |
| 60 assert_not_equals(requestFromRequest.body, originalBody, "new request's
body is new"); |
| 61 return requestFromRequest.text(text => { |
| 62 assert_equals(text, "Request's body"); |
| 63 }); |
| 64 }, "Input request used for creating new request became disturbed"); |
| 65 |
| 66 promise_test(() => { |
| 67 const bodyRequest = new Request("", initValuesDict); |
| 68 const originalBody = bodyRequest.body; |
| 69 assert_false(bodyRequest.bodyUsed , "bodyUsed is false when request is n
ot disturbed"); |
| 70 const requestFromRequest = new Request(bodyRequest, { body : "init body"
}); |
| 71 assert_true(bodyRequest.bodyUsed , "bodyUsed is true when request is dis
turbed"); |
| 72 assert_equals(bodyRequest.body, originalBody, "body should not change"); |
| 73 assert_not_equals(originalBody, undefined, "body should not be undefined
"); |
| 74 assert_not_equals(originalBody, null, "body should not be null"); |
| 75 assert_not_equals(requestFromRequest.body, originalBody, "new request's
body is new"); |
| 76 |
| 77 return requestFromRequest.text(text => { |
| 78 assert_equals(text, "init body"); |
| 79 }); |
| 80 }, "Input request used for creating new request became disturbed even if b
ody is not used"); |
| 81 |
| 82 promise_test(function(test) { |
| 83 assert_true(bodyConsumed.bodyUsed , "bodyUsed is true when request is di
sturbed"); |
| 84 return promise_rejects(test, new TypeError(), bodyConsumed.blob()); |
| 85 }, "Check consuming a disturbed request"); |
| 86 |
| 87 test(function() { |
| 88 var req = new Request(URL, {method: 'POST', body: 'hello'}); |
| 89 assert_false(req.bodyUsed, |
| 90 'Request should not be flagged as used if it has not been '
+ |
| 91 'consumed.'); |
| 92 assert_throws(new TypeError(), |
| 93 function() { new Request(req, {method: 'GET'}); }, |
| 94 'A get request may not have body.'); |
| 95 |
| 96 assert_false(req.bodyUsed, 'After the GET case'); |
| 97 |
| 98 assert_throws(new TypeError(), |
| 99 function() { new Request(req, {method: 'CONNECT'}); }, |
| 100 'Request() with a forbidden method must throw.'); |
| 101 |
| 102 assert_false(req.bodyUsed, 'After the forbidden method case'); |
| 103 |
| 104 var req2 = new Request(req); |
| 105 assert_true(req.bodyUsed, |
| 106 'Request should be flagged as used if it has been consumed.'
); |
| 107 }, 'Request construction failure should not set "bodyUsed"'); |
| 108 </script> |
| 109 </body> |
| 110 </html> |
OLD | NEW |