Index: LayoutTests/fast/encoding/api/utf16-surrogates.html |
diff --git a/LayoutTests/fast/encoding/api/utf16-surrogates.html b/LayoutTests/fast/encoding/api/utf16-surrogates.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1bcb51f829fcd571f682f2cc0ce882ca63dcef3c |
--- /dev/null |
+++ b/LayoutTests/fast/encoding/api/utf16-surrogates.html |
@@ -0,0 +1,52 @@ |
+<!DOCTYPE html> |
+<title>Encoding API: UTF-16 surrogate handling</title> |
+<script src="../../../resources/testharness.js"></script> |
+<script src="../../../resources/testharnessreport.js"></script> |
+<script src="resources/shared.js"></script> |
+<script> |
+ |
+var bad = [ |
+ { |
+ encoding: 'utf-16le', |
+ input: [0x00, 0xd8], |
+ expected: '\uFFFD', |
+ name: 'lone surrogate lead' |
+ }, |
+ { |
+ encoding: 'utf-16le', |
+ input: [0x00, 0xdc], |
+ expected: '\uFFFD', |
+ name: 'lone surrogate trail' |
+ }, |
+ { |
+ encoding: 'utf-16le', |
+ input: [0x00, 0xd8, 0x00, 0x00], |
+ expected: '\uFFFD\u0000', |
+ name: 'unmatched surrogate lead' |
+ }, |
+ { |
+ encoding: 'utf-16le', |
+ input: [0x00, 0xdc, 0x00, 0x00], |
+ expected: '\uFFFD\u0000', |
+ name: 'unmatched surrogate trail' |
+ }, |
+ { |
+ encoding: 'utf-16le', |
+ input: [0x00, 0xdc, 0x00, 0xd8], |
+ expected: '\uFFFD\uFFFD', |
+ name: 'swapped surrogate pair' |
+ } |
+]; |
+ |
+bad.forEach(function(t) { |
+ test(function() { |
+ assert_equals(new TextDecoder(t.encoding).decode(new Uint8Array(t.input)), t.expected); |
+ }, t.encoding + " - " + t.name); |
+ test(function() { |
+ assert_throws({name: 'EncodingError'}, function() { |
+ new TextDecoder(t.encoding, {fatal: true}).decode(new Uint8Array(t.input)) |
+ }); |
+ }, t.encoding + " - " + t.name + ' (fatal flag set)'); |
+}); |
+ |
+</script> |