diff options
Diffstat (limited to 'js/src/tests/non262/String/utf8-encode.js')
-rw-r--r-- | js/src/tests/non262/String/utf8-encode.js | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/js/src/tests/non262/String/utf8-encode.js b/js/src/tests/non262/String/utf8-encode.js new file mode 100644 index 0000000000..d6aee543d0 --- /dev/null +++ b/js/src/tests/non262/String/utf8-encode.js @@ -0,0 +1,187 @@ +// |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 rope = newRope(t.head, t.tail); + checkUtf8Equal(rope, t.expected); +}); + +{ + var ab = newRope("a", "b"); + var abc = newRope(ab, "c"); + var ef = newRope("e", "f"); + var def = newRope("d", ef); + var abcdef = newRope(abc, def); + var abcdefab = newRope(abcdef, ab); + checkUtf8Equal(abcdefab, "abcdefab"); +} + +{ + var right = newRope("\ude0a", "."); + var rope = newRope("\ud83d", right); + checkUtf8Equal(rope, "\ud83d\ude0a."); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); |