summaryrefslogtreecommitdiffstats
path: root/dom/encoding/test/unit/test_rope_encode.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/encoding/test/unit/test_rope_encode.js')
-rw-r--r--dom/encoding/test/unit/test_rope_encode.js167
1 files changed, 167 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..185d23c792
--- /dev/null
+++ b/dom/encoding/test/unit/test_rope_encode.js
@@ -0,0 +1,167 @@
+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 rope = testingFunctions.newRope(t.head, t.tail);
+ var encoded = new TextEncoder().encode(rope);
+ var decoded = new TextDecoder().decode(encoded);
+ assert_equals(decoded, t.expected, "Must round-trip");
+ }, t.name);
+});
+
+test(function () {
+ assert_true(
+ testingFunctions.isSameCompartment(testingFunctions.newRope, this),
+ "Must be in the same compartment"
+ );
+ var ab = testingFunctions.newRope("a", "b");
+ var abc = testingFunctions.newRope(ab, "c");
+ 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, "abcdefab", "Must walk the DAG correctly");
+}, "Complex rope DAG");