diff options
Diffstat (limited to 'test/wpt/tests/xhr/setrequestheader-content-type.htm')
-rw-r--r-- | test/wpt/tests/xhr/setrequestheader-content-type.htm | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/test/wpt/tests/xhr/setrequestheader-content-type.htm b/test/wpt/tests/xhr/setrequestheader-content-type.htm new file mode 100644 index 0000000..0723839 --- /dev/null +++ b/test/wpt/tests/xhr/setrequestheader-content-type.htm @@ -0,0 +1,220 @@ +<!DOCTYPE html> +<html> + <head> + <title>XMLHttpRequest: setRequestHeader() - Content-Type header</title> + <meta name="timeout" content="long"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> + </head> + <body> + <div id="log"></div> + <script> + function request(inputGenerator, headersToSend, expectedType, title) { + test(function() { + const toSend = inputGenerator(), + client = new XMLHttpRequest() + client.open("POST", "resources/inspect-headers.py?filter_name=Content-Type", false) + for(header in headersToSend) { + if (headersToSend.hasOwnProperty(header)) { + client.setRequestHeader(header, headersToSend[header]); + } + } + client.send(toSend) + + const actual = client.responseText + if (expectedType === undefined || expectedType === null) { + assert_equals(actual, ""); + } else if (expectedType instanceof RegExp) { + assert_regexp_match(actual, expectedType); + } else { + assert_equals(actual, "Content-Type: " + expectedType + "\n"); + } + }, title) + } + request( + function _String() { return ""; }, + {"Content-Type": ""}, + "", + 'setRequestHeader("") sends a blank string' + ) + request( + function _String() { return ""; }, + {"Content-Type": " "}, + "", + 'setRequestHeader(" ") sends the string " "' + ) + request( + function _String() { return ""; }, + {"Content-Type": null}, + "null", + 'setRequestHeader(null) sends the string "null"' + ) + request( + function _String() { return ""; }, + {"Content-Type": undefined}, + "undefined", + 'setRequestHeader(undefined) sends the string "undefined"' + ) + request( + function _String() { return "test"; }, + {}, + "text/plain;charset=UTF-8", + 'String request has correct default Content-Type of "text/plain;charset=UTF-8"' + ) + request( + function _String() { return "test()"; }, + {"Content-Type": "text/javascript;charset=ASCII"}, + "text/javascript;charset=UTF-8", + "String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" + ) + request( + function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, + {"Content-Type": ""}, + "", + 'XML Document request respects setRequestHeader("")' + ) + request( + function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, + {}, + "application/xml;charset=UTF-8", + 'XML Document request has correct default Content-Type of "application/xml;charset=UTF-8"' + ) + request( + function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, + {"Content-Type": "application/xhtml+xml;charset=ASCII"}, + "application/xhtml+xml;charset=UTF-8", + "XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" + ) + request( + function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, + {"Content-Type": ""}, + "", + 'HTML Document request respects setRequestHeader("")' + ) + request( + function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, + {}, + "text/html;charset=UTF-8", + 'HTML Document request has correct default Content-Type of "text/html;charset=UTF-8"' + ) + request( + function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, + {"Content-Type": "text/html+junk;charset=ASCII"}, + "text/html+junk;charset=UTF-8", + "HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" + ) + request( + function _Blob() { return new Blob(["test"]); }, + {"Content-Type": ""}, + "", + 'Blob request respects setRequestHeader("") to be specified' + ) + request( + function _Blob() { return new Blob(["test"]); }, + {}, + undefined, + "Blob request with unset type sends no Content-Type without setRequestHeader() call" + ) + request( + function _Blob() { return new Blob(["test"]); }, + {"Content-Type": "application/xml;charset=ASCII"}, + "application/xml;charset=ASCII", + "Blob request with unset type keeps setRequestHeader() Content-Type and charset" + ) + request( + function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, + {"Content-Type": ""}, + "", + 'Blob request with set type respects setRequestHeader("") to be specified' + ) + request( + function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, + {}, + "application/xml;charset=ascii", // new Blob lowercases the type argument + "Blob request with set type uses that it for Content-Type unless setRequestHeader()" + ) + request( + function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=UTF8"}); }, + {"Content-Type": "application/xml+junk;charset=ASCII"}, + "application/xml+junk;charset=ASCII", + "Blob request with set type keeps setRequestHeader() Content-Type and charset" + ) + request( + function _ArrayBuffer() { return new ArrayBuffer(10); }, + {"Content-Type": ""}, + "", + 'ArrayBuffer request respects setRequestHeader("")' + ) + request( + function _ArrayBuffer() { return new ArrayBuffer(10); }, + {}, + undefined, + "ArrayBuffer request sends no Content-Type without setRequestHeader() call" + ) + request( + function _ArrayBuffer() { return new ArrayBuffer(10); }, + {"Content-Type": "application/xml;charset=ASCII"}, + "application/xml;charset=ASCII", + "ArrayBuffer request keeps setRequestHeader() Content-Type and charset" + ) + request( + function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, + {"Content-Type": ""}, + "", + 'ArrayBufferView request respects setRequestHeader("")' + ) + request( + function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, + {}, + undefined, + "ArrayBufferView request sends no Content-Type without setRequestHeader() call" + ) + request( + function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, + {"Content-Type": "application/xml;charset=ASCII"}, + "application/xml;charset=ASCII", + "ArrayBufferView request keeps setRequestHeader() Content-Type and charset" + ) + request( + function _FormData() { return new FormData(); }, + {"Content-Type": ""}, + "", + 'FormData request respects setRequestHeader("")' + ) + request( + function _FormData() { return new FormData(); }, + {}, + /multipart\/form-data; boundary=(.*)/, + 'FormData request has correct default Content-Type of "multipart\/form-data; boundary=_"' + ) + request( + function _FormData() { return new FormData(); }, + {"Content-Type": "application/xml;charset=ASCII"}, + "application/xml;charset=ASCII", + "FormData request keeps setRequestHeader() Content-Type and charset" + ) + request( + function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, + {"Content-Type": ""}, + "", + 'URLSearchParams respects setRequestHeader("")' + ) + request( + function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, + {}, + "application/x-www-form-urlencoded;charset=UTF-8", + 'URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8"' + ) + request( + function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, + {"Content-Type": "application/xml;charset=ASCII"}, + "application/xml;charset=UTF-8", + "URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" + // the default Content-Type for URLSearchParams has a charset specified (utf-8) in + // https://fetch.spec.whatwg.org/#bodyinit, so the user's must be changed to match it + // as per https://xhr.spec.whatwg.org/#the-send%28%29-method step 4. + ) + </script> + </body> +</html> |