Skip to content

Commit 4eff879

Browse files
committed
test: add one more test from WPT
1 parent e27cb96 commit 4eff879

3 files changed

Lines changed: 63 additions & 1 deletion

File tree

tests/wpt/fallback.test.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ fs.readFileSync(path.join(__dirname, 'fixtures/encoding/encodeInto.any.js'))
6464
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/iso-2022-jp-decoder.any.js'))
6565
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/legacy-mb-schinese/gb18030/gb18030-decoder.any.js'))
6666
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/legacy-mb-schinese/gbk/gbk-decoder.any.js'))
67+
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/streams/backpressure.any.js'))
6768
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/streams/decode-attributes.any.js'))
6869
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/streams/decode-bad-chunks.any.js'))
6970
fs.readFileSync(path.join(__dirname, 'fixtures/encoding/streams/decode-ignore-bom.any.js'))
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// META: global=window,worker,shadowrealm
2+
3+
'use strict';
4+
5+
const classes = [
6+
{
7+
name: 'TextDecoderStream',
8+
input: new Uint8Array([65])
9+
},
10+
{
11+
name: 'TextEncoderStream',
12+
input: 'A'
13+
}
14+
];
15+
16+
const microtasksRun = () => new Promise(resolve => step_timeout(resolve, 0));
17+
18+
for (const streamClass of classes) {
19+
promise_test(async () => {
20+
const stream = new self[streamClass.name]();
21+
const writer = stream.writable.getWriter();
22+
const reader = stream.readable.getReader();
23+
const events = [];
24+
await microtasksRun();
25+
const writePromise = writer.write(streamClass.input);
26+
writePromise.then(() => events.push('write'));
27+
await microtasksRun();
28+
events.push('paused');
29+
await reader.read();
30+
events.push('read');
31+
await writePromise;
32+
assert_array_equals(events, ['paused', 'read', 'write'],
33+
'write should happen after read');
34+
}, 'write() should not complete until read relieves backpressure for ' +
35+
`${streamClass.name}`);
36+
37+
promise_test(async () => {
38+
const stream = new self[streamClass.name]();
39+
const writer = stream.writable.getWriter();
40+
const reader = stream.readable.getReader();
41+
const events = [];
42+
await microtasksRun();
43+
const readPromise1 = reader.read();
44+
readPromise1.then(() => events.push('read1'));
45+
const writePromise1 = writer.write(streamClass.input);
46+
const writePromise2 = writer.write(streamClass.input);
47+
writePromise1.then(() => events.push('write1'));
48+
writePromise2.then(() => events.push('write2'));
49+
await microtasksRun();
50+
events.push('paused');
51+
const readPromise2 = reader.read();
52+
readPromise2.then(() => events.push('read2'));
53+
await Promise.all([writePromise1, writePromise2,
54+
readPromise1, readPromise2]);
55+
assert_array_equals(events, ['read1', 'write1', 'paused', 'read2',
56+
'write2'],
57+
'writes should not happen before read2');
58+
}, 'additional writes should wait for backpressure to be relieved for ' +
59+
`class ${streamClass.name}`);
60+
}

tests/wpt/loader.cjs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ globalThis.generate_tests = (t, l) => {
2828
})
2929
}
3030

31-
globalThis.assert_equals = assert.strictEqual
3231
globalThis.format_value = (x) => JSON.stringify(x)
32+
globalThis.step_timeout = setTimeout
33+
globalThis.assert_equals = assert.strictEqual
3334
globalThis.assert_true = (x, ...r) => assert.strictEqual(x, true, ...r)
3435
globalThis.assert_false = (x, ...r) => assert.strictEqual(x, false, ...r)
3536
globalThis.assert_not_equals = (a, b, ...r) => assert.notEqual(a, b, ...r)

0 commit comments

Comments
 (0)