Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: third_party/WebKit/LayoutTests/fast/encoding/api/utf-round-trip.html

Issue 1862453003: [Blink>TextEncoder] Removed UTF-16 support from TextEncoder API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed compositor-proxy-supports test Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <title>Encoding API: UTF encoding round trips</title> 2 <title>Encoding API: UTF encoding round trips</title>
3 <script src="../../../resources/testharness.js"></script> 3 <script src="../../../resources/testharness.js"></script>
4 <script src="../../../resources/testharnessreport.js"></script> 4 <script src="../../../resources/testharnessreport.js"></script>
5 <script src="resources/encodings.js"></script> 5 <script src="resources/encodings.js"></script>
6 <script> 6 <script>
7 7
8 var BATCH_SIZE = 0x1000; // Convert in batches spanning this many code points. 8 var BATCH_SIZE = 0x1000; // Convert in batches spanning this many code points.
9 var SKIP_SIZE = 0x77; // For efficiency, don't test every code point. 9 var SKIP_SIZE = 0x77; // For efficiency, don't test every code point.
10 10
(...skipping 13 matching lines...) Expand all
24 if (0xD800 <= i && i <= 0xDFFF) { 24 if (0xD800 <= i && i <= 0xDFFF) {
25 // surrogate half 25 // surrogate half
26 continue; 26 continue;
27 } 27 }
28 string += fromCodePoint(i); 28 string += fromCodePoint(i);
29 } 29 }
30 return string; 30 return string;
31 } 31 }
32 32
33 utf_encodings.forEach(function(encoding) { 33 utf_encodings.forEach(function(encoding) {
34 if (encoding === 'utf-8') {
35 test(function() {
36 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
37 var string = makeBatch(i);
38 var encoded = new TextEncoder().encode(string);
39 var decoded = new TextDecoder(encoding).decode(encoded);
40 assert_equals(string, decoded);
41 }
42 }, encoding + ' - encode/decode round trip');
43 }
44 });
45
46 ['utf-16le', 'utf-16be'].forEach(function(encoding) {
34 test(function() { 47 test(function() {
35 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) { 48 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
36 var string = makeBatch(i); 49 var string = makeBatch(i);
37 var encoded = new TextEncoder(encoding).encode(string); 50
51 if (encoding === 'utf-16le')
52 var encoded = encode_utf16(string, true);
53 else
54 var encoded = encode_utf16(string, false);
55
38 var decoded = new TextDecoder(encoding).decode(encoded); 56 var decoded = new TextDecoder(encoding).decode(encoded);
39 assert_equals(decoded, string); 57 assert_equals(string, decoded);
40 } 58 }
41 }, encoding + ' - encode/decode round trip'); 59 }, encoding + ' - encode/decode round trip');
42 }); 60 });
43 61
62 function encode_utf16(s, littleEndian) {
63 var a = new Uint8Array(s.length * 2), view = new DataView(a.buffer);
64 s.split('').forEach(function(c, i) {
65 view.setUint16(i * 2, c.charCodeAt(0), littleEndian);
66 });
67 return a;
68 }
44 69
45 // Inspired by: 70 // Inspired by:
46 // http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.htm l 71 // http://ecmanaut.blogspot.com/2006/07/encoding-decoding-utf8-in-javascript.htm l
47 function encode_utf8(string) { 72 function encode_utf8(string) {
48 var utf8 = unescape(encodeURIComponent(string)); 73 var utf8 = unescape(encodeURIComponent(string));
49 var octets = []; 74 var octets = [];
50 for (var i = 0; i < utf8.length; i += 1) 75 for (var i = 0; i < utf8.length; i += 1)
51 octets.push(utf8.charCodeAt(i)); 76 octets.push(utf8.charCodeAt(i));
52 return octets; 77 return octets;
53 } 78 }
54 79
55 function decode_utf8(octets) { 80 function decode_utf8(octets) {
56 var utf8 = String.fromCharCode.apply(null, octets); 81 var utf8 = String.fromCharCode.apply(null, octets);
57 return decodeURIComponent(escape(utf8)); 82 return decodeURIComponent(escape(utf8));
58 } 83 }
59 84
60 test(function() { 85 test(function() {
61 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) { 86 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
62 var string = makeBatch(i); 87 var string = makeBatch(i);
63 var expected = encode_utf8(string); 88 var expected = encode_utf8(string);
64 var actual = new TextEncoder('UTF-8').encode(string); 89 var actual = new TextEncoder().encode(string);
65 assert_array_equals(actual, expected); 90 assert_array_equals(actual, expected);
66 } 91 }
67 }, 'UTF-8 encoding (compare against unescape/encodeURIComponent)'); 92 }, 'UTF-8 encoding (compare against unescape/encodeURIComponent)');
68 93
69 test(function() { 94 test(function() {
70 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) { 95 for (var i = 0; i < 0x10FFFF; i += BATCH_SIZE) {
71 var string = makeBatch(i); 96 var string = makeBatch(i);
72 var encoded = encode_utf8(string); 97 var encoded = encode_utf8(string);
73 var expected = decode_utf8(encoded); 98 var expected = decode_utf8(encoded);
74 var actual = new TextDecoder('UTF-8').decode(new Uint8Array(encoded)); 99 var actual = new TextDecoder().decode(new Uint8Array(encoded));
75 assert_equals(actual, expected); 100 assert_equals(actual, expected);
76 } 101 }
77 }, 'UTF-8 decoding (compare against decodeURIComponent/escape)'); 102 }, 'UTF-8 decoding (compare against decodeURIComponent/escape)');
78 103 </script>
79 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698