utils.js 4.2 KB

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