Skip to content

Commit 198cf59

Browse files
cola119danielleadams
authored andcommitted
test: update WPT encoding tests
PR-URL: #43958 Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Feng Yu <[email protected]> Reviewed-By: Darshan Sen <[email protected]>
1 parent 51cb0d4 commit 198cf59

15 files changed

+259
-22
lines changed

test/fixtures/wpt/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Last update:
1414
- console: https://github.com/web-platform-tests/wpt/tree/3b1f72e99a/console
1515
- dom/abort: https://github.com/web-platform-tests/wpt/tree/c49cafb491/dom/abort
1616
- dom/events: https://github.com/web-platform-tests/wpt/tree/f8821adb28/dom/events
17-
- encoding: https://github.com/web-platform-tests/wpt/tree/35f70910d3/encoding
17+
- encoding: https://github.com/web-platform-tests/wpt/tree/c1b24fce6e/encoding
1818
- FileAPI: https://github.com/web-platform-tests/wpt/tree/3b279420d4/FileAPI
1919
- hr-time: https://github.com/web-platform-tests/wpt/tree/9910784394/hr-time
2020
- html/webappapis/atob: https://github.com/web-platform-tests/wpt/tree/f267e1dca6/html/webappapis/atob

test/fixtures/wpt/encoding/encodeInto.any.js

+14-11
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,22 @@
120120
});
121121
});
122122

123-
[DataView,
124-
Int8Array,
125-
Int16Array,
126-
Int32Array,
127-
Uint16Array,
128-
Uint32Array,
129-
Uint8ClampedArray,
130-
Float32Array,
131-
Float64Array].forEach(view => {
123+
["DataView",
124+
"Int8Array",
125+
"Int16Array",
126+
"Int32Array",
127+
"Uint16Array",
128+
"Uint32Array",
129+
"Uint8ClampedArray",
130+
"BigInt64Array",
131+
"BigUint64Array",
132+
"Float32Array",
133+
"Float64Array"].forEach(type => {
132134
["ArrayBuffer", "SharedArrayBuffer"].forEach((arrayBufferOrSharedArrayBuffer) => {
133135
test(() => {
134-
assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", new view(createBuffer(arrayBufferOrSharedArrayBuffer, 0))));
135-
}, "Invalid encodeInto() destination: " + view.name + ", backed by: " + arrayBufferOrSharedArrayBuffer);
136+
const viewInstance = new self[type](createBuffer(arrayBufferOrSharedArrayBuffer, 0));
137+
assert_throws_js(TypeError, () => new TextEncoder().encodeInto("", viewInstance));
138+
}, "Invalid encodeInto() destination: " + type + ", backed by: " + arrayBufferOrSharedArrayBuffer);
136139
});
137140
});
138141

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Cross-Origin-Opener-Policy: same-origin
2+
Cross-Origin-Embedder-Policy: require-corp
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// META: script=/resources/idlharness-shadowrealm.js
2+
idl_test_shadowrealm(["encoding"], ["streams"]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!DOCTYPE html>
2+
<script src="/resources/testharness.js"></script>
3+
<script src="/resources/testharnessreport.js"></script>
4+
<script>
5+
6+
test(() => {
7+
const decoder = new TextDecoder('utf-8');
8+
const buffer = new SharedArrayBuffer(4);
9+
assert_throws_js(TypeError, () => {
10+
decoder.decode(new Uint8Array(buffer));
11+
}, 'constructing TextDecoder with SharedArrayBuffer view should throw');
12+
}, 'decoding SharedArrayBuffer');
13+
14+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Cross-Origin-Opener-Policy:same-origin
2+
Cross-Origin-Embedder-Policy:require-corp

test/fixtures/wpt/encoding/single-byte-decoder.window.js

+107
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/fixtures/wpt/encoding/streams/decode-utf8.any.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,16 @@
4343
const array = await readableStreamToArray(output);
4444
assert_array_equals(array, [expectedOutputString],
4545
'the output should be in one chunk');
46-
}, 'a trailing empty chunk should be ignored- ' + arrayBufferOrSharedArrayBuffer);
46+
}, 'a trailing empty chunk should be ignored - ' + arrayBufferOrSharedArrayBuffer);
47+
48+
promise_test(async () => {
49+
const chunk = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, 3));
50+
chunk.set([0xF0, 0x9F, 0x92]);
51+
const input = readableStreamFromArray([chunk]);
52+
const output = input.pipeThrough(new TextDecoderStream());
53+
const array = await readableStreamToArray(output);
54+
assert_array_equals(array, ['\uFFFD']);
55+
}, 'UTF-8 EOF handling - ' + arrayBufferOrSharedArrayBuffer);
4756
});
4857

4958
promise_test(async () => {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Cross-Origin-Opener-Policy: same-origin
2+
Cross-Origin-Embedder-Policy: require-corp
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Cross-Origin-Opener-Policy: same-origin
2+
Cross-Origin-Embedder-Policy: require-corp
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
test(() => {
2+
// Truncated sequences
3+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0])), "\uFFFD");
4+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x9F])), "\uFFFD");
5+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x9F, 0x92])), "\uFFFD");
6+
7+
// Errors near end-of-queue
8+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x9F, 0x41])), "\uFFFDA");
9+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x41, 0x42])), "\uFFFDAB");
10+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x41, 0xF0])), "\uFFFDA\uFFFD");
11+
assert_equals(new TextDecoder().decode(new Uint8Array([0xF0, 0x8F, 0x92])), "\uFFFD\uFFFD\uFFFD");
12+
}, "TextDecoder end-of-queue handling");
13+
14+
test(() => {
15+
const decoder = new TextDecoder();
16+
decoder.decode(new Uint8Array([0xF0]), { stream: true });
17+
assert_equals(decoder.decode(), "\uFFFD");
18+
19+
decoder.decode(new Uint8Array([0xF0]), { stream: true });
20+
decoder.decode(new Uint8Array([0x9F]), { stream: true });
21+
assert_equals(decoder.decode(), "\uFFFD");
22+
23+
decoder.decode(new Uint8Array([0xF0, 0x9F]), { stream: true });
24+
assert_equals(decoder.decode(new Uint8Array([0x92])), "\uFFFD");
25+
26+
assert_equals(decoder.decode(new Uint8Array([0xF0, 0x9F]), { stream: true }), "");
27+
assert_equals(decoder.decode(new Uint8Array([0x41]), { stream: true }), "\uFFFDA");
28+
assert_equals(decoder.decode(), "");
29+
30+
assert_equals(decoder.decode(new Uint8Array([0xF0, 0x41, 0x42]), { stream: true }), "\uFFFDAB");
31+
assert_equals(decoder.decode(), "");
32+
33+
assert_equals(decoder.decode(new Uint8Array([0xF0, 0x41, 0xF0]), { stream: true }), "\uFFFDA");
34+
assert_equals(decoder.decode(), "\uFFFD");
35+
36+
assert_equals(decoder.decode(new Uint8Array([0xF0]), { stream: true }), "");
37+
assert_equals(decoder.decode(new Uint8Array([0x8F]), { stream: true }), "\uFFFD\uFFFD");
38+
assert_equals(decoder.decode(new Uint8Array([0x92]), { stream: true }), "\uFFFD");
39+
assert_equals(decoder.decode(), "");
40+
}, "TextDecoder end-of-queue handling using stream: true");

test/fixtures/wpt/encoding/textdecoder-streaming.any.js

+50-3
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,62 @@ var octets = {
2828
var decoder = new TextDecoder(encoding);
2929
for (var i = 0; i < encoded.length; i += len) {
3030
var sub = [];
31-
for (var j = i; j < encoded.length && j < i + len; ++j)
31+
for (var j = i; j < encoded.length && j < i + len; ++j) {
3232
sub.push(encoded[j]);
33-
var uintArray = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, sub.length));
34-
uintArray.set(sub);
33+
}
34+
var uintArray = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, sub.length));
35+
uintArray.set(sub);
3536
out += decoder.decode(uintArray, {stream: true});
3637
}
3738
out += decoder.decode();
3839
assert_equals(out, string);
3940
}, 'Streaming decode: ' + encoding + ', ' + len + ' byte window (' + arrayBufferOrSharedArrayBuffer + ')');
4041
}
4142
});
43+
44+
test(() => {
45+
function bytes(byteArray) {
46+
const view = new Uint8Array(createBuffer(arrayBufferOrSharedArrayBuffer, byteArray.length));
47+
view.set(byteArray);
48+
return view;
49+
}
50+
51+
const decoder = new TextDecoder();
52+
53+
assert_equals(decoder.decode(bytes([0xC1]), {stream: true}), "\uFFFD");
54+
assert_equals(decoder.decode(), "");
55+
56+
assert_equals(decoder.decode(bytes([0xF5]), {stream: true}), "\uFFFD");
57+
assert_equals(decoder.decode(), "");
58+
59+
assert_equals(decoder.decode(bytes([0xE0, 0x41]), {stream: true}), "\uFFFDA");
60+
assert_equals(decoder.decode(bytes([0x42])), "B");
61+
62+
assert_equals(decoder.decode(bytes([0xE0, 0x80]), {stream: true}), "\uFFFD\uFFFD");
63+
assert_equals(decoder.decode(bytes([0x80])), "\uFFFD");
64+
65+
assert_equals(decoder.decode(bytes([0xED, 0xA0]), {stream: true}), "\uFFFD\uFFFD");
66+
assert_equals(decoder.decode(bytes([0x80])), "\uFFFD");
67+
68+
assert_equals(decoder.decode(bytes([0xF0, 0x41]), {stream: true}), "\uFFFDA");
69+
assert_equals(decoder.decode(bytes([0x42]), {stream: true}), "B");
70+
assert_equals(decoder.decode(bytes([0x43])), "C");
71+
72+
assert_equals(decoder.decode(bytes([0xF0, 0x80]), {stream: true}), "\uFFFD\uFFFD");
73+
assert_equals(decoder.decode(bytes([0x80]), {stream: true}), "\uFFFD");
74+
assert_equals(decoder.decode(bytes([0x80])), "\uFFFD");
75+
76+
assert_equals(decoder.decode(bytes([0xF4, 0xA0]), {stream: true}), "\uFFFD\uFFFD");
77+
assert_equals(decoder.decode(bytes([0x80]), {stream: true}), "\uFFFD");
78+
assert_equals(decoder.decode(bytes([0x80])), "\uFFFD");
79+
80+
assert_equals(decoder.decode(bytes([0xF0, 0x90, 0x41]), {stream: true}), "\uFFFDA");
81+
assert_equals(decoder.decode(bytes([0x42])), "B");
82+
83+
// 4-byte UTF-8 sequences always correspond to non-BMP characters. Here
84+
// we make sure that, although the first 3 bytes are enough to emit the
85+
// lead surrogate, it only gets emitted when the fourth byte is read.
86+
assert_equals(decoder.decode(bytes([0xF0, 0x9F, 0x92]), {stream: true}), "");
87+
assert_equals(decoder.decode(bytes([0xA9])), "\u{1F4A9}");
88+
}, `Streaming decode: UTF-8 chunk tests (${arrayBufferOrSharedArrayBuffer})`);
4289
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Cross-Origin-Opener-Policy: same-origin
2+
Cross-Origin-Embedder-Policy: require-corp

test/fixtures/wpt/versions.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"path": "dom/events"
1717
},
1818
"encoding": {
19-
"commit": "35f70910d3753c8b650fdfd4c716caedfefe88c9",
19+
"commit": "c1b24fce6e625c1b79124a58f27bf9adce02d5d7",
2020
"path": "encoding"
2121
},
2222
"FileAPI": {

test/wpt/status/encoding.json

+10-5
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
"requires": ["small-icu"]
1616
},
1717
"textdecoder-streaming.any.js": {
18-
"requires": ["small-icu"],
19-
"fail": "WebAssembly.Memory does not support shared:true"
18+
"requires": ["small-icu"]
2019
},
2120
"textdecoder-utf16-surrogates.any.js": {
2221
"requires": ["small-icu"]
@@ -53,10 +52,10 @@
5352
"fail": "No implementation of TextDecoderStream and TextEncoderStream"
5453
},
5554
"encodeInto.any.js": {
56-
"fail": "WebAssembly.Memory does not support shared:true"
55+
"requires": ["small-icu"]
5756
},
5857
"textdecoder-copy.any.js": {
59-
"fail": "WebAssembly.Memory does not support shared:true"
58+
"requires": ["small-icu"]
6059
},
6160
"legacy-mb-schinese/gbk/gbk-decoder.any.js": {
6261
"requires": ["full-icu"],
@@ -67,6 +66,12 @@
6766
"skip": "The gb18030 encoding is not supported"
6867
},
6968
"textdecoder-arguments.any.js": {
70-
"fail": "Does not support flushing an incomplete sequence"
69+
"requires": ["small-icu"]
70+
},
71+
"single-byte-decoder.window.js": {
72+
"skip": "location is not defined"
73+
},
74+
"textdecoder-eof.any.js": {
75+
"requires": ["small-icu"]
7176
}
7277
}

0 commit comments

Comments
 (0)