Import WPT mimesniff resources
[WebKit-https.git] / LayoutTests / imported / w3c / web-platform-tests / mimesniff / mime-types / parsing.any.js
1 // META: timeout=long
2
3 promise_test(() => {
4   return Promise.all([
5     fetch("resources/mime-types.json"),
6     fetch("resources/generated-mime-types.json")
7   ]).then(([res, res2]) => res.json().then(runTests).then(() => res2.json().then(runTests)));
8 }, "Loading data‚Ķ");
9
10 function isByteCompatible(str) {
11   for(let i = 0; i < str.length; i++) {
12     const charCode = str.charCodeAt(i);
13     // See https://github.com/web-platform-tests/wpt/issues/8372 for 0x0B and 0x0C
14     // See https://fetch.spec.whatwg.org/#concept-header-value for the remainder
15     if(charCode > 0xFF) {
16       return "incompatible";
17     } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) {
18       return "header-value-incompatible";
19     } else if(charCode === 0x0B || charCode === 0x0C) {
20       return "wptserve-incompatible";
21     }
22   }
23   return "compatible";
24 }
25
26 function runTests(tests) {
27   tests.forEach(val => {
28     if(typeof val === "string") {
29       return;
30     }
31     const output = val.output === null ? "" : val.output
32     test(() => {
33       assert_equals(new Blob([], { type: val.input}).type, output, "Blob");
34       assert_equals(new File([], "noname", { type: val.input}).type, output, "File");
35     }, val.input + " (Blob/File)");
36
37     promise_test(() => {
38       const compatibleNess = isByteCompatible(val.input);
39       if(compatibleNess === "incompatible" || compatibleNess === "header-value-incompatible") {
40         assert_throws(new TypeError(), () => new Request("about:blank", { headers: [["Content-Type", val.input]] }));
41         assert_throws(new TypeError(), () => new Response(null, { headers: [["Content-Type", val.input]] }));
42         return Promise.resolve();
43       } else {
44         return Promise.all([
45           new Request("about:blank", { headers: [["Content-Type", val.input]] }).blob().then(blob => assert_equals(blob.type, output)),
46           new Response(null, { headers: [["Content-Type", val.input]] }).blob().then(blob => assert_equals(blob.type, output))
47         ]);
48       }
49     }, val.input + " (Request/Response)");
50   });
51 }