Source code

Revision control

Copy as Markdown

Other Tools

// |reftest| skip-if(!xulRuntime.shell)
var BUGNUMBER = 1561567;
var summary = 'JS_EncodeStringToUTF8BufferPartial - Encode string as UTF-8 into a byte array';
print(BUGNUMBER + ": " + summary);
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",
},
];
assertEq(isSameCompartment(newRope, this), true);
function checkUtf8Equal(first, second) {
var firstBuffer = new Uint8Array(first.length * 3);
var secondBuffer = new Uint8Array(second.length * 3);
var [firstRead, firstWritten] = encodeAsUtf8InBuffer(first, firstBuffer);
var [secondRead, secondWritten] = encodeAsUtf8InBuffer(second, secondBuffer);
assertEq(first.length, firstRead);
assertEq(second.length, secondRead);
assertEq(firstWritten, secondWritten);
for (var i = 0; i < firstWritten; ++i) {
assertEq(firstBuffer[i], secondBuffer[i]);
}
}
concat.forEach(function(t) {
var filler = "012345678901234567890123456789";
var rope = newRope(t.head, newRope(t.tail, filler));
checkUtf8Equal(rope, t.expected + filler);
});
{
var filler = "012345678901234567890123456789";
var a = newRope(filler, "a");
var ab = newRope(a, "b");
var abc = newRope(ab, "c");
var e = newRope(filler, "e");
var ef = newRope(e, "f");
var def = newRope("d", ef);
var abcdef = newRope(abc, def);
var abcdefab = newRope(abcdef, ab);
checkUtf8Equal(
abcdefab,
"012345678901234567890123456789abcd012345678901234567890123456789ef012345678901234567890123456789ab"
);
}
{
var filler = "012345678901234567890123456789";
var right = newRope("\ude0a", filler);
var rope = newRope("\ud83d", right);
checkUtf8Equal(rope, "\ud83d\ude0a012345678901234567890123456789");
}
if (typeof reportCompare === "function")
reportCompare(true, true);