test: update WPT for streams to f8f26a372f · nodejs/node@d0d19bd
@@ -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');
238238239+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+239262promise_test(async t => {
240263const stream = new ReadableStream({
241264type: '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');
99410171018+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+9951081promise_test(t => {
9961082const stream = new ReadableStream({
9971083start(controller) {