Skip to content

Commit

Permalink
Bug 1917950 [wpt PR 48085] - Streams: test whether patched then() s…
Browse files Browse the repository at this point in the history
…ees correct `byobRequest`, a=testonly

Automatic update from web-platform-tests
Streams: test whether patched `then()` sees correct `byobRequest`

See whatwg/streams#1326 for context.

This also updates the `transferArrayBufferView` test utility to be synchronous, which slightly changes the timings of some tests in `streams/readable-byte-streams/general.any.js`.
--

wpt-commits: bc9dcbbf1a4c2c741ef47f47d6ede6458f40c4a4
wpt-pr: 48085

UltraBlame original commit: 427adfdff2597708b7034c942818644b0fe69e50
  • Loading branch information
marco-c committed Dec 1, 2024
1 parent 1cb4352 commit 28e4f11
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -870,11 +870,11 @@ promise_test(() => {
start(c) {
controller = c;
},
async pull() {
pull() {
byobRequestDefined.push(controller.byobRequest !== null);
const initialByobRequest = controller.byobRequest;

const transferredView = await transferArrayBufferView(controller.byobRequest.view);
const transferredView = transferArrayBufferView(controller.byobRequest.view);
transferredView[0] = 0x01;
controller.byobRequest.respondWithNewView(transferredView);

Expand Down Expand Up @@ -2288,7 +2288,7 @@ promise_test(async t => {
await pullCalledPromise;


const transferredView = await transferArrayBufferView(controller.byobRequest.view);
const transferredView = transferArrayBufferView(controller.byobRequest.view);
const newView = transferredView.subarray(0, 1);
newView[0] = 42;

Expand Down Expand Up @@ -2328,7 +2328,7 @@ promise_test(async t => {
await pullCalledPromise;


const transferredView = await transferArrayBufferView(controller.byobRequest.view);
const transferredView = transferArrayBufferView(controller.byobRequest.view);
const newView = transferredView.subarray(0, 0);

controller.close();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@


'use strict';




promise_test(async (t) => {
let controller;
const rs = new ReadableStream({
type: 'bytes',
start(c) {
controller = c;
}
});
const reader = rs.getReader({mode: 'byob'});

const length = 0x4000;
const buffer = new ArrayBuffer(length);
const bigArray = new BigUint64Array(buffer, length - 8, 1);

const read1 = reader.read(new Uint8Array(new ArrayBuffer(0x100)));
const read2 = reader.read(bigArray);

let flag = false;
Object.defineProperty(Object.prototype, 'then', {
get: t.step_func(() => {
if (!flag) {
flag = true;
assert_equals(controller.byobRequest, null, 'byobRequest should be null after filling both views');
}
}),
configurable: true
});
t.add_cleanup(() => {
delete Object.prototype.then;
});

controller.enqueue(new Uint8Array(0x110).fill(0x42));
assert_true(flag, 'patched then() should be called');


const result1 = await read1;
assert_false(result1.done, 'result1.done');
assert_typed_array_equals(result1.value, new Uint8Array(0x100).fill(0x42), 'result1.value');


const result2 = await read2;
assert_false(result2.done, 'result2.done');
assert_equals(result2.value.constructor, BigUint64Array, 'result2.value constructor');
assert_equals(result2.value.byteOffset, length - 8, 'result2.value byteOffset');
assert_equals(result2.value.length, 1, 'result2.value length');
assert_array_equals([...result2.value], [0x42424242_42424242n], 'result2.value contents');
}, 'Patched then() sees byobRequest after filling all pending pull-into descriptors');
10 changes: 1 addition & 9 deletions testing/web-platform/tests/streams/resources/rs-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,15 +215,7 @@
}

function transferArrayBufferView(view) {
const noopByteStream = new ReadableStream({
type: 'bytes',
pull(c) {
c.byobRequest.respond(c.byobRequest.view.byteLength);
c.close();
}
});
const reader = noopByteStream.getReader({ mode: 'byob' });
return reader.read(view).then((result) => result.value);
return structuredClone(view, { transfer: [view.buffer] });
}

self.RandomPushSource = RandomPushSource;
Expand Down

0 comments on commit 28e4f11

Please sign in to comment.