diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/encoding/test/unit/test_rope_encode.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream/124.0.1.tar.xz firefox-upstream/124.0.1.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/encoding/test/unit/test_rope_encode.js')
-rw-r--r-- | dom/encoding/test/unit/test_rope_encode.js | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/dom/encoding/test/unit/test_rope_encode.js b/dom/encoding/test/unit/test_rope_encode.js new file mode 100644 index 0000000000..2672d2cbc7 --- /dev/null +++ b/dom/encoding/test/unit/test_rope_encode.js @@ -0,0 +1,183 @@ +var concat = [ + { + head: "a", + tail: "b", + expected: "ab", + name: "Latin1 and Latin1", + }, + { + head: "α", + tail: "β", + expected: "αβ", + name: "UTF-16 and UTF-16", + }, + { + head: "a", + tail: "β", + expected: "aβ", + name: "Latin1 and UTF-16", + }, + { + head: "α", + tail: "b", + expected: "αb", + name: "UTF-16 and Latin1", + }, + { + head: "\uD83D", + tail: "\uDE03", + expected: "\uD83D\uDE03", + name: "Surrogate pair", + }, + { + head: "a\uD83D", + tail: "\uDE03b", + expected: "a\uD83D\uDE03b", + name: "Surrogate pair with prefix and suffix", + }, + { + head: "\uD83D", + tail: "b", + expected: "\uFFFDb", + name: "Unpaired high surrogate and Latin1", + }, + { + head: "a\uD83D", + tail: "b", + expected: "a\uFFFDb", + name: "Prefixed unpaired high surrogate and Latin1", + }, + { + head: "\uD83D", + tail: "β", + expected: "\uFFFDβ", + name: "Unpaired high surrogate and UTF-16", + }, + { + head: "a\uD83D", + tail: "β", + expected: "a\uFFFDβ", + name: "Prefixed unpaired high surrogate and UTF-16", + }, + + { + head: "\uDE03", + tail: "b", + expected: "\uFFFDb", + name: "Unpaired low surrogate and Latin1", + }, + { + head: "a\uDE03", + tail: "b", + expected: "a\uFFFDb", + name: "Prefixed unpaired low surrogate and Latin1", + }, + { + head: "\uDE03", + tail: "β", + expected: "\uFFFDβ", + name: "Unpaired low surrogate and UTF-16", + }, + { + head: "a\uDE03", + tail: "β", + expected: "a\uFFFDβ", + name: "Prefixed unpaired low surrogate and UTF-16", + }, + + { + head: "a", + tail: "\uDE03", + expected: "a\uFFFD", + name: "Latin1 and unpaired low surrogate", + }, + { + head: "a", + tail: "\uDE03b", + expected: "a\uFFFDb", + name: "Latin1 and suffixed unpaired low surrogate", + }, + { + head: "α", + tail: "\uDE03", + expected: "α\uFFFD", + name: "UTF-16 and unpaired low surrogate", + }, + { + head: "α", + tail: "\uDE03b", + expected: "α\uFFFDb", + name: "UTF-16 and suffixed unpaired low surrogate", + }, + + { + head: "a", + tail: "\uD83D", + expected: "a\uFFFD", + name: "Latin1 and unpaired high surrogate", + }, + { + head: "a", + tail: "\uD83Db", + expected: "a\uFFFDb", + name: "Latin1 and suffixed unpaired high surrogate", + }, + { + head: "α", + tail: "\uD83D", + expected: "α\uFFFD", + name: "UTF-16 and unpaired high surrogate", + }, + { + head: "α", + tail: "\uD83Db", + expected: "α\uFFFDb", + name: "UTF-16 and suffixed unpaired high surrogate", + }, +]; + +var testingFunctions = Cu.getJSTestingFunctions(); +concat.forEach(function (t) { + test(function () { + assert_true( + testingFunctions.isSameCompartment(testingFunctions.newRope, this), + "Must be in the same compartment" + ); + var filler = "012345678901234567890123456789"; + var rope = testingFunctions.newRope( + t.head, + testingFunctions.newRope(t.tail, filler) + ); + var encoded = new TextEncoder().encode(rope); + var decoded = new TextDecoder().decode(encoded); + assert_equals(decoded, t.expected + filler, "Must round-trip"); + }, t.name); +}); + +test(function () { + assert_true( + testingFunctions.isSameCompartment(testingFunctions.newRope, this), + "Must be in the same compartment" + ); + + var filler = "012345678901234567890123456789"; + + var a = testingFunctions.newRope(filler, "a"); + var ab = testingFunctions.newRope(a, "b"); + var abc = testingFunctions.newRope(ab, "c"); + + var e = testingFunctions.newRope(filler, "e"); + var ef = testingFunctions.newRope(e, "f"); + var def = testingFunctions.newRope("d", ef); + + var abcdef = testingFunctions.newRope(abc, def); + var abcdefab = testingFunctions.newRope(abcdef, ab); + + var encoded = new TextEncoder().encode(abcdefab); + var decoded = new TextDecoder().decode(encoded); + assert_equals( + decoded, + "012345678901234567890123456789abcd012345678901234567890123456789ef012345678901234567890123456789ab", + "Must walk the DAG correctly" + ); +}, "Complex rope DAG"); |