request-consume.any.js (6363B)
1 // META: global=window,worker 2 // META: title=Request consume 3 // META: script=../resources/utils.js 4 5 function checkBodyText(request, expectedBody) { 6 return request.text().then(function(bodyAsText) { 7 assert_equals(bodyAsText, expectedBody, "Retrieve and verify request's body"); 8 assert_true(request.bodyUsed, "body as text: bodyUsed turned true"); 9 }); 10 } 11 12 async function checkBodyBlob(request, expectedBody, checkContentType) { 13 const bodyAsBlob = await request.blob(); 14 15 if (checkContentType) 16 assert_equals(bodyAsBlob.type, "text/plain", "Blob body type should be computed from the request Content-Type"); 17 18 const body = await bodyAsBlob.text(); 19 assert_equals(body, expectedBody, "Retrieve and verify request's body"); 20 assert_true(request.bodyUsed, "body as blob: bodyUsed turned true"); 21 } 22 23 function checkBodyArrayBuffer(request, expectedBody) { 24 return request.arrayBuffer().then(function(bodyAsArrayBuffer) { 25 validateBufferFromString(bodyAsArrayBuffer, expectedBody, "Retrieve and verify request's body"); 26 assert_true(request.bodyUsed, "body as arrayBuffer: bodyUsed turned true"); 27 }); 28 } 29 30 function checkBodyBytes(request, expectedBody) { 31 return request.bytes().then(function(bodyAsUint8Array) { 32 assert_true(bodyAsUint8Array instanceof Uint8Array); 33 validateBufferFromString(bodyAsUint8Array.buffer, expectedBody, "Retrieve and verify request's body"); 34 assert_true(request.bodyUsed, "body as bytes: bodyUsed turned true"); 35 }); 36 } 37 38 function checkBodyJSON(request, expectedBody) { 39 return request.json().then(function(bodyAsJSON) { 40 var strBody = JSON.stringify(bodyAsJSON) 41 assert_equals(strBody, expectedBody, "Retrieve and verify request's body"); 42 assert_true(request.bodyUsed, "body as json: bodyUsed turned true"); 43 }); 44 } 45 46 function checkBodyFormData(request, expectedBody) { 47 return request.formData().then(function(bodyAsFormData) { 48 assert_true(bodyAsFormData instanceof FormData, "Should receive a FormData"); 49 assert_true(request.bodyUsed, "body as formData: bodyUsed turned true"); 50 }); 51 } 52 53 function checkRequestBody(body, expected, bodyType) { 54 promise_test(function(test) { 55 var request = new Request("", {"method": "POST", "body": body, "headers": [["Content-Type", "text/PLAIN"]] }); 56 assert_false(request.bodyUsed, "bodyUsed is false at init"); 57 return checkBodyText(request, expected); 58 }, "Consume " + bodyType + " request's body as text"); 59 promise_test(function(test) { 60 var request = new Request("", {"method": "POST", "body": body }); 61 assert_false(request.bodyUsed, "bodyUsed is false at init"); 62 return checkBodyBlob(request, expected); 63 }, "Consume " + bodyType + " request's body as blob"); 64 promise_test(function(test) { 65 var request = new Request("", {"method": "POST", "body": body }); 66 assert_false(request.bodyUsed, "bodyUsed is false at init"); 67 return checkBodyArrayBuffer(request, expected); 68 }, "Consume " + bodyType + " request's body as arrayBuffer"); 69 promise_test(function(test) { 70 var request = new Request("", {"method": "POST", "body": body }); 71 assert_false(request.bodyUsed, "bodyUsed is false at init"); 72 return checkBodyBytes(request, expected); 73 }, "Consume " + bodyType + " request's body as bytes"); 74 promise_test(function(test) { 75 var request = new Request("", {"method": "POST", "body": body }); 76 assert_false(request.bodyUsed, "bodyUsed is false at init"); 77 return checkBodyJSON(request, expected); 78 }, "Consume " + bodyType + " request's body as JSON"); 79 } 80 81 var textData = JSON.stringify("This is response's body"); 82 var blob = new Blob([textData], { "type" : "text/plain" }); 83 84 checkRequestBody(textData, textData, "String"); 85 86 var string = "\"123456\""; 87 function getArrayBuffer() { 88 var arrayBuffer = new ArrayBuffer(8); 89 var int8Array = new Int8Array(arrayBuffer); 90 for (var cptr = 0; cptr < 8; cptr++) 91 int8Array[cptr] = string.charCodeAt(cptr); 92 return arrayBuffer; 93 } 94 95 function getArrayBufferWithZeros() { 96 var arrayBuffer = new ArrayBuffer(10); 97 var int8Array = new Int8Array(arrayBuffer); 98 for (var cptr = 0; cptr < 8; cptr++) 99 int8Array[cptr + 1] = string.charCodeAt(cptr); 100 return arrayBuffer; 101 } 102 103 checkRequestBody(getArrayBuffer(), string, "ArrayBuffer"); 104 checkRequestBody(new Uint8Array(getArrayBuffer()), string, "Uint8Array"); 105 checkRequestBody(new Int8Array(getArrayBufferWithZeros(), 1, 8), string, "Int8Array"); 106 checkRequestBody(new Float32Array(getArrayBuffer()), string, "Float32Array"); 107 checkRequestBody(new DataView(getArrayBufferWithZeros(), 1, 8), string, "DataView"); 108 109 promise_test(function(test) { 110 var formData = new FormData(); 111 formData.append("name", "value") 112 var request = new Request("", {"method": "POST", "body": formData }); 113 assert_false(request.bodyUsed, "bodyUsed is false at init"); 114 return checkBodyFormData(request, formData); 115 }, "Consume FormData request's body as FormData"); 116 117 function checkBlobResponseBody(blobBody, blobData, bodyType, checkFunction) { 118 promise_test(function(test) { 119 var response = new Response(blobBody); 120 assert_false(response.bodyUsed, "bodyUsed is false at init"); 121 return checkFunction(response, blobData); 122 }, "Consume blob response's body as " + bodyType); 123 } 124 125 checkBlobResponseBody(blob, textData, "blob", checkBodyBlob); 126 checkBlobResponseBody(blob, textData, "text", checkBodyText); 127 checkBlobResponseBody(blob, textData, "json", checkBodyJSON); 128 checkBlobResponseBody(blob, textData, "arrayBuffer", checkBodyArrayBuffer); 129 checkBlobResponseBody(blob, textData, "bytes", checkBodyBytes); 130 checkBlobResponseBody(new Blob([""]), "", "blob (empty blob as input)", checkBodyBlob); 131 132 var goodJSONValues = ["null", "1", "true", "\"string\""]; 133 goodJSONValues.forEach(function(value) { 134 promise_test(function(test) { 135 var request = new Request("", {"method": "POST", "body": value}); 136 return request.json().then(function(v) { 137 assert_equals(v, JSON.parse(value)); 138 }); 139 }, "Consume JSON from text: '" + JSON.stringify(value) + "'"); 140 }); 141 142 var badJSONValues = ["undefined", "{", "a", "["]; 143 badJSONValues.forEach(function(value) { 144 promise_test(function(test) { 145 var request = new Request("", {"method": "POST", "body": value}); 146 return promise_rejects_js(test, SyntaxError, request.json()); 147 }, "Trying to consume bad JSON text as JSON: '" + value + "'"); 148 });