utils.js (4280B)
1 var RESOURCES_DIR = "../resources/"; 2 3 function dirname(path) { 4 return path.replace(/\/[^\/]*$/, '/') 5 } 6 7 function checkRequest(request, ExpectedValuesDict) { 8 for (var attribute in ExpectedValuesDict) { 9 switch(attribute) { 10 case "headers": 11 for (var key in ExpectedValuesDict["headers"].keys()) { 12 assert_equals(request["headers"].get(key), ExpectedValuesDict["headers"].get(key), 13 "Check headers attribute has " + key + ":" + ExpectedValuesDict["headers"].get(key)); 14 } 15 break; 16 17 case "body": 18 //for checking body's content, a dedicated asyncronous/promise test should be used 19 assert_true(request["headers"].has("Content-Type") , "Check request has body using Content-Type header") 20 break; 21 22 case "method": 23 case "referrer": 24 case "referrerPolicy": 25 case "credentials": 26 case "cache": 27 case "redirect": 28 case "integrity": 29 case "url": 30 case "destination": 31 assert_equals(request[attribute], ExpectedValuesDict[attribute], "Check " + attribute + " attribute") 32 break; 33 34 default: 35 break; 36 } 37 } 38 } 39 40 function stringToArray(str) { 41 var array = new Uint8Array(str.length); 42 for (var i=0, strLen = str.length; i < strLen; i++) 43 array[i] = str.charCodeAt(i); 44 return array; 45 } 46 47 function encode_utf8(str) 48 { 49 if (self.TextEncoder) 50 return (new TextEncoder).encode(str); 51 return stringToArray(unescape(encodeURIComponent(str))); 52 } 53 54 function validateBufferFromString(buffer, expectedValue, message) 55 { 56 return assert_array_equals(new Uint8Array(buffer !== undefined ? buffer : []), stringToArray(expectedValue), message); 57 } 58 59 function validateStreamFromString(reader, expectedValue, retrievedArrayBuffer) { 60 // Passing Uint8Array for byte streams; non-byte streams will simply ignore it 61 return reader.read(new Uint8Array(64)).then(function(data) { 62 if (!data.done) { 63 assert_true(data.value instanceof Uint8Array, "Fetch ReadableStream chunks should be Uint8Array"); 64 var newBuffer; 65 if (retrievedArrayBuffer) { 66 newBuffer = new Uint8Array(data.value.length + retrievedArrayBuffer.length); 67 newBuffer.set(retrievedArrayBuffer, 0); 68 newBuffer.set(data.value, retrievedArrayBuffer.length); 69 } else { 70 newBuffer = data.value; 71 } 72 return validateStreamFromString(reader, expectedValue, newBuffer); 73 } 74 validateBufferFromString(retrievedArrayBuffer, expectedValue, "Retrieve and verify stream"); 75 }); 76 } 77 78 function validateStreamFromPartialString(reader, expectedValue, retrievedArrayBuffer) { 79 // Passing Uint8Array for byte streams; non-byte streams will simply ignore it 80 return reader.read(new Uint8Array(64)).then(function(data) { 81 if (!data.done) { 82 assert_true(data.value instanceof Uint8Array, "Fetch ReadableStream chunks should be Uint8Array"); 83 var newBuffer; 84 if (retrievedArrayBuffer) { 85 newBuffer = new Uint8Array(data.value.length + retrievedArrayBuffer.length); 86 newBuffer.set(retrievedArrayBuffer, 0); 87 newBuffer.set(data.value, retrievedArrayBuffer.length); 88 } else { 89 newBuffer = data.value; 90 } 91 return validateStreamFromPartialString(reader, expectedValue, newBuffer); 92 } 93 94 var string = new TextDecoder("utf-8").decode(retrievedArrayBuffer); 95 return assert_true(string.search(expectedValue) != -1, "Retrieve and verify stream"); 96 }); 97 } 98 99 // From streams tests 100 function delay(milliseconds) 101 { 102 return new Promise(function(resolve) { 103 step_timeout(resolve, milliseconds); 104 }); 105 } 106 107 function requestForbiddenHeaders(desc, forbiddenHeaders) { 108 var url = RESOURCES_DIR + "inspect-headers.py"; 109 var requestInit = {"headers": forbiddenHeaders} 110 var urlParameters = "?headers=" + Object.keys(forbiddenHeaders).join("|"); 111 112 promise_test(function(test){ 113 return fetch(url + urlParameters, requestInit).then(function(resp) { 114 assert_equals(resp.status, 200, "HTTP status is 200"); 115 assert_equals(resp.type , "basic", "Response's type is basic"); 116 for (var header in forbiddenHeaders) 117 assert_not_equals(resp.headers.get("x-request-" + header), forbiddenHeaders[header], header + " does not have the value we defined"); 118 }); 119 }, desc); 120 }