◐ Shell
clean mode source ↗

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+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');

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+9951081

promise_test(t => {

9961082

const stream = new ReadableStream({

9971083

start(controller) {