summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/encoding/resources/encode-href-common.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/encoding/resources/encode-href-common.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/encoding/resources/encode-href-common.js')
-rw-r--r--testing/web-platform/tests/encoding/resources/encode-href-common.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/testing/web-platform/tests/encoding/resources/encode-href-common.js b/testing/web-platform/tests/encoding/resources/encode-href-common.js
new file mode 100644
index 0000000000..dc646fe8c1
--- /dev/null
+++ b/testing/web-platform/tests/encoding/resources/encode-href-common.js
@@ -0,0 +1,57 @@
+// These are defined by the test:
+// errors (boolean)
+// encoder (function)
+// ranges (array)
+// expect (function)
+
+function encode(input, expected, desc) {
+ // tests whether a Unicode character is converted to an equivalent byte sequence by href
+ // input: a Unicode character
+ // expected: expected byte sequence
+ // desc: what's being tested
+ subsetTest(test, function() {
+ var a = document.createElement("a"); // <a> uses document encoding for URL's query
+ a.href = "https://example.com/?" + input;
+ result = a.search.substr(1); // remove leading "?"
+ assert_equals(normalizeStr(result), normalizeStr(expected));
+ }, desc);
+}
+
+// set up a simple array of unicode codepoints that are not encoded
+var codepoints = [];
+
+for (var range of ranges) {
+ for (var i = range[0]; i < range[1]; i++) {
+ result = encoder(String.fromCodePoint(i));
+ var success = !!result;
+ if (errors) {
+ success = !success;
+ }
+ if (success) {
+ var item = {};
+ codepoints.push(item);
+ item.cp = i;
+ item.expected = expect(result, i);
+ item.desc = range[2] ? range[2] + " " : "";
+ }
+ }
+}
+
+// run the tests
+for (var x = 0; x < codepoints.length; x++) {
+ encode(
+ String.fromCodePoint(codepoints[x].cp),
+ codepoints[x].expected,
+ codepoints[x].desc +
+ " U+" +
+ codepoints[x].cp.toString(16).toUpperCase() +
+ " " +
+ String.fromCodePoint(codepoints[x].cp) +
+ " " +
+ codepoints[x].expected
+ );
+}
+
+// NOTES
+// this test relies on support for String.fromCodePoint, which appears to be supported by major desktop browsers
+// the tests exclude ASCII characters