Skip to content

Commit 1178926

Browse files
test: update WPT for streams to f8f26a372f
PR-URL: #62864 Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent d44a71a commit 1178926

28 files changed

Lines changed: 820 additions & 45 deletions

test/fixtures/wpt/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Last update:
2727
- performance-timeline: https://github.com/web-platform-tests/wpt/tree/94caab7038/performance-timeline
2828
- resource-timing: https://github.com/web-platform-tests/wpt/tree/22d38586d0/resource-timing
2929
- resources: https://github.com/web-platform-tests/wpt/tree/6a2f322376/resources
30-
- streams: https://github.com/web-platform-tests/wpt/tree/bc9dcbbf1a/streams
30+
- streams: https://github.com/web-platform-tests/wpt/tree/f8f26a372f/streams
3131
- url: https://github.com/web-platform-tests/wpt/tree/7a3645b79a/url
3232
- urlpattern: https://github.com/web-platform-tests/wpt/tree/f07c03cbed/urlpattern
3333
- user-timing: https://github.com/web-platform-tests/wpt/tree/5ae85bf826/user-timing

test/fixtures/wpt/streams/META.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
spec: https://streams.spec.whatwg.org/
22
suggested_reviewers:
3-
- domenic
4-
- yutakahirano
53
- youennf
64
- wanderview
75
- ricea
6+
- MattiasBuelens
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
features:
2+
- name: streams
3+
files:
4+
# Top-level only. Subdirectories have their own mapping.
5+
- "*"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
features:
2+
- name: streams
3+
files: "**"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
features:
2+
- name: readable-byte-streams
3+
files: "**"

test/fixtures/wpt/streams/readable-byte-streams/bad-buffers-and-views.any.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,7 @@ promise_test(t => {
123123
async_test(t => {
124124
const stream = new ReadableStream({
125125
pull: t.step_func_done(c => {
126-
// Detach it by reading into it
127-
reader.read(c.byobRequest.view);
126+
c.byobRequest.view.buffer.transfer();
128127

129128
assert_throws_js(TypeError, () => c.byobRequest.respond(1),
130129
'respond() must throw if the corresponding view has become detached');
@@ -141,9 +140,7 @@ async_test(t => {
141140
const stream = new ReadableStream({
142141
pull: t.step_func_done(c => {
143142
c.close();
144-
145-
// Detach it by reading into it
146-
reader.read(c.byobRequest.view);
143+
c.byobRequest.view.buffer.transfer();
147144

148145
assert_throws_js(TypeError, () => c.byobRequest.respond(0),
149146
'respond() must throw if the corresponding view has become detached');
@@ -159,9 +156,8 @@ async_test(t => {
159156
async_test(t => {
160157
const stream = new ReadableStream({
161158
pull: t.step_func_done(c => {
162-
// Detach it by reading into it
163159
const view = new Uint8Array([1, 2, 3]);
164-
reader.read(view);
160+
view.buffer.transfer();
165161

166162
assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
167163
}),
@@ -364,8 +360,7 @@ async_test(t => {
364360
async_test(t => {
365361
const stream = new ReadableStream({
366362
pull: t.step_func_done(c => {
367-
// Detach it by reading into it
368-
reader.read(c.byobRequest.view);
363+
c.byobRequest.view.buffer.transfer();
369364

370365
assert_throws_js(TypeError, () => c.enqueue(new Uint8Array([1])),
371366
'enqueue() must throw if the BYOB request\'s buffer has become detached');
@@ -382,9 +377,7 @@ async_test(t => {
382377
const stream = new ReadableStream({
383378
pull: t.step_func_done(c => {
384379
c.close();
385-
386-
// Detach it by reading into it
387-
reader.read(c.byobRequest.view);
380+
c.byobRequest.view.buffer.transfer();
388381

389382
assert_throws_js(TypeError, () => c.enqueue(new Uint8Array([1])),
390383
'enqueue() must throw if the BYOB request\'s buffer has become detached');
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// META: global=window,worker
2+
'use strict';
3+
4+
test(() => {
5+
const byteReadable = new ReadableStream({type: 'bytes'});
6+
byteReadable.getReader();
7+
assert_throws_js(TypeError, () => byteReadable.tee(), 'byteReadable.tee() must throw');
8+
}, 'tee() on a locked byte stream does not crash');
9+

test/fixtures/wpt/streams/readable-byte-streams/general.any.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,29 @@ promise_test(t => {
236236
});
237237
}, 'ReadableStream with byte source: Test that erroring a stream does not release a BYOB reader automatically');
238238

239+
promise_test(async t => {
240+
const rs = new ReadableStream({
241+
type: 'bytes',
242+
start(c) {
243+
c.enqueue(new Uint8Array([1, 2, 3]));
244+
}
245+
});
246+
247+
const reader1 = rs.getReader({mode: 'byob'});
248+
reader1.releaseLock();
249+
250+
const reader2 = rs.getReader({mode: 'byob'});
251+
252+
// Should be a no-op
253+
reader1.releaseLock();
254+
255+
const result = await reader2.read(new Uint8Array([0, 0, 0]));
256+
assert_typed_array_equals(result.value, new Uint8Array([1, 2, 3]),
257+
'read() should still work on reader2 even after reader1 is released');
258+
assert_false(result.done, 'done');
259+
260+
}, 'ReadableStream with byte source: cannot use an already-released BYOB reader to unlock a stream again');
261+
239262
promise_test(async t => {
240263
const stream = new ReadableStream({
241264
type: 'bytes'
@@ -992,6 +1015,69 @@ promise_test(() => {
9921015
}, 'ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array enqueues the 1 byte ' +
9931016
'remainder');
9941017

1018+
promise_test(() => {
1019+
let pullCount = 0;
1020+
1021+
let controller;
1022+
let byobRequest;
1023+
let viewInfo;
1024+
1025+
const stream = new ReadableStream({
1026+
start(c) {
1027+
controller = c;
1028+
},
1029+
pull() {
1030+
++pullCount;
1031+
1032+
byobRequest = controller.byobRequest;
1033+
const view = byobRequest.view;
1034+
viewInfo = extractViewInfo(view);
1035+
1036+
view[0] = 0x01;
1037+
view[1] = 0x02;
1038+
view[2] = 0x03;
1039+
1040+
controller.byobRequest.respond(3);
1041+
},
1042+
type: 'bytes'
1043+
});
1044+
1045+
const reader = stream.getReader({ mode: 'byob' });
1046+
const read1 = reader.read(new Uint16Array(2));
1047+
const read2 = reader.read(new Uint8Array(1));
1048+
1049+
return read1.then(result => {
1050+
assert_equals(pullCount, 1);
1051+
1052+
assert_false(result.done, 'done');
1053+
1054+
const view = result.value;
1055+
assert_equals(view.byteOffset, 0, 'byteOffset');
1056+
assert_equals(view.byteLength, 2, 'byteLength');
1057+
1058+
const dataView = new DataView(view.buffer, view.byteOffset, view.byteLength);
1059+
assert_equals(dataView.getUint16(0), 0x0102);
1060+
1061+
return read2;
1062+
}).then(result => {
1063+
assert_equals(pullCount, 1);
1064+
assert_not_equals(byobRequest, null, 'byobRequest must not be null');
1065+
assert_equals(viewInfo.constructor, Uint8Array, 'view.constructor should be Uint8Array');
1066+
assert_equals(viewInfo.bufferByteLength, 4, 'view.buffer.byteLength should be 4');
1067+
assert_equals(viewInfo.byteOffset, 0, 'view.byteOffset should be 0');
1068+
assert_equals(viewInfo.byteLength, 4, 'view.byteLength should be 4');
1069+
1070+
assert_false(result.done, 'done');
1071+
1072+
const view = result.value;
1073+
assert_equals(view.byteOffset, 0, 'byteOffset');
1074+
assert_equals(view.byteLength, 1, 'byteLength');
1075+
1076+
assert_equals(view[0], 0x03);
1077+
});
1078+
}, 'ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array fulfills second read(view) ' +
1079+
'with the 1 byte remainder');
1080+
9951081
promise_test(t => {
9961082
const stream = new ReadableStream({
9971083
start(controller) {
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// META: global=window,worker,shadowrealm
2+
// META: script=../resources/test-utils.js
3+
// META: script=../resources/rs-test-templates.js
4+
'use strict';
5+
6+
templatedRSEmpty('ReadableStream with byte source (empty)', () => {
7+
return new ReadableStream({ type: 'bytes' });
8+
});
9+
10+
templatedRSEmptyReader('ReadableStream with byte source (empty) default reader', () => {
11+
const stream = new ReadableStream({ type: 'bytes' });
12+
const reader = stream.getReader();
13+
return { stream, reader, read: () => reader.read() };
14+
});
15+
16+
templatedRSEmptyReader('ReadableStream with byte source (empty) BYOB reader', () => {
17+
const stream = new ReadableStream({ type: 'bytes' });
18+
const reader = stream.getReader({ mode: 'byob' });
19+
return { stream, reader, read: () => reader.read(new Uint8Array([0])) };
20+
});
21+
22+
templatedRSThrowAfterCloseOrError('ReadableStream with byte source', (extras) => {
23+
return new ReadableStream({ type: 'bytes', ...extras });
24+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
features:
2+
- name: streams
3+
files:
4+
- "*"
5+
- "!async-iterator.any.js"
6+
- "!from.any.js"
7+
# 'owning' type is not yet standardized
8+
- "!owning-type*"
9+
- name: async-iterable-streams
10+
files:
11+
- async-iterator.any.js
12+
- name: readablestream-from
13+
files:
14+
- from.any.js

0 commit comments

Comments
 (0)