summaryrefslogtreecommitdiffstats
path: root/test/wpt/tests/mimesniff
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-21 20:56:19 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-21 20:56:19 +0000
commit0b6210cd37b68b94252cb798598b12974a20e1c1 (patch)
treee371686554a877842d95aa94f100bee552ff2a8e /test/wpt/tests/mimesniff
parentInitial commit. (diff)
downloadnode-undici-upstream.tar.xz
node-undici-upstream.zip
Adding upstream version 5.28.2+dfsg1+~cs23.11.12.3.upstream/5.28.2+dfsg1+_cs23.11.12.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'test/wpt/tests/mimesniff')
-rw-r--r--test/wpt/tests/mimesniff/META.yml3
-rw-r--r--test/wpt/tests/mimesniff/README.md4
-rw-r--r--test/wpt/tests/mimesniff/media/media-sniff.window.js32
-rw-r--r--test/wpt/tests/mimesniff/media/resources/flac.flacbin0 -> 8493 bytes
-rw-r--r--test/wpt/tests/mimesniff/media/resources/make-vectors.sh10
-rw-r--r--test/wpt/tests/mimesniff/media/resources/mp3-raw.mp3bin0 -> 417 bytes
-rw-r--r--test/wpt/tests/mimesniff/media/resources/mp3-with-id3.mp3bin0 -> 644 bytes
-rw-r--r--test/wpt/tests/mimesniff/media/resources/mp4.mp4bin0 -> 1231 bytes
-rw-r--r--test/wpt/tests/mimesniff/media/resources/ogg.oggbin0 -> 3594 bytes
-rw-r--r--test/wpt/tests/mimesniff/media/resources/wav.wavbin0 -> 486 bytes
-rw-r--r--test/wpt/tests/mimesniff/media/resources/webm.webmbin0 -> 877 bytes
-rw-r--r--test/wpt/tests/mimesniff/mime-types/README.md47
-rw-r--r--test/wpt/tests/mimesniff/mime-types/charset-parameter.window.js61
-rw-r--r--test/wpt/tests/mimesniff/mime-types/parsing.any.js57
-rw-r--r--test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.json3526
-rw-r--r--test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.py48
-rw-r--r--test/wpt/tests/mimesniff/mime-types/resources/mime-charset.py19
-rw-r--r--test/wpt/tests/mimesniff/mime-types/resources/mime-groups.json159
-rw-r--r--test/wpt/tests/mimesniff/mime-types/resources/mime-types.json397
19 files changed, 4363 insertions, 0 deletions
diff --git a/test/wpt/tests/mimesniff/META.yml b/test/wpt/tests/mimesniff/META.yml
new file mode 100644
index 0000000..fd41c87
--- /dev/null
+++ b/test/wpt/tests/mimesniff/META.yml
@@ -0,0 +1,3 @@
+spec: https://mimesniff.spec.whatwg.org/
+suggested_reviewers:
+ - annevk
diff --git a/test/wpt/tests/mimesniff/README.md b/test/wpt/tests/mimesniff/README.md
new file mode 100644
index 0000000..4687cce
--- /dev/null
+++ b/test/wpt/tests/mimesniff/README.md
@@ -0,0 +1,4 @@
+Tests for the [MIME Sniffing Standard](https://mimesniff.spec.whatwg.org/).
+
+Some tests are generated from data files. To update the generated
+tests, run `wpt update-built --include mimesniff`
diff --git a/test/wpt/tests/mimesniff/media/media-sniff.window.js b/test/wpt/tests/mimesniff/media/media-sniff.window.js
new file mode 100644
index 0000000..8e9bf9a
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/media-sniff.window.js
@@ -0,0 +1,32 @@
+const tests = {
+ "vectors": [
+ "mp3-raw.mp3",
+ "mp3-with-id3.mp3",
+ "flac.flac",
+ "ogg.ogg",
+ "mp4.mp4",
+ "wav.wav",
+ "webm.webm"
+ ],
+ "contentTypes": [
+ "",
+ "bogus/mime",
+ "application/octet-stream",
+ "text/html",
+ "audio/ogg; codec=vorbis",
+ "application/pdf"
+ ]
+};
+
+tests.vectors.forEach(vector => {
+ tests.contentTypes.forEach(type => {
+ async_test(t => {
+ const element = document.createElement("audio");
+ element.src = "resources/" + vector + "?pipe=header(Content-Type,"+type+")"
+
+ element.addEventListener("error", t.unreached_func("No error expected frorm the HTMLMediaElement"));
+ element.addEventListener("loadedmetadata", t.step_func_done());
+ element.load();
+ }, vector + " loads when served with Content-Type " + type);
+ });
+});
diff --git a/test/wpt/tests/mimesniff/media/resources/flac.flac b/test/wpt/tests/mimesniff/media/resources/flac.flac
new file mode 100644
index 0000000..747ed38
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/flac.flac
Binary files differ
diff --git a/test/wpt/tests/mimesniff/media/resources/make-vectors.sh b/test/wpt/tests/mimesniff/media/resources/make-vectors.sh
new file mode 100644
index 0000000..2cc0d46
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/make-vectors.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+INPUT=wav.wav
+sox -V -r 44100 -n -b 8 -c 1 wav.wav synth 0.01 sin 330 vol -6db
+ffmpeg -i $INPUT -write_xing 0 -id3v2_version 0 mp3-raw.mp3
+ffmpeg -i $INPUT mp3-with-id3.mp3
+ffmpeg -i $INPUT flac.flac
+ffmpeg -i $INPUT ogg.ogg
+ffmpeg -i $INPUT mp4.mp4
+ffmpeg -i $INPUT webm.webm
diff --git a/test/wpt/tests/mimesniff/media/resources/mp3-raw.mp3 b/test/wpt/tests/mimesniff/media/resources/mp3-raw.mp3
new file mode 100644
index 0000000..dcc5240
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/mp3-raw.mp3
Binary files differ
diff --git a/test/wpt/tests/mimesniff/media/resources/mp3-with-id3.mp3 b/test/wpt/tests/mimesniff/media/resources/mp3-with-id3.mp3
new file mode 100644
index 0000000..a6a2451
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/mp3-with-id3.mp3
Binary files differ
diff --git a/test/wpt/tests/mimesniff/media/resources/mp4.mp4 b/test/wpt/tests/mimesniff/media/resources/mp4.mp4
new file mode 100644
index 0000000..abefb4f
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/mp4.mp4
Binary files differ
diff --git a/test/wpt/tests/mimesniff/media/resources/ogg.ogg b/test/wpt/tests/mimesniff/media/resources/ogg.ogg
new file mode 100644
index 0000000..ba0b182
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/ogg.ogg
Binary files differ
diff --git a/test/wpt/tests/mimesniff/media/resources/wav.wav b/test/wpt/tests/mimesniff/media/resources/wav.wav
new file mode 100644
index 0000000..5229388
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/wav.wav
Binary files differ
diff --git a/test/wpt/tests/mimesniff/media/resources/webm.webm b/test/wpt/tests/mimesniff/media/resources/webm.webm
new file mode 100644
index 0000000..32a4af8
--- /dev/null
+++ b/test/wpt/tests/mimesniff/media/resources/webm.webm
Binary files differ
diff --git a/test/wpt/tests/mimesniff/mime-types/README.md b/test/wpt/tests/mimesniff/mime-types/README.md
new file mode 100644
index 0000000..eb5fba0
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/README.md
@@ -0,0 +1,47 @@
+## MIME types
+
+`resources/mime-types.json` and `resources/generated-mime-types.json` contain MIME type tests. The tests are encoded as a JSON array. String values in the array serve as documentation. All other values are objects with the following fields:
+
+* `input`: The string to be parsed.
+* `output`: Null if parsing resulted in failure and the MIME type record serialized as string otherwise.
+* `navigable`: True if the MIME type can be used for a document to be loaded in a browsing context (i.e., does not result in a download) and omitted otherwise.
+* `encoding`: The encoding that can be extracted from the MIME type or null if no encoding can be extracted, and omitted otherwise.
+
+Note: the object description implies that there tests without `navigable` or `encoding` set.
+
+A wrapper for these JSON MIME type tests needs to take care that not all `input` values can be tested in all entrypoints. Some entrypoints only accept bytes and some have further restrictions. A function such as the one below can be used to differentiate:
+
+```js
+function isByteCompatible(str) {
+ // see https://fetch.spec.whatwg.org/#concept-header-value-normalize
+ if(/^[\u0009\u0020\u000A\u000D]+|[\u0009\u0020\u000A\u000D]+$/.test(str)) {
+ return "header-value-incompatible";
+ }
+
+ for(let i = 0; i < str.length; i++) {
+ const charCode = str.charCodeAt(i);
+ // See https://fetch.spec.whatwg.org/#concept-header-value
+ if(charCode > 0xFF) {
+ return "incompatible";
+ } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) {
+ return "header-value-incompatible";
+ }
+ }
+ return "compatible";
+}
+```
+
+`resources/generated-mime-types.json` is generated by running `resources/generated-mime-types.py`. Modify the latter to correct the former.
+
+These tests are used by resources in this directory to test various aspects of MIME types.
+
+## MIME type groups
+
+`resources/mime-groups.json` contains MIME type group-membership tests. The tests are encoded as a JSON array. String values in the array serve as documentation. All other values are objects with the following fields:
+
+* `input`: The MIME type to test.
+* `groups`: An array of zero or more groups to which the MIME type belongs.
+
+In order to pass the tests an implementation must treat each MIME type as belonging to the exact set of groups listed, with no additions or omissions.
+
+Note: As MIME type groups are used only while determining the computed MIME type of a resource and are not exposed in any API, no browser-based test harness is available.
diff --git a/test/wpt/tests/mimesniff/mime-types/charset-parameter.window.js b/test/wpt/tests/mimesniff/mime-types/charset-parameter.window.js
new file mode 100644
index 0000000..923c3a3
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/charset-parameter.window.js
@@ -0,0 +1,61 @@
+// META: timeout=long
+
+promise_test(() => {
+ // Don't load generated-mime-types.json as none of them are navigable
+ return fetch("resources/mime-types.json").then(res => res.json().then(runTests));
+}, "Loading data…");
+
+function isByteCompatible(str) {
+ // see https://fetch.spec.whatwg.org/#concept-header-value-normalize
+ if(/^[\u0009\u0020\u000A\u000D]+|[\u0009\u0020\u000A\u000D]+$/.test(str)) {
+ return "header-value-incompatible";
+ }
+
+ for(let i = 0; i < str.length; i++) {
+ const charCode = str.charCodeAt(i);
+ // See https://fetch.spec.whatwg.org/#concept-header-value
+ if(charCode > 0xFF) {
+ return "incompatible";
+ } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) {
+ return "header-value-error";
+ }
+ }
+ return "compatible";
+}
+
+function encodeForURL(str) {
+ let output = "";
+ for(let i = 0; i < str.length; i++) {
+ const char = str.charCodeAt(i);
+ if(char > 0xFF) {
+ throw new Error("We cannot deal with input that is not latin1");
+ } else {
+ output += "%" + char.toString(16).padStart(2, "0");
+ }
+ }
+ return output;
+}
+
+function runTests(tests) {
+ tests.forEach(val => {
+ if(typeof val === "string" || val.navigable === undefined || val.encoding === undefined || isByteCompatible(val.input) !== "compatible") {
+ return;
+ }
+ const mime = val.input;
+ async_test(t => {
+ const frame = document.createElement("iframe"),
+ expectedEncoding = val.encoding === null ? "UTF-8" : val.encoding;
+ t.add_cleanup(() => frame.remove());
+ frame.onload = t.step_func(() => {
+ if(frame.contentWindow.location.href === "about:blank") {
+ return;
+ }
+ // Edge fails all these tests due to not using the correct encoding label.
+ assert_equals(frame.contentDocument.characterSet, expectedEncoding);
+ t.done();
+ });
+ frame.src = "resources/mime-charset.py?type=" + encodeForURL(mime);
+ document.body.appendChild(frame);
+ }, mime);
+ });
+}
diff --git a/test/wpt/tests/mimesniff/mime-types/parsing.any.js b/test/wpt/tests/mimesniff/mime-types/parsing.any.js
new file mode 100644
index 0000000..93be6bf
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/parsing.any.js
@@ -0,0 +1,57 @@
+// META: timeout=long
+
+promise_test(() => {
+ return Promise.all([
+ fetch("resources/mime-types.json"),
+ fetch("resources/generated-mime-types.json")
+ ]).then(([res, res2]) => res.json().then(runTests).then(() => res2.json().then(runTests)));
+}, "Loading data…");
+
+function isByteCompatible(str) {
+ // see https://fetch.spec.whatwg.org/#concept-header-value-normalize
+ if(/^[\u0009\u0020\u000A\u000D]+|[\u0009\u0020\u000A\u000D]+$/.test(str)) {
+ return "header-value-incompatible";
+ }
+
+ for(let i = 0; i < str.length; i++) {
+ const charCode = str.charCodeAt(i);
+ // See https://fetch.spec.whatwg.org/#concept-header-value
+ if(charCode > 0xFF) {
+ return "incompatible";
+ } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) {
+ return "header-value-error";
+ }
+ }
+ return "compatible";
+}
+
+function runTests(tests) {
+ tests.forEach(val => {
+ if(typeof val === "string") {
+ return;
+ }
+ const output = val.output === null ? "" : val.output
+ test(() => {
+ assert_equals(new Blob([], { type: val.input}).type, output, "Blob");
+ assert_equals(new File([], "noname", { type: val.input}).type, output, "File");
+ }, val.input + " (Blob/File)");
+
+ const compatibleNess = isByteCompatible(val.input);
+ if(compatibleNess === "header-value-incompatible") {
+ return;
+ }
+
+ promise_test(() => {
+ if(compatibleNess === "incompatible" || compatibleNess === "header-value-error") {
+ assert_throws_js(TypeError, () => new Request("about:blank", { headers: [["Content-Type", val.input]] }));
+ assert_throws_js(TypeError, () => new Response(null, { headers: [["Content-Type", val.input]] }));
+ return Promise.resolve();
+ } else {
+ return Promise.all([
+ new Request("about:blank", { headers: [["Content-Type", val.input]] }).blob().then(blob => assert_equals(blob.type, output)),
+ new Response(null, { headers: [["Content-Type", val.input]] }).blob().then(blob => assert_equals(blob.type, output))
+ ]);
+ }
+ }, val.input + " (Request/Response)");
+ });
+}
diff --git a/test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.json b/test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.json
new file mode 100644
index 0000000..f8934da
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.json
@@ -0,0 +1,3526 @@
+[
+ {
+ "input": "\u0000/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0000",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0000=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0000;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0000\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0001/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0001",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0001=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0001;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0001\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0002/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0002",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0002=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0002;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0002\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0003/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0003",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0003=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0003;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0003\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0004/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0004",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0004=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0004;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0004\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0005/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0005",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0005=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0005;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0005\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0006/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0006",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0006=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0006;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0006\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0007/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0007",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0007=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0007;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0007\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\b/x",
+ "output": null
+ },
+ {
+ "input": "x/\b",
+ "output": null
+ },
+ {
+ "input": "x/x;\b=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\b;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\b\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\t/x",
+ "output": null
+ },
+ {
+ "input": "x/\t",
+ "output": null
+ },
+ {
+ "input": "x/x;\t=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\n/x",
+ "output": null
+ },
+ {
+ "input": "x/\n",
+ "output": null
+ },
+ {
+ "input": "x/x;\n=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\n;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\n\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u000b/x",
+ "output": null
+ },
+ {
+ "input": "x/\u000b",
+ "output": null
+ },
+ {
+ "input": "x/x;\u000b=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u000b;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u000b\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\f/x",
+ "output": null
+ },
+ {
+ "input": "x/\f",
+ "output": null
+ },
+ {
+ "input": "x/x;\f=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\f;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\f\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\r/x",
+ "output": null
+ },
+ {
+ "input": "x/\r",
+ "output": null
+ },
+ {
+ "input": "x/x;\r=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\r;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\r\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u000e/x",
+ "output": null
+ },
+ {
+ "input": "x/\u000e",
+ "output": null
+ },
+ {
+ "input": "x/x;\u000e=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u000e;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u000e\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u000f/x",
+ "output": null
+ },
+ {
+ "input": "x/\u000f",
+ "output": null
+ },
+ {
+ "input": "x/x;\u000f=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u000f;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u000f\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0010/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0010",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0010=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0010;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0010\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0011/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0011",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0011=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0011;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0011\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0012/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0012",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0012=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0012;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0012\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0013/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0013",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0013=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0013;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0013\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0014/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0014",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0014=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0014;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0014\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0015/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0015",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0015=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0015;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0015\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0016/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0016",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0016=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0016;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0016\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0017/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0017",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0017=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0017;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0017\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0018/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0018",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0018=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0018;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0018\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0019/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0019",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0019=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0019;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0019\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u001a/x",
+ "output": null
+ },
+ {
+ "input": "x/\u001a",
+ "output": null
+ },
+ {
+ "input": "x/x;\u001a=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u001a;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u001a\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u001b/x",
+ "output": null
+ },
+ {
+ "input": "x/\u001b",
+ "output": null
+ },
+ {
+ "input": "x/x;\u001b=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u001b;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u001b\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u001c/x",
+ "output": null
+ },
+ {
+ "input": "x/\u001c",
+ "output": null
+ },
+ {
+ "input": "x/x;\u001c=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u001c;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u001c\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u001d/x",
+ "output": null
+ },
+ {
+ "input": "x/\u001d",
+ "output": null
+ },
+ {
+ "input": "x/x;\u001d=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u001d;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u001d\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u001e/x",
+ "output": null
+ },
+ {
+ "input": "x/\u001e",
+ "output": null
+ },
+ {
+ "input": "x/x;\u001e=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u001e;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u001e\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u001f/x",
+ "output": null
+ },
+ {
+ "input": "x/\u001f",
+ "output": null
+ },
+ {
+ "input": "x/x;\u001f=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u001f;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u001f\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": " /x",
+ "output": null
+ },
+ {
+ "input": "x/ ",
+ "output": null
+ },
+ {
+ "input": "x/x; =x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\"/x",
+ "output": null
+ },
+ {
+ "input": "x/\"",
+ "output": null
+ },
+ {
+ "input": "x/x;\"=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "(/x",
+ "output": null
+ },
+ {
+ "input": "x/(",
+ "output": null
+ },
+ {
+ "input": "x/x;(=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=(;bonus=x",
+ "output": "x/x;x=\"(\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"(\";bonus=x",
+ "output": "x/x;x=\"(\";bonus=x"
+ },
+ {
+ "input": ")/x",
+ "output": null
+ },
+ {
+ "input": "x/)",
+ "output": null
+ },
+ {
+ "input": "x/x;)=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=);bonus=x",
+ "output": "x/x;x=\")\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\")\";bonus=x",
+ "output": "x/x;x=\")\";bonus=x"
+ },
+ {
+ "input": ",/x",
+ "output": null
+ },
+ {
+ "input": "x/,",
+ "output": null
+ },
+ {
+ "input": "x/x;,=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=,;bonus=x",
+ "output": "x/x;x=\",\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\",\";bonus=x",
+ "output": "x/x;x=\",\";bonus=x"
+ },
+ {
+ "input": "x/x;/=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=/;bonus=x",
+ "output": "x/x;x=\"/\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"/\";bonus=x",
+ "output": "x/x;x=\"/\";bonus=x"
+ },
+ {
+ "input": ":/x",
+ "output": null
+ },
+ {
+ "input": "x/:",
+ "output": null
+ },
+ {
+ "input": "x/x;:=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=:;bonus=x",
+ "output": "x/x;x=\":\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\":\";bonus=x",
+ "output": "x/x;x=\":\";bonus=x"
+ },
+ {
+ "input": ";/x",
+ "output": null
+ },
+ {
+ "input": "x/;",
+ "output": null
+ },
+ {
+ "input": "</x",
+ "output": null
+ },
+ {
+ "input": "x/<",
+ "output": null
+ },
+ {
+ "input": "x/x;<=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=<;bonus=x",
+ "output": "x/x;x=\"<\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"<\";bonus=x",
+ "output": "x/x;x=\"<\";bonus=x"
+ },
+ {
+ "input": "=/x",
+ "output": null
+ },
+ {
+ "input": "x/=",
+ "output": null
+ },
+ {
+ "input": "x/x;x==;bonus=x",
+ "output": "x/x;x=\"=\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"=\";bonus=x",
+ "output": "x/x;x=\"=\";bonus=x"
+ },
+ {
+ "input": ">/x",
+ "output": null
+ },
+ {
+ "input": "x/>",
+ "output": null
+ },
+ {
+ "input": "x/x;>=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=>;bonus=x",
+ "output": "x/x;x=\">\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\">\";bonus=x",
+ "output": "x/x;x=\">\";bonus=x"
+ },
+ {
+ "input": "?/x",
+ "output": null
+ },
+ {
+ "input": "x/?",
+ "output": null
+ },
+ {
+ "input": "x/x;?=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=?;bonus=x",
+ "output": "x/x;x=\"?\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"?\";bonus=x",
+ "output": "x/x;x=\"?\";bonus=x"
+ },
+ {
+ "input": "@/x",
+ "output": null
+ },
+ {
+ "input": "x/@",
+ "output": null
+ },
+ {
+ "input": "x/x;@=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=@;bonus=x",
+ "output": "x/x;x=\"@\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"@\";bonus=x",
+ "output": "x/x;x=\"@\";bonus=x"
+ },
+ {
+ "input": "[/x",
+ "output": null
+ },
+ {
+ "input": "x/[",
+ "output": null
+ },
+ {
+ "input": "x/x;[=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=[;bonus=x",
+ "output": "x/x;x=\"[\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"[\";bonus=x",
+ "output": "x/x;x=\"[\";bonus=x"
+ },
+ {
+ "input": "\\/x",
+ "output": null
+ },
+ {
+ "input": "x/\\",
+ "output": null
+ },
+ {
+ "input": "x/x;\\=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "]/x",
+ "output": null
+ },
+ {
+ "input": "x/]",
+ "output": null
+ },
+ {
+ "input": "x/x;]=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=];bonus=x",
+ "output": "x/x;x=\"]\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"]\";bonus=x",
+ "output": "x/x;x=\"]\";bonus=x"
+ },
+ {
+ "input": "{/x",
+ "output": null
+ },
+ {
+ "input": "x/{",
+ "output": null
+ },
+ {
+ "input": "x/x;{=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x={;bonus=x",
+ "output": "x/x;x=\"{\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"{\";bonus=x",
+ "output": "x/x;x=\"{\";bonus=x"
+ },
+ {
+ "input": "}/x",
+ "output": null
+ },
+ {
+ "input": "x/}",
+ "output": null
+ },
+ {
+ "input": "x/x;}=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=};bonus=x",
+ "output": "x/x;x=\"}\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"}\";bonus=x",
+ "output": "x/x;x=\"}\";bonus=x"
+ },
+ {
+ "input": "\u007f/x",
+ "output": null
+ },
+ {
+ "input": "x/\u007f",
+ "output": null
+ },
+ {
+ "input": "x/x;\u007f=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u007f;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u007f\";bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "\u0080/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0080",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0080=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0080;bonus=x",
+ "output": "x/x;x=\"\u0080\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0080\";bonus=x",
+ "output": "x/x;x=\"\u0080\";bonus=x"
+ },
+ {
+ "input": "\u0081/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0081",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0081=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0081;bonus=x",
+ "output": "x/x;x=\"\u0081\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0081\";bonus=x",
+ "output": "x/x;x=\"\u0081\";bonus=x"
+ },
+ {
+ "input": "\u0082/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0082",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0082=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0082;bonus=x",
+ "output": "x/x;x=\"\u0082\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0082\";bonus=x",
+ "output": "x/x;x=\"\u0082\";bonus=x"
+ },
+ {
+ "input": "\u0083/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0083",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0083=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0083;bonus=x",
+ "output": "x/x;x=\"\u0083\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0083\";bonus=x",
+ "output": "x/x;x=\"\u0083\";bonus=x"
+ },
+ {
+ "input": "\u0084/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0084",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0084=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0084;bonus=x",
+ "output": "x/x;x=\"\u0084\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0084\";bonus=x",
+ "output": "x/x;x=\"\u0084\";bonus=x"
+ },
+ {
+ "input": "\u0085/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0085",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0085=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0085;bonus=x",
+ "output": "x/x;x=\"\u0085\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0085\";bonus=x",
+ "output": "x/x;x=\"\u0085\";bonus=x"
+ },
+ {
+ "input": "\u0086/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0086",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0086=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0086;bonus=x",
+ "output": "x/x;x=\"\u0086\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0086\";bonus=x",
+ "output": "x/x;x=\"\u0086\";bonus=x"
+ },
+ {
+ "input": "\u0087/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0087",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0087=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0087;bonus=x",
+ "output": "x/x;x=\"\u0087\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0087\";bonus=x",
+ "output": "x/x;x=\"\u0087\";bonus=x"
+ },
+ {
+ "input": "\u0088/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0088",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0088=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0088;bonus=x",
+ "output": "x/x;x=\"\u0088\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0088\";bonus=x",
+ "output": "x/x;x=\"\u0088\";bonus=x"
+ },
+ {
+ "input": "\u0089/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0089",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0089=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0089;bonus=x",
+ "output": "x/x;x=\"\u0089\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0089\";bonus=x",
+ "output": "x/x;x=\"\u0089\";bonus=x"
+ },
+ {
+ "input": "\u008a/x",
+ "output": null
+ },
+ {
+ "input": "x/\u008a",
+ "output": null
+ },
+ {
+ "input": "x/x;\u008a=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u008a;bonus=x",
+ "output": "x/x;x=\"\u008a\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u008a\";bonus=x",
+ "output": "x/x;x=\"\u008a\";bonus=x"
+ },
+ {
+ "input": "\u008b/x",
+ "output": null
+ },
+ {
+ "input": "x/\u008b",
+ "output": null
+ },
+ {
+ "input": "x/x;\u008b=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u008b;bonus=x",
+ "output": "x/x;x=\"\u008b\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u008b\";bonus=x",
+ "output": "x/x;x=\"\u008b\";bonus=x"
+ },
+ {
+ "input": "\u008c/x",
+ "output": null
+ },
+ {
+ "input": "x/\u008c",
+ "output": null
+ },
+ {
+ "input": "x/x;\u008c=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u008c;bonus=x",
+ "output": "x/x;x=\"\u008c\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u008c\";bonus=x",
+ "output": "x/x;x=\"\u008c\";bonus=x"
+ },
+ {
+ "input": "\u008d/x",
+ "output": null
+ },
+ {
+ "input": "x/\u008d",
+ "output": null
+ },
+ {
+ "input": "x/x;\u008d=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u008d;bonus=x",
+ "output": "x/x;x=\"\u008d\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u008d\";bonus=x",
+ "output": "x/x;x=\"\u008d\";bonus=x"
+ },
+ {
+ "input": "\u008e/x",
+ "output": null
+ },
+ {
+ "input": "x/\u008e",
+ "output": null
+ },
+ {
+ "input": "x/x;\u008e=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u008e;bonus=x",
+ "output": "x/x;x=\"\u008e\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u008e\";bonus=x",
+ "output": "x/x;x=\"\u008e\";bonus=x"
+ },
+ {
+ "input": "\u008f/x",
+ "output": null
+ },
+ {
+ "input": "x/\u008f",
+ "output": null
+ },
+ {
+ "input": "x/x;\u008f=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u008f;bonus=x",
+ "output": "x/x;x=\"\u008f\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u008f\";bonus=x",
+ "output": "x/x;x=\"\u008f\";bonus=x"
+ },
+ {
+ "input": "\u0090/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0090",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0090=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0090;bonus=x",
+ "output": "x/x;x=\"\u0090\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0090\";bonus=x",
+ "output": "x/x;x=\"\u0090\";bonus=x"
+ },
+ {
+ "input": "\u0091/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0091",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0091=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0091;bonus=x",
+ "output": "x/x;x=\"\u0091\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0091\";bonus=x",
+ "output": "x/x;x=\"\u0091\";bonus=x"
+ },
+ {
+ "input": "\u0092/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0092",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0092=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0092;bonus=x",
+ "output": "x/x;x=\"\u0092\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0092\";bonus=x",
+ "output": "x/x;x=\"\u0092\";bonus=x"
+ },
+ {
+ "input": "\u0093/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0093",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0093=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0093;bonus=x",
+ "output": "x/x;x=\"\u0093\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0093\";bonus=x",
+ "output": "x/x;x=\"\u0093\";bonus=x"
+ },
+ {
+ "input": "\u0094/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0094",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0094=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0094;bonus=x",
+ "output": "x/x;x=\"\u0094\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0094\";bonus=x",
+ "output": "x/x;x=\"\u0094\";bonus=x"
+ },
+ {
+ "input": "\u0095/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0095",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0095=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0095;bonus=x",
+ "output": "x/x;x=\"\u0095\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0095\";bonus=x",
+ "output": "x/x;x=\"\u0095\";bonus=x"
+ },
+ {
+ "input": "\u0096/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0096",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0096=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0096;bonus=x",
+ "output": "x/x;x=\"\u0096\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0096\";bonus=x",
+ "output": "x/x;x=\"\u0096\";bonus=x"
+ },
+ {
+ "input": "\u0097/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0097",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0097=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0097;bonus=x",
+ "output": "x/x;x=\"\u0097\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0097\";bonus=x",
+ "output": "x/x;x=\"\u0097\";bonus=x"
+ },
+ {
+ "input": "\u0098/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0098",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0098=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0098;bonus=x",
+ "output": "x/x;x=\"\u0098\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0098\";bonus=x",
+ "output": "x/x;x=\"\u0098\";bonus=x"
+ },
+ {
+ "input": "\u0099/x",
+ "output": null
+ },
+ {
+ "input": "x/\u0099",
+ "output": null
+ },
+ {
+ "input": "x/x;\u0099=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u0099;bonus=x",
+ "output": "x/x;x=\"\u0099\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u0099\";bonus=x",
+ "output": "x/x;x=\"\u0099\";bonus=x"
+ },
+ {
+ "input": "\u009a/x",
+ "output": null
+ },
+ {
+ "input": "x/\u009a",
+ "output": null
+ },
+ {
+ "input": "x/x;\u009a=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u009a;bonus=x",
+ "output": "x/x;x=\"\u009a\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u009a\";bonus=x",
+ "output": "x/x;x=\"\u009a\";bonus=x"
+ },
+ {
+ "input": "\u009b/x",
+ "output": null
+ },
+ {
+ "input": "x/\u009b",
+ "output": null
+ },
+ {
+ "input": "x/x;\u009b=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u009b;bonus=x",
+ "output": "x/x;x=\"\u009b\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u009b\";bonus=x",
+ "output": "x/x;x=\"\u009b\";bonus=x"
+ },
+ {
+ "input": "\u009c/x",
+ "output": null
+ },
+ {
+ "input": "x/\u009c",
+ "output": null
+ },
+ {
+ "input": "x/x;\u009c=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u009c;bonus=x",
+ "output": "x/x;x=\"\u009c\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u009c\";bonus=x",
+ "output": "x/x;x=\"\u009c\";bonus=x"
+ },
+ {
+ "input": "\u009d/x",
+ "output": null
+ },
+ {
+ "input": "x/\u009d",
+ "output": null
+ },
+ {
+ "input": "x/x;\u009d=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u009d;bonus=x",
+ "output": "x/x;x=\"\u009d\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u009d\";bonus=x",
+ "output": "x/x;x=\"\u009d\";bonus=x"
+ },
+ {
+ "input": "\u009e/x",
+ "output": null
+ },
+ {
+ "input": "x/\u009e",
+ "output": null
+ },
+ {
+ "input": "x/x;\u009e=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u009e;bonus=x",
+ "output": "x/x;x=\"\u009e\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u009e\";bonus=x",
+ "output": "x/x;x=\"\u009e\";bonus=x"
+ },
+ {
+ "input": "\u009f/x",
+ "output": null
+ },
+ {
+ "input": "x/\u009f",
+ "output": null
+ },
+ {
+ "input": "x/x;\u009f=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u009f;bonus=x",
+ "output": "x/x;x=\"\u009f\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u009f\";bonus=x",
+ "output": "x/x;x=\"\u009f\";bonus=x"
+ },
+ {
+ "input": "\u00a0/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a0",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a0=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a0;bonus=x",
+ "output": "x/x;x=\"\u00a0\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a0\";bonus=x",
+ "output": "x/x;x=\"\u00a0\";bonus=x"
+ },
+ {
+ "input": "\u00a1/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a1",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a1=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a1;bonus=x",
+ "output": "x/x;x=\"\u00a1\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a1\";bonus=x",
+ "output": "x/x;x=\"\u00a1\";bonus=x"
+ },
+ {
+ "input": "\u00a2/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a2",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a2=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a2;bonus=x",
+ "output": "x/x;x=\"\u00a2\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a2\";bonus=x",
+ "output": "x/x;x=\"\u00a2\";bonus=x"
+ },
+ {
+ "input": "\u00a3/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a3",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a3=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a3;bonus=x",
+ "output": "x/x;x=\"\u00a3\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a3\";bonus=x",
+ "output": "x/x;x=\"\u00a3\";bonus=x"
+ },
+ {
+ "input": "\u00a4/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a4",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a4=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a4;bonus=x",
+ "output": "x/x;x=\"\u00a4\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a4\";bonus=x",
+ "output": "x/x;x=\"\u00a4\";bonus=x"
+ },
+ {
+ "input": "\u00a5/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a5",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a5=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a5;bonus=x",
+ "output": "x/x;x=\"\u00a5\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a5\";bonus=x",
+ "output": "x/x;x=\"\u00a5\";bonus=x"
+ },
+ {
+ "input": "\u00a6/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a6",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a6=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a6;bonus=x",
+ "output": "x/x;x=\"\u00a6\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a6\";bonus=x",
+ "output": "x/x;x=\"\u00a6\";bonus=x"
+ },
+ {
+ "input": "\u00a7/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a7",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a7=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a7;bonus=x",
+ "output": "x/x;x=\"\u00a7\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a7\";bonus=x",
+ "output": "x/x;x=\"\u00a7\";bonus=x"
+ },
+ {
+ "input": "\u00a8/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a8",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a8=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a8;bonus=x",
+ "output": "x/x;x=\"\u00a8\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a8\";bonus=x",
+ "output": "x/x;x=\"\u00a8\";bonus=x"
+ },
+ {
+ "input": "\u00a9/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00a9",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00a9=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00a9;bonus=x",
+ "output": "x/x;x=\"\u00a9\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00a9\";bonus=x",
+ "output": "x/x;x=\"\u00a9\";bonus=x"
+ },
+ {
+ "input": "\u00aa/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00aa",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00aa=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00aa;bonus=x",
+ "output": "x/x;x=\"\u00aa\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00aa\";bonus=x",
+ "output": "x/x;x=\"\u00aa\";bonus=x"
+ },
+ {
+ "input": "\u00ab/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ab",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ab=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ab;bonus=x",
+ "output": "x/x;x=\"\u00ab\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ab\";bonus=x",
+ "output": "x/x;x=\"\u00ab\";bonus=x"
+ },
+ {
+ "input": "\u00ac/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ac",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ac=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ac;bonus=x",
+ "output": "x/x;x=\"\u00ac\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ac\";bonus=x",
+ "output": "x/x;x=\"\u00ac\";bonus=x"
+ },
+ {
+ "input": "\u00ad/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ad",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ad=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ad;bonus=x",
+ "output": "x/x;x=\"\u00ad\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ad\";bonus=x",
+ "output": "x/x;x=\"\u00ad\";bonus=x"
+ },
+ {
+ "input": "\u00ae/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ae",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ae=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ae;bonus=x",
+ "output": "x/x;x=\"\u00ae\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ae\";bonus=x",
+ "output": "x/x;x=\"\u00ae\";bonus=x"
+ },
+ {
+ "input": "\u00af/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00af",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00af=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00af;bonus=x",
+ "output": "x/x;x=\"\u00af\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00af\";bonus=x",
+ "output": "x/x;x=\"\u00af\";bonus=x"
+ },
+ {
+ "input": "\u00b0/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b0",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b0=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b0;bonus=x",
+ "output": "x/x;x=\"\u00b0\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b0\";bonus=x",
+ "output": "x/x;x=\"\u00b0\";bonus=x"
+ },
+ {
+ "input": "\u00b1/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b1",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b1=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b1;bonus=x",
+ "output": "x/x;x=\"\u00b1\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b1\";bonus=x",
+ "output": "x/x;x=\"\u00b1\";bonus=x"
+ },
+ {
+ "input": "\u00b2/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b2",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b2=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b2;bonus=x",
+ "output": "x/x;x=\"\u00b2\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b2\";bonus=x",
+ "output": "x/x;x=\"\u00b2\";bonus=x"
+ },
+ {
+ "input": "\u00b3/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b3",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b3=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b3;bonus=x",
+ "output": "x/x;x=\"\u00b3\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b3\";bonus=x",
+ "output": "x/x;x=\"\u00b3\";bonus=x"
+ },
+ {
+ "input": "\u00b4/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b4",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b4=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b4;bonus=x",
+ "output": "x/x;x=\"\u00b4\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b4\";bonus=x",
+ "output": "x/x;x=\"\u00b4\";bonus=x"
+ },
+ {
+ "input": "\u00b5/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b5",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b5=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b5;bonus=x",
+ "output": "x/x;x=\"\u00b5\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b5\";bonus=x",
+ "output": "x/x;x=\"\u00b5\";bonus=x"
+ },
+ {
+ "input": "\u00b6/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b6",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b6=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b6;bonus=x",
+ "output": "x/x;x=\"\u00b6\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b6\";bonus=x",
+ "output": "x/x;x=\"\u00b6\";bonus=x"
+ },
+ {
+ "input": "\u00b7/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b7",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b7=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b7;bonus=x",
+ "output": "x/x;x=\"\u00b7\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b7\";bonus=x",
+ "output": "x/x;x=\"\u00b7\";bonus=x"
+ },
+ {
+ "input": "\u00b8/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b8",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b8=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b8;bonus=x",
+ "output": "x/x;x=\"\u00b8\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b8\";bonus=x",
+ "output": "x/x;x=\"\u00b8\";bonus=x"
+ },
+ {
+ "input": "\u00b9/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00b9",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00b9=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00b9;bonus=x",
+ "output": "x/x;x=\"\u00b9\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00b9\";bonus=x",
+ "output": "x/x;x=\"\u00b9\";bonus=x"
+ },
+ {
+ "input": "\u00ba/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ba",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ba=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ba;bonus=x",
+ "output": "x/x;x=\"\u00ba\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ba\";bonus=x",
+ "output": "x/x;x=\"\u00ba\";bonus=x"
+ },
+ {
+ "input": "\u00bb/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00bb",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00bb=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00bb;bonus=x",
+ "output": "x/x;x=\"\u00bb\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00bb\";bonus=x",
+ "output": "x/x;x=\"\u00bb\";bonus=x"
+ },
+ {
+ "input": "\u00bc/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00bc",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00bc=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00bc;bonus=x",
+ "output": "x/x;x=\"\u00bc\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00bc\";bonus=x",
+ "output": "x/x;x=\"\u00bc\";bonus=x"
+ },
+ {
+ "input": "\u00bd/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00bd",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00bd=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00bd;bonus=x",
+ "output": "x/x;x=\"\u00bd\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00bd\";bonus=x",
+ "output": "x/x;x=\"\u00bd\";bonus=x"
+ },
+ {
+ "input": "\u00be/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00be",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00be=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00be;bonus=x",
+ "output": "x/x;x=\"\u00be\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00be\";bonus=x",
+ "output": "x/x;x=\"\u00be\";bonus=x"
+ },
+ {
+ "input": "\u00bf/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00bf",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00bf=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00bf;bonus=x",
+ "output": "x/x;x=\"\u00bf\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00bf\";bonus=x",
+ "output": "x/x;x=\"\u00bf\";bonus=x"
+ },
+ {
+ "input": "\u00c0/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c0",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c0=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c0;bonus=x",
+ "output": "x/x;x=\"\u00c0\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c0\";bonus=x",
+ "output": "x/x;x=\"\u00c0\";bonus=x"
+ },
+ {
+ "input": "\u00c1/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c1",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c1=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c1;bonus=x",
+ "output": "x/x;x=\"\u00c1\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c1\";bonus=x",
+ "output": "x/x;x=\"\u00c1\";bonus=x"
+ },
+ {
+ "input": "\u00c2/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c2",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c2=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c2;bonus=x",
+ "output": "x/x;x=\"\u00c2\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c2\";bonus=x",
+ "output": "x/x;x=\"\u00c2\";bonus=x"
+ },
+ {
+ "input": "\u00c3/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c3",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c3=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c3;bonus=x",
+ "output": "x/x;x=\"\u00c3\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c3\";bonus=x",
+ "output": "x/x;x=\"\u00c3\";bonus=x"
+ },
+ {
+ "input": "\u00c4/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c4",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c4=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c4;bonus=x",
+ "output": "x/x;x=\"\u00c4\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c4\";bonus=x",
+ "output": "x/x;x=\"\u00c4\";bonus=x"
+ },
+ {
+ "input": "\u00c5/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c5",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c5=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c5;bonus=x",
+ "output": "x/x;x=\"\u00c5\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c5\";bonus=x",
+ "output": "x/x;x=\"\u00c5\";bonus=x"
+ },
+ {
+ "input": "\u00c6/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c6",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c6=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c6;bonus=x",
+ "output": "x/x;x=\"\u00c6\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c6\";bonus=x",
+ "output": "x/x;x=\"\u00c6\";bonus=x"
+ },
+ {
+ "input": "\u00c7/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c7",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c7=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c7;bonus=x",
+ "output": "x/x;x=\"\u00c7\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c7\";bonus=x",
+ "output": "x/x;x=\"\u00c7\";bonus=x"
+ },
+ {
+ "input": "\u00c8/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c8",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c8=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c8;bonus=x",
+ "output": "x/x;x=\"\u00c8\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c8\";bonus=x",
+ "output": "x/x;x=\"\u00c8\";bonus=x"
+ },
+ {
+ "input": "\u00c9/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00c9",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00c9=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00c9;bonus=x",
+ "output": "x/x;x=\"\u00c9\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00c9\";bonus=x",
+ "output": "x/x;x=\"\u00c9\";bonus=x"
+ },
+ {
+ "input": "\u00ca/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ca",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ca=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ca;bonus=x",
+ "output": "x/x;x=\"\u00ca\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ca\";bonus=x",
+ "output": "x/x;x=\"\u00ca\";bonus=x"
+ },
+ {
+ "input": "\u00cb/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00cb",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00cb=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00cb;bonus=x",
+ "output": "x/x;x=\"\u00cb\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00cb\";bonus=x",
+ "output": "x/x;x=\"\u00cb\";bonus=x"
+ },
+ {
+ "input": "\u00cc/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00cc",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00cc=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00cc;bonus=x",
+ "output": "x/x;x=\"\u00cc\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00cc\";bonus=x",
+ "output": "x/x;x=\"\u00cc\";bonus=x"
+ },
+ {
+ "input": "\u00cd/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00cd",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00cd=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00cd;bonus=x",
+ "output": "x/x;x=\"\u00cd\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00cd\";bonus=x",
+ "output": "x/x;x=\"\u00cd\";bonus=x"
+ },
+ {
+ "input": "\u00ce/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ce",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ce=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ce;bonus=x",
+ "output": "x/x;x=\"\u00ce\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ce\";bonus=x",
+ "output": "x/x;x=\"\u00ce\";bonus=x"
+ },
+ {
+ "input": "\u00cf/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00cf",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00cf=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00cf;bonus=x",
+ "output": "x/x;x=\"\u00cf\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00cf\";bonus=x",
+ "output": "x/x;x=\"\u00cf\";bonus=x"
+ },
+ {
+ "input": "\u00d0/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d0",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d0=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d0;bonus=x",
+ "output": "x/x;x=\"\u00d0\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d0\";bonus=x",
+ "output": "x/x;x=\"\u00d0\";bonus=x"
+ },
+ {
+ "input": "\u00d1/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d1",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d1=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d1;bonus=x",
+ "output": "x/x;x=\"\u00d1\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d1\";bonus=x",
+ "output": "x/x;x=\"\u00d1\";bonus=x"
+ },
+ {
+ "input": "\u00d2/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d2",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d2=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d2;bonus=x",
+ "output": "x/x;x=\"\u00d2\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d2\";bonus=x",
+ "output": "x/x;x=\"\u00d2\";bonus=x"
+ },
+ {
+ "input": "\u00d3/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d3",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d3=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d3;bonus=x",
+ "output": "x/x;x=\"\u00d3\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d3\";bonus=x",
+ "output": "x/x;x=\"\u00d3\";bonus=x"
+ },
+ {
+ "input": "\u00d4/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d4",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d4=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d4;bonus=x",
+ "output": "x/x;x=\"\u00d4\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d4\";bonus=x",
+ "output": "x/x;x=\"\u00d4\";bonus=x"
+ },
+ {
+ "input": "\u00d5/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d5",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d5=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d5;bonus=x",
+ "output": "x/x;x=\"\u00d5\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d5\";bonus=x",
+ "output": "x/x;x=\"\u00d5\";bonus=x"
+ },
+ {
+ "input": "\u00d6/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d6",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d6=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d6;bonus=x",
+ "output": "x/x;x=\"\u00d6\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d6\";bonus=x",
+ "output": "x/x;x=\"\u00d6\";bonus=x"
+ },
+ {
+ "input": "\u00d7/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d7",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d7=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d7;bonus=x",
+ "output": "x/x;x=\"\u00d7\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d7\";bonus=x",
+ "output": "x/x;x=\"\u00d7\";bonus=x"
+ },
+ {
+ "input": "\u00d8/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d8",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d8=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d8;bonus=x",
+ "output": "x/x;x=\"\u00d8\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d8\";bonus=x",
+ "output": "x/x;x=\"\u00d8\";bonus=x"
+ },
+ {
+ "input": "\u00d9/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00d9",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00d9=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00d9;bonus=x",
+ "output": "x/x;x=\"\u00d9\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00d9\";bonus=x",
+ "output": "x/x;x=\"\u00d9\";bonus=x"
+ },
+ {
+ "input": "\u00da/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00da",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00da=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00da;bonus=x",
+ "output": "x/x;x=\"\u00da\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00da\";bonus=x",
+ "output": "x/x;x=\"\u00da\";bonus=x"
+ },
+ {
+ "input": "\u00db/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00db",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00db=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00db;bonus=x",
+ "output": "x/x;x=\"\u00db\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00db\";bonus=x",
+ "output": "x/x;x=\"\u00db\";bonus=x"
+ },
+ {
+ "input": "\u00dc/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00dc",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00dc=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00dc;bonus=x",
+ "output": "x/x;x=\"\u00dc\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00dc\";bonus=x",
+ "output": "x/x;x=\"\u00dc\";bonus=x"
+ },
+ {
+ "input": "\u00dd/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00dd",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00dd=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00dd;bonus=x",
+ "output": "x/x;x=\"\u00dd\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00dd\";bonus=x",
+ "output": "x/x;x=\"\u00dd\";bonus=x"
+ },
+ {
+ "input": "\u00de/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00de",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00de=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00de;bonus=x",
+ "output": "x/x;x=\"\u00de\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00de\";bonus=x",
+ "output": "x/x;x=\"\u00de\";bonus=x"
+ },
+ {
+ "input": "\u00df/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00df",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00df=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00df;bonus=x",
+ "output": "x/x;x=\"\u00df\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00df\";bonus=x",
+ "output": "x/x;x=\"\u00df\";bonus=x"
+ },
+ {
+ "input": "\u00e0/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e0",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e0=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e0;bonus=x",
+ "output": "x/x;x=\"\u00e0\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e0\";bonus=x",
+ "output": "x/x;x=\"\u00e0\";bonus=x"
+ },
+ {
+ "input": "\u00e1/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e1",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e1=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e1;bonus=x",
+ "output": "x/x;x=\"\u00e1\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e1\";bonus=x",
+ "output": "x/x;x=\"\u00e1\";bonus=x"
+ },
+ {
+ "input": "\u00e2/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e2",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e2=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e2;bonus=x",
+ "output": "x/x;x=\"\u00e2\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e2\";bonus=x",
+ "output": "x/x;x=\"\u00e2\";bonus=x"
+ },
+ {
+ "input": "\u00e3/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e3",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e3=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e3;bonus=x",
+ "output": "x/x;x=\"\u00e3\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e3\";bonus=x",
+ "output": "x/x;x=\"\u00e3\";bonus=x"
+ },
+ {
+ "input": "\u00e4/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e4",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e4=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e4;bonus=x",
+ "output": "x/x;x=\"\u00e4\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e4\";bonus=x",
+ "output": "x/x;x=\"\u00e4\";bonus=x"
+ },
+ {
+ "input": "\u00e5/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e5",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e5=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e5;bonus=x",
+ "output": "x/x;x=\"\u00e5\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e5\";bonus=x",
+ "output": "x/x;x=\"\u00e5\";bonus=x"
+ },
+ {
+ "input": "\u00e6/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e6",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e6=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e6;bonus=x",
+ "output": "x/x;x=\"\u00e6\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e6\";bonus=x",
+ "output": "x/x;x=\"\u00e6\";bonus=x"
+ },
+ {
+ "input": "\u00e7/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e7",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e7=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e7;bonus=x",
+ "output": "x/x;x=\"\u00e7\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e7\";bonus=x",
+ "output": "x/x;x=\"\u00e7\";bonus=x"
+ },
+ {
+ "input": "\u00e8/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e8",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e8=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e8;bonus=x",
+ "output": "x/x;x=\"\u00e8\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e8\";bonus=x",
+ "output": "x/x;x=\"\u00e8\";bonus=x"
+ },
+ {
+ "input": "\u00e9/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00e9",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00e9=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00e9;bonus=x",
+ "output": "x/x;x=\"\u00e9\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00e9\";bonus=x",
+ "output": "x/x;x=\"\u00e9\";bonus=x"
+ },
+ {
+ "input": "\u00ea/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ea",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ea=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ea;bonus=x",
+ "output": "x/x;x=\"\u00ea\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ea\";bonus=x",
+ "output": "x/x;x=\"\u00ea\";bonus=x"
+ },
+ {
+ "input": "\u00eb/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00eb",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00eb=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00eb;bonus=x",
+ "output": "x/x;x=\"\u00eb\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00eb\";bonus=x",
+ "output": "x/x;x=\"\u00eb\";bonus=x"
+ },
+ {
+ "input": "\u00ec/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ec",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ec=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ec;bonus=x",
+ "output": "x/x;x=\"\u00ec\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ec\";bonus=x",
+ "output": "x/x;x=\"\u00ec\";bonus=x"
+ },
+ {
+ "input": "\u00ed/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ed",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ed=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ed;bonus=x",
+ "output": "x/x;x=\"\u00ed\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ed\";bonus=x",
+ "output": "x/x;x=\"\u00ed\";bonus=x"
+ },
+ {
+ "input": "\u00ee/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ee",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ee=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ee;bonus=x",
+ "output": "x/x;x=\"\u00ee\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ee\";bonus=x",
+ "output": "x/x;x=\"\u00ee\";bonus=x"
+ },
+ {
+ "input": "\u00ef/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ef",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ef=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ef;bonus=x",
+ "output": "x/x;x=\"\u00ef\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ef\";bonus=x",
+ "output": "x/x;x=\"\u00ef\";bonus=x"
+ },
+ {
+ "input": "\u00f0/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f0",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f0=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f0;bonus=x",
+ "output": "x/x;x=\"\u00f0\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f0\";bonus=x",
+ "output": "x/x;x=\"\u00f0\";bonus=x"
+ },
+ {
+ "input": "\u00f1/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f1",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f1=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f1;bonus=x",
+ "output": "x/x;x=\"\u00f1\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f1\";bonus=x",
+ "output": "x/x;x=\"\u00f1\";bonus=x"
+ },
+ {
+ "input": "\u00f2/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f2",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f2=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f2;bonus=x",
+ "output": "x/x;x=\"\u00f2\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f2\";bonus=x",
+ "output": "x/x;x=\"\u00f2\";bonus=x"
+ },
+ {
+ "input": "\u00f3/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f3",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f3=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f3;bonus=x",
+ "output": "x/x;x=\"\u00f3\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f3\";bonus=x",
+ "output": "x/x;x=\"\u00f3\";bonus=x"
+ },
+ {
+ "input": "\u00f4/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f4",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f4=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f4;bonus=x",
+ "output": "x/x;x=\"\u00f4\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f4\";bonus=x",
+ "output": "x/x;x=\"\u00f4\";bonus=x"
+ },
+ {
+ "input": "\u00f5/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f5",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f5=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f5;bonus=x",
+ "output": "x/x;x=\"\u00f5\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f5\";bonus=x",
+ "output": "x/x;x=\"\u00f5\";bonus=x"
+ },
+ {
+ "input": "\u00f6/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f6",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f6=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f6;bonus=x",
+ "output": "x/x;x=\"\u00f6\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f6\";bonus=x",
+ "output": "x/x;x=\"\u00f6\";bonus=x"
+ },
+ {
+ "input": "\u00f7/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f7",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f7=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f7;bonus=x",
+ "output": "x/x;x=\"\u00f7\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f7\";bonus=x",
+ "output": "x/x;x=\"\u00f7\";bonus=x"
+ },
+ {
+ "input": "\u00f8/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f8",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f8=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f8;bonus=x",
+ "output": "x/x;x=\"\u00f8\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f8\";bonus=x",
+ "output": "x/x;x=\"\u00f8\";bonus=x"
+ },
+ {
+ "input": "\u00f9/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00f9",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00f9=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00f9;bonus=x",
+ "output": "x/x;x=\"\u00f9\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00f9\";bonus=x",
+ "output": "x/x;x=\"\u00f9\";bonus=x"
+ },
+ {
+ "input": "\u00fa/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00fa",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00fa=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00fa;bonus=x",
+ "output": "x/x;x=\"\u00fa\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00fa\";bonus=x",
+ "output": "x/x;x=\"\u00fa\";bonus=x"
+ },
+ {
+ "input": "\u00fb/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00fb",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00fb=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00fb;bonus=x",
+ "output": "x/x;x=\"\u00fb\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00fb\";bonus=x",
+ "output": "x/x;x=\"\u00fb\";bonus=x"
+ },
+ {
+ "input": "\u00fc/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00fc",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00fc=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00fc;bonus=x",
+ "output": "x/x;x=\"\u00fc\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00fc\";bonus=x",
+ "output": "x/x;x=\"\u00fc\";bonus=x"
+ },
+ {
+ "input": "\u00fd/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00fd",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00fd=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00fd;bonus=x",
+ "output": "x/x;x=\"\u00fd\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00fd\";bonus=x",
+ "output": "x/x;x=\"\u00fd\";bonus=x"
+ },
+ {
+ "input": "\u00fe/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00fe",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00fe=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00fe;bonus=x",
+ "output": "x/x;x=\"\u00fe\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00fe\";bonus=x",
+ "output": "x/x;x=\"\u00fe\";bonus=x"
+ },
+ {
+ "input": "\u00ff/x",
+ "output": null
+ },
+ {
+ "input": "x/\u00ff",
+ "output": null
+ },
+ {
+ "input": "x/x;\u00ff=x;bonus=x",
+ "output": "x/x;bonus=x"
+ },
+ {
+ "input": "x/x;x=\u00ff;bonus=x",
+ "output": "x/x;x=\"\u00ff\";bonus=x"
+ },
+ {
+ "input": "x/x;x=\"\u00ff\";bonus=x",
+ "output": "x/x;x=\"\u00ff\";bonus=x"
+ }
+]
diff --git a/test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.py b/test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.py
new file mode 100644
index 0000000..5d0e26c
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/resources/generated-mime-types.py
@@ -0,0 +1,48 @@
+import json
+import os
+
+here = os.path.dirname(__file__)
+
+def isHTTPTokenCodePoint(cp):
+ if cp in (0x21, 0x23, 0x24, 0x25, 0x26, 0x27, 0x2A, 0x2B, 0x2D, 0x2E, 0x5E, 0x5F, 0x60, 0x7C, 0x7E) or (cp >= 0x30 and cp <= 0x39) or (cp >= 0x41 and cp <= 0x5A) or (cp >= 0x61 and cp <= 0x7A):
+ return True
+ else:
+ return False
+
+def isHTTPQuotedStringTokenCodePoint(cp):
+ if cp == 0x09 or (cp >= 0x20 and cp <= 0x7E) or (cp >= 0x80 and cp <= 0xFF):
+ return True
+ else:
+ return False
+
+tests = []
+
+for cp in range(0x00, 0x100):
+ if isHTTPTokenCodePoint(cp):
+ continue
+ for scenario in ("type", "subtype", "name", "value"):
+ if scenario == "type" or scenario == "subtype":
+ if cp == 0x2F: # /
+ continue
+ if scenario == "type":
+ test = chr(cp) + "/x"
+ else:
+ test = "x/" + chr(cp)
+ tests.append({"input": test, "output": None})
+ elif scenario == "name":
+ if cp == 0x3B or cp == 0x3D: # ; =
+ continue
+ tests.append({"input": "x/x;" + chr(cp) + "=x;bonus=x", "output": "x/x;bonus=x"})
+ elif scenario == "value":
+ if cp == 0x09 or cp == 0x20 or cp == 0x22 or cp == 0x3B or cp == 0x5C: # TAB SP " ; \
+ continue
+ if isHTTPQuotedStringTokenCodePoint(cp):
+ testOutput = "x/x;x=\"" + chr(cp) + "\";bonus=x"
+ else:
+ testOutput = "x/x;bonus=x"
+ tests.append({"input": "x/x;x=" + chr(cp) + ";bonus=x", "output": testOutput})
+ tests.append({"input": "x/x;x=\"" + chr(cp) + "\";bonus=x", "output": testOutput})
+
+handle = open(os.path.join(here, "generated-mime-types.json"), "w")
+handle.write(json.dumps(tests, indent=2, separators=(',', ': ')))
+handle.write("\n")
diff --git a/test/wpt/tests/mimesniff/mime-types/resources/mime-charset.py b/test/wpt/tests/mimesniff/mime-types/resources/mime-charset.py
new file mode 100644
index 0000000..bcc3dc3
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/resources/mime-charset.py
@@ -0,0 +1,19 @@
+from wptserve.utils import isomorphic_encode
+
+def main(request, response):
+ content = b"<meta charset=utf-8>\n<script>document.write(document.characterSet)</script>"
+
+ # This uses the following rather than
+ # response.headers.set("Content-Type", request.GET.first("type"));
+ # response.content = content
+ # to work around https://github.com/web-platform-tests/wpt/issues/8372.
+
+ response.add_required_headers = False
+ output = b"HTTP/1.1 200 OK\r\n"
+ output += b"Content-Length: " + isomorphic_encode(str(len(content))) + b"\r\n"
+ output += b"Content-Type: " + request.GET.first(b"type") + b"\r\n"
+ output += b"Connection: close\r\n"
+ output += b"\r\n"
+ output += content
+ response.writer.write(output)
+ response.close_connection = True
diff --git a/test/wpt/tests/mimesniff/mime-types/resources/mime-groups.json b/test/wpt/tests/mimesniff/mime-types/resources/mime-groups.json
new file mode 100644
index 0000000..1b5d7d5
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/resources/mime-groups.json
@@ -0,0 +1,159 @@
+[
+ {"input": "x/x", "groups": []},
+ {"input": "image/x", "groups": ["image"]},
+ {"input": "audio/x", "groups": ["audio or video"]},
+ {"input": "video/x", "groups": ["audio or video"]},
+ {"input": "application/ogg", "groups": ["audio or video"]},
+ {"input": "application/ogg;x=x", "groups": ["audio or video"]},
+ {"input": "font/x", "groups": ["font"]},
+ {"input": "application/font-cff", "groups": ["font"]},
+ {"input": "application/font-cff;x=x", "groups": ["font"]},
+ {"input": "application/font-off", "groups": ["font"]},
+ {"input": "application/font-off;x=x", "groups": ["font"]},
+ {"input": "application/font-sfnt", "groups": ["font"]},
+ {"input": "application/font-sfnt;x=x", "groups": ["font"]},
+ {"input": "application/font-ttf", "groups": ["font"]},
+ {"input": "application/font-ttf;x=x", "groups": ["font"]},
+ {"input": "application/font-woff", "groups": ["font"]},
+ {"input": "application/font-woff;x=x", "groups": ["font"]},
+ {"input": "application/vnd.ms-fontobject", "groups": ["font"]},
+ {"input": "application/vnd.ms-fontobject;x=x", "groups": ["font"]},
+ {"input": "application/vnd.ms-opentype", "groups": ["font"]},
+ {"input": "application/vnd.ms-opentype;x=x", "groups": ["font"]},
+ {"input": "x/x+zip", "groups": ["ZIP-based"]},
+ {"input": "x/x+zip;x=x", "groups": ["ZIP-based"]},
+ {"input": "x/+zip", "groups": ["ZIP-based"]},
+ {"input": "x/+zip;x=x", "groups": ["ZIP-based"]},
+ "application/zip also matches the archive group",
+ {"input": "application/zip", "groups": ["ZIP-based", "archive"]},
+ {"input": "application/zip;x=x", "groups": ["ZIP-based", "archive"]},
+ {"input": "application/x-rar-compressed", "groups": ["archive"]},
+ {"input": "application/x-rar-compressed;x=x", "groups": ["archive"]},
+ {"input": "application/x-gzip", "groups": ["archive"]},
+ {"input": "application/x-gzip;x=x", "groups": ["archive"]},
+ "XML is also scriptable",
+ {"input": "x/x+xml", "groups": ["XML", "scriptable"]},
+ {"input": "x/x+xml;x=x", "groups": ["XML", "scriptable"]},
+ {"input": "x/+xml", "groups": ["XML", "scriptable"]},
+ {"input": "x/+xml;x=x", "groups": ["XML", "scriptable"]},
+ {"input": "application/xml", "groups": ["XML", "scriptable"]},
+ {"input": "application/xml;x=x", "groups": ["XML", "scriptable"]},
+ {"input": "text/xml", "groups": ["XML", "scriptable"]},
+ {"input": "text/xml;x=x", "groups": ["XML", "scriptable"]},
+ "HTML is scriptable",
+ {"input": "text/html", "groups": ["HTML", "scriptable"]},
+ {"input": "text/html;x=x", "groups": ["HTML", "scriptable"]},
+ "PDF is scriptable",
+ {"input": "application/pdf", "groups": ["scriptable"]},
+ {"input": "application/pdf;x=x", "groups": ["scriptable"]},
+ {"input": "application/ecmascript", "groups": ["JavaScript"]},
+ {"input": "application/ecmascript;x=x", "groups": ["JavaScript"]},
+ {"input": "application/javascript", "groups": ["JavaScript"]},
+ {"input": "application/javascript;x=x", "groups": ["JavaScript"]},
+ {"input": "application/x-ecmascript", "groups": ["JavaScript"]},
+ {"input": "application/x-ecmascript;x=x", "groups": ["JavaScript"]},
+ {"input": "application/x-javascript", "groups": ["JavaScript"]},
+ {"input": "application/x-javascript;x=x", "groups": ["JavaScript"]},
+ {"input": "text/ecmascript", "groups": ["JavaScript"]},
+ {"input": "text/ecmascript;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript", "groups": ["JavaScript"]},
+ {"input": "text/javascript;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.0", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.0;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.1", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.1;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.2", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.2;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.3", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.3;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.4", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.4;x=x", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.5", "groups": ["JavaScript"]},
+ {"input": "text/javascript1.5;x=x", "groups": ["JavaScript"]},
+ {"input": "text/jscript", "groups": ["JavaScript"]},
+ {"input": "text/jscript;x=x", "groups": ["JavaScript"]},
+ {"input": "text/livescript", "groups": ["JavaScript"]},
+ {"input": "text/livescript;x=x", "groups": ["JavaScript"]},
+ {"input": "text/x-ecmascript", "groups": ["JavaScript"]},
+ {"input": "text/x-ecmascript;x=x", "groups": ["JavaScript"]},
+ {"input": "text/x-javascript", "groups": ["JavaScript"]},
+ {"input": "text/x-javascript;x=x", "groups": ["JavaScript"]},
+ {"input": "x/x+json", "groups": ["JSON"]},
+ {"input": "x/x+json;x=x", "groups": ["JSON"]},
+ {"input": "x/+json", "groups": ["JSON"]},
+ {"input": "x/+json;x=x", "groups": ["JSON"]},
+ {"input": "application/json", "groups": ["JSON"]},
+ {"input": "application/json;x=x", "groups": ["JSON"]},
+ {"input": "text/json", "groups": ["JSON"]},
+ {"input": "text/json;x=x", "groups": ["JSON"]},
+ {"input": "x/x;type=image", "groups": []},
+ {"input": "x/x;type=audio", "groups": []},
+ {"input": "x/x;type=video", "groups": []},
+ {"input": "x/x;type=font", "groups": []},
+ {"input": "ximage/x", "groups": []},
+ {"input": "xaudio/x", "groups": []},
+ {"input": "xvideo/x", "groups": []},
+ {"input": "xfont/x", "groups": []},
+ {"input": "imagex/x", "groups": []},
+ {"input": "audiox/x", "groups": []},
+ {"input": "videox/x", "groups": []},
+ {"input": "fontx/x", "groups": []},
+ {"input": "x/image", "groups": []},
+ {"input": "x/png", "groups": []},
+ {"input": "x/audio", "groups": []},
+ {"input": "x/video", "groups": []},
+ {"input": "x/ogg", "groups": []},
+ {"input": "x/font", "groups": []},
+ {"input": "x/woff", "groups": []},
+ {"input": "x/font-ttf", "groups": []},
+ {"input": "x/x;x=\"application/font-ttf\"", "groups": []},
+ {"input": "x/zip", "groups": []},
+ {"input": "x/x-gzip", "groups": []},
+ {"input": "x/x-rar-compressed", "groups": []},
+ {"input": "x/x;x=\"application/x-gip\"", "groups": []},
+ {"input": "x+zip/x", "groups": []},
+ {"input": "x/x;x=x+zip", "groups": []},
+ {"input": "x/x;subtype=x+zip", "groups": []},
+ {"input": "x/xml", "groups": []},
+ {"input": "x/x;x=\"application/xml\"", "groups": []},
+ {"input": "x+xml/x", "groups": []},
+ {"input": "x/x;x=x+xml", "groups": []},
+ {"input": "x/x;subtype=x+xml", "groups": []},
+ {"input": "x/pdf", "groups": []},
+ {"input": "x/html", "groups": []},
+ {"input": "x/ecmascript", "groups": []},
+ {"input": "x/javascript", "groups": []},
+ {"input": "x/x-ecmascript", "groups": []},
+ {"input": "x/x-javascript", "groups": []},
+ {"input": "x/jscript", "groups": []},
+ {"input": "x/livescript", "groups": []},
+ {"input": "x/javascript1.0", "groups": []},
+ {"input": "x/javascript1.1", "groups": []},
+ {"input": "x/javascript1.2", "groups": []},
+ {"input": "x/javascript1.3", "groups": []},
+ {"input": "x/javascript1.4", "groups": []},
+ {"input": "x/javascript1.5", "groups": []},
+ {"input": "x/x;x=\"application/javascript\"", "groups": []},
+ {"input": "x/json", "groups": []},
+ {"input": "x/x;x=\"application/json\"", "groups": []},
+ {"input": "x+json/x", "groups": []},
+ {"input": "x/x;x=x+json", "groups": []},
+ {"input": "x/x;subtype=x+json", "groups": []},
+ {"input": "image/png", "groups": ["image"]},
+ {"input": "audio/mp4", "groups": ["audio or video"]},
+ {"input": "video/mpeg", "groups": ["audio or video"]},
+ {"input": "font/woff", "groups": ["font"]},
+ "SVG is both image and XML, thus also scriptable",
+ {"input": "image/svg+xml", "groups": ["image", "XML", "scriptable"]},
+ "Hypothetical SVG font type",
+ {"input": "font/svg+xml", "groups": ["font", "XML", "scriptable"]},
+ "XHTML is not considered HTML",
+ {"input": "application/xhtml+xml", "groups": ["XML", "scriptable"]},
+ "Subtype longer than 255",
+ {"input": "x/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789+zip",
+ "groups": ["ZIP-based"]},
+ {"input": "x/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789+xml",
+ "groups": ["XML", "scriptable"]},
+ {"input": "x/01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789+json",
+ "groups": ["JSON"]}
+]
diff --git a/test/wpt/tests/mimesniff/mime-types/resources/mime-types.json b/test/wpt/tests/mimesniff/mime-types/resources/mime-types.json
new file mode 100644
index 0000000..1d0ec64
--- /dev/null
+++ b/test/wpt/tests/mimesniff/mime-types/resources/mime-types.json
@@ -0,0 +1,397 @@
+[
+ "Basics",
+ {
+ "input": "text/html;charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "TEXT/HTML;CHARSET=GBK",
+ "output": "text/html;charset=GBK",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ "Legacy comment syntax",
+ {
+ "input": "text/html;charset=gbk(",
+ "output": "text/html;charset=\"gbk(\"",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;x=(;charset=gbk",
+ "output": "text/html;x=\"(\";charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ "Duplicate parameter",
+ {
+ "input": "text/html;charset=gbk;charset=windows-1255",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=();charset=GBK",
+ "output": "text/html;charset=\"()\"",
+ "navigable": true,
+ "encoding": null
+ },
+ "Spaces",
+ {
+ "input": "text/html;charset =gbk",
+ "output": "text/html",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html ;charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html; charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset= gbk",
+ "output": "text/html;charset=\" gbk\"",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset= \"gbk\"",
+ "output": "text/html;charset=\" \\\"gbk\\\"\"",
+ "navigable": true,
+ "encoding": null
+ },
+ "0x0B and 0x0C",
+ {
+ "input": "text/html;charset=\u000Bgbk",
+ "output": "text/html",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;charset=\u000Cgbk",
+ "output": "text/html",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;\u000Bcharset=gbk",
+ "output": "text/html",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;\u000Ccharset=gbk",
+ "output": "text/html",
+ "navigable": true,
+ "encoding": null
+ },
+ "Single quotes are a token, not a delimiter",
+ {
+ "input": "text/html;charset='gbk'",
+ "output": "text/html;charset='gbk'",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;charset='gbk",
+ "output": "text/html;charset='gbk",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;charset=gbk'",
+ "output": "text/html;charset=gbk'",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;charset=';charset=GBK",
+ "output": "text/html;charset='",
+ "navigable": true,
+ "encoding": null
+ },
+ "Invalid parameters",
+ {
+ "input": "text/html;test;charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;test=;charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;';charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;\";charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html ; ; charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;;;;charset=gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset= \"\u007F;charset=GBK",
+ "output": "text/html;charset=GBK",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"\u007F;charset=foo\";charset=GBK",
+ "output": "text/html;charset=GBK",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ "Double quotes",
+ {
+ "input": "text/html;charset=\"gbk\"",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"gbk",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=gbk\"",
+ "output": "text/html;charset=\"gbk\\\"\"",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;charset=\" gbk\"",
+ "output": "text/html;charset=\" gbk\"",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"gbk \"",
+ "output": "text/html;charset=\"gbk \"",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"\\ gbk\"",
+ "output": "text/html;charset=\" gbk\"",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"\\g\\b\\k\"",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"gbk\"x",
+ "output": "text/html;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ {
+ "input": "text/html;charset=\"\";charset=GBK",
+ "output": "text/html;charset=\"\"",
+ "navigable": true,
+ "encoding": null
+ },
+ {
+ "input": "text/html;charset=\";charset=GBK",
+ "output": "text/html;charset=\";charset=GBK\"",
+ "navigable": true,
+ "encoding": null
+ },
+ "Unexpected code points",
+ {
+ "input": "text/html;charset={gbk}",
+ "output": "text/html;charset=\"{gbk}\"",
+ "navigable": true,
+ "encoding": null
+ },
+ "Parameter name longer than 127",
+ {
+ "input": "text/html;0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789=x;charset=gbk",
+ "output": "text/html;0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789=x;charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ "type/subtype longer than 127",
+ {
+ "input": "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
+ "output": "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+ },
+ "Invalid names",
+ {
+ "input": "text/html;a]=bar;b[=bar;c=bar",
+ "output": "text/html;c=bar"
+ },
+ "Semicolons in value",
+ {
+ "input": "text/html;valid=\";\";foo=bar",
+ "output": "text/html;valid=\";\";foo=bar"
+ },
+ {
+ "input": "text/html;in]valid=\";asd=foo\";foo=bar",
+ "output": "text/html;foo=bar"
+ },
+ "Valid",
+ {
+ "input": "!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
+ "output": "!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz/!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz;!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz=!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+ },
+ {
+ "input": "x/x;x=\"\t !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"",
+ "output": "x/x;x=\"\t !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\""
+ },
+ "End-of-file handling",
+ {
+ "input": "x/x;test",
+ "output": "x/x"
+ },
+ {
+ "input": "x/x;test=\"\\",
+ "output": "x/x;test=\"\\\\\""
+ },
+ "Whitespace (not handled by generated-mime-types.json or above)",
+ {
+ "input": "x/x;x= ",
+ "output": "x/x"
+ },
+ {
+ "input": "x/x;x=\t",
+ "output": "x/x"
+ },
+ {
+ "input": "x/x\n\r\t ;x=x",
+ "output": "x/x;x=x"
+ },
+ {
+ "input": "\n\r\t x/x;x=x\n\r\t ",
+ "output": "x/x;x=x"
+ },
+ {
+ "input": "x/x;\n\r\t x=x\n\r\t ;x=y",
+ "output": "x/x;x=x"
+ },
+ "Latin1",
+ {
+ "input": "text/html;test=\u00FF;charset=gbk",
+ "output": "text/html;test=\"\u00FF\";charset=gbk",
+ "navigable": true,
+ "encoding": "GBK"
+ },
+ ">Latin1",
+ {
+ "input": "x/x;test=\uFFFD;x=x",
+ "output": "x/x;x=x"
+ },
+ "Failure",
+ {
+ "input": "\u000Bx/x",
+ "output": null
+ },
+ {
+ "input": "\u000Cx/x",
+ "output": null
+ },
+ {
+ "input": "x/x\u000B",
+ "output": null
+ },
+ {
+ "input": "x/x\u000C",
+ "output": null
+ },
+ {
+ "input": "",
+ "output": null
+ },
+ {
+ "input": "\t",
+ "output": null
+ },
+ {
+ "input": "/",
+ "output": null
+ },
+ {
+ "input": "bogus",
+ "output": null
+ },
+ {
+ "input": "bogus/",
+ "output": null
+ },
+ {
+ "input": "bogus/ ",
+ "output": null
+ },
+ {
+ "input": "bogus/bogus/;",
+ "output": null
+ },
+ {
+ "input": "</>",
+ "output": null
+ },
+ {
+ "input": "(/)",
+ "output": null
+ },
+ {
+ "input": "ÿ/ÿ",
+ "output": null
+ },
+ {
+ "input": "text/html(;doesnot=matter",
+ "output": null
+ },
+ {
+ "input": "{/}",
+ "output": null
+ },
+ {
+ "input": "\u0100/\u0100",
+ "output": null
+ },
+ {
+ "input": "text /html",
+ "output": null
+ },
+ {
+ "input": "text/ html",
+ "output": null
+ },
+ {
+ "input": "\"text/html\"",
+ "output": null
+ }
+]