| Index: LayoutTests/fast/encoding/api/utf-round-trip.html
|
| diff --git a/LayoutTests/fast/encoding/api/utf-round-trip.html b/LayoutTests/fast/encoding/api/utf-round-trip.html
|
| index 0ea8d97530740ab19c5675a7d9b02dbbef126d9f..70c17ba6a211684b6c9e48058c20118c2df496be 100644
|
| --- a/LayoutTests/fast/encoding/api/utf-round-trip.html
|
| +++ b/LayoutTests/fast/encoding/api/utf-round-trip.html
|
| @@ -1,28 +1,27 @@
|
| <!DOCTYPE html>
|
| -<script src="../../../resources/js-test.js"></script>
|
| +<title>Encoding API: UTF encoding round trips</title>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| <script src="resources/shared.js"></script>
|
| <script>
|
|
|
| -description("Sanity check the Encoding API's handling of UTF encodings.");
|
| -
|
| -BATCH_SIZE = 0x1000; // Convert in batches spanning this made code points.
|
| -SKIP_SIZE = 0x77; // For efficiency, don't test every code point.
|
| -quiet = true; // Don't log every matching range.
|
| +var BATCH_SIZE = 0x1000; // Convert in batches spanning this many code points.
|
| +var SKIP_SIZE = 0x77; // For efficiency, don't test every code point.
|
|
|
| function fromCodePoint(cp) {
|
| - if (0xd800 <= cp && cp <= 0xdfff) throw new Error('Invalid code point');
|
| + if (0xD800 <= cp && cp <= 0xDFFF) throw new Error('Invalid code point');
|
|
|
| - if (cp > 0xffff) {
|
| - // outside BMP - encode as surrogate pair
|
| - return String.fromCharCode(0xd800 + ((cp >> 10) & 0x3ff), 0xdc00 + (cp & 0x3ff));
|
| - }
|
| - return String.fromCharCode(i);
|
| + if (cp <= 0xFFFF)
|
| + return String.fromCharCode(cp);
|
| +
|
| + // outside BMP - encode as surrogate pair
|
| + return String.fromCharCode(0xD800 + ((cp >> 10) & 0x3FF), 0xDC00 + (cp & 0x3FF));
|
| }
|
|
|
| function makeBatch(cp) {
|
| var string = '';
|
| for (var i = cp; i < cp + BATCH_SIZE && cp < 0x10FFFF; i += SKIP_SIZE) {
|
| - if (0xd800 <= i && i <= 0xdfff) {
|
| + if (0xD800 <= i && i <= 0xDFFF) {
|
| // surrogate half
|
| continue;
|
| }
|
| @@ -31,28 +30,15 @@ function makeBatch(cp) {
|
| return string;
|
| }
|
|
|
| -function testEncodeDecode(encoding, min, max) {
|
| - debug(encoding + " - Encode/Decode Range " + cpname(min) + " - " + cpname(max));
|
| -
|
| - function cpname(n) {
|
| - return 'U+' + ((n <= 0xFFFF) ?
|
| - ('0000' + n.toString(16).toUpperCase()).slice(-4) :
|
| - n.toString(16).toUpperCase());
|
| - }
|
| -
|
| - for (i = min; i < max; i += BATCH_SIZE) {
|
| - string = makeBatch(i);
|
| - encoded = new TextEncoder(encoding).encode(string);
|
| - decoded = new TextDecoder(encoding).decode(encoded);
|
| - shouldBe("string", "decoded", quiet);
|
| - }
|
| -
|
| - debug("no output means all ranges matched");
|
| - debug("");
|
| -}
|
| -
|
| utf_encodings.forEach(function(encoding) {
|
| - testEncodeDecode(encoding, 0, 0x10FFFF);
|
| + test(function() {
|
| + for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
|
| + var string = makeBatch(i);
|
| + var encoded = new TextEncoder(encoding).encode(string);
|
| + var decoded = new TextDecoder(encoding).decode(encoded);
|
| + assert_equals(decoded, string);
|
| + }
|
| + }, encoding + ' - encode/decode round trip');
|
| });
|
|
|
|
|
| @@ -60,10 +46,9 @@ utf_encodings.forEach(function(encoding) {
|
| // http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.html
|
| function encode_utf8(string) {
|
| var utf8 = unescape(encodeURIComponent(string));
|
| - var octets = [], i;
|
| - for (i = 0; i < utf8.length; i += 1) {
|
| + var octets = [];
|
| + for (var i = 0; i < utf8.length; i += 1)
|
| octets.push(utf8.charCodeAt(i));
|
| - }
|
| return octets;
|
| }
|
|
|
| @@ -72,25 +57,23 @@ function decode_utf8(octets) {
|
| return decodeURIComponent(escape(utf8));
|
| }
|
|
|
| -debug("UTF-8 encoding (compare against unescape/encodeURIComponent)");
|
| -for (i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
|
| - str = makeBatch(i);
|
| - expected = encode_utf8(str);
|
| - actual = new TextEncoder('UTF-8').encode(str);
|
| - shouldBe("actual", "expected", quiet);
|
| -}
|
| -debug("no output means all ranges matched");
|
| -debug("");
|
| -
|
| -debug("UTF-8 decoding (compare against decodeURIComponent/escape)");
|
| -for (i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
|
| - str = makeBatch(i);
|
| - encoded = encode_utf8(str);
|
| - expected = decode_utf8(encoded);
|
| - actual = new TextDecoder('UTF-8').decode(new Uint8Array(encoded));
|
| - shouldBe("actual", "expected", quiet);
|
| -}
|
| -debug("no output means all ranges matched");
|
| -debug("");
|
| +test(function() {
|
| + for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
|
| + var string = makeBatch(i);
|
| + var expected = encode_utf8(string);
|
| + var actual = new TextEncoder('UTF-8').encode(string);
|
| + assert_array_equals(actual, expected);
|
| + }
|
| +}, 'UTF-8 encoding (compare against unescape/encodeURIComponent)');
|
| +
|
| +test(function() {
|
| + for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
|
| + var string = makeBatch(i);
|
| + var encoded = encode_utf8(string);
|
| + var expected = decode_utf8(encoded);
|
| + var actual = new TextDecoder('UTF-8').decode(new Uint8Array(encoded));
|
| + assert_equals(actual, expected);
|
| + }
|
| +}, 'UTF-8 decoding (compare against decodeURIComponent/escape)');
|
|
|
| </script>
|
|
|