183 lines
4 KiB
JavaScript
183 lines
4 KiB
JavaScript
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");
|