| Index: third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
|
| diff --git a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
|
| index 589b9510786e55eef06cde9b5f650d8e9df50293..d9cc7fc88433d243b75192b7a8df98b68eb0cd4d 100644
|
| --- a/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
|
| +++ b/third_party/WebKit/LayoutTests/external/wpt/streams/readable-byte-streams/general.js
|
| @@ -20,6 +20,8 @@ test(() => {
|
|
|
| promise_test(() => {
|
| let startCalled = false;
|
| + let startCalledBeforePull = false;
|
| + let desiredSize;
|
| let controller;
|
|
|
| let resolveTestPromise;
|
| @@ -33,8 +35,8 @@ promise_test(() => {
|
| startCalled = true;
|
| },
|
| pull() {
|
| - assert_true(startCalled, 'start has been called');
|
| - assert_equals(controller.desiredSize, 256, 'desiredSize');
|
| + startCalledBeforePull = startCalled;
|
| + desiredSize = controller.desiredSize;
|
| resolveTestPromise();
|
| },
|
| type: 'bytes'
|
| @@ -42,7 +44,10 @@ promise_test(() => {
|
| highWaterMark: 256
|
| });
|
|
|
| - return testPromise;
|
| + return testPromise.then(() => {
|
| + assert_true(startCalledBeforePull, 'start should be called before pull');
|
| + assert_equals(desiredSize, 256, 'desiredSize should equal highWaterMark');
|
| + });
|
|
|
| }, 'ReadableStream with byte source: Construct and expect start and pull being called');
|
|
|
| @@ -84,17 +89,15 @@ promise_test(() => {
|
|
|
| }, 'ReadableStream with byte source: No automatic pull call if start doesn\'t finish');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| new ReadableStream({
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| }, {
|
| highWaterMark: 0
|
| });
|
|
|
| - return Promise.resolve().then(() => {});
|
| + return Promise.resolve();
|
| }, 'ReadableStream with byte source: Construct with highWaterMark of 0');
|
|
|
| promise_test(t => {
|
| @@ -119,14 +122,12 @@ promise_test(t => {
|
| return promise_rejects(t, new TypeError(), reader.closed, 'closed must reject');
|
| }, 'ReadableStream with byte source: getReader() with mode set to byob, then releaseLock()');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| const stream = new ReadableStream({
|
| start(c) {
|
| c.close();
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -137,14 +138,12 @@ promise_test(() => {
|
| });
|
| }, 'ReadableStream with byte source: Test that closing a stream does not release a reader automatically');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| const stream = new ReadableStream({
|
| start(c) {
|
| c.close();
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -160,9 +159,7 @@ promise_test(t => {
|
| start(c) {
|
| c.error(error1);
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -178,9 +175,7 @@ promise_test(t => {
|
| start(c) {
|
| c.error(error1);
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -244,31 +239,35 @@ promise_test(() => {
|
| });
|
| }, 'ReadableStream with byte source: Automatic pull() after start() and read()');
|
|
|
| +// View buffers are detached after pull() returns, so record the information at the time that pull() was called.
|
| +function extractViewInfo(view) {
|
| + return {
|
| + constructor: view.constructor,
|
| + bufferByteLength: view.buffer.byteLength,
|
| + byteOffset: view.byteOffset,
|
| + byteLength: view.byteLength
|
| + };
|
| +}
|
| +
|
| promise_test(() => {
|
| let pullCount = 0;
|
| let controller;
|
| + let byobRequest;
|
| + let viewDefined = false;
|
| + let viewInfo;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - if (pullCount === 0) {
|
| - const byobRequest = controller.byobRequest;
|
| - assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| -
|
| - const view = byobRequest.view;
|
| - assert_not_equals(view, undefined, 'byobRequest.view must no be undefined');
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 16);
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 16);
|
| + byobRequest = controller.byobRequest;
|
| + const view = byobRequest.view;
|
| + viewDefined = view !== undefined;
|
| + viewInfo = extractViewInfo(view);
|
|
|
| - view[0] = 0x01;
|
| - byobRequest.respond(1);
|
| - } else {
|
| - assert_unreached('Too many pull() calls');
|
| - }
|
| + view[0] = 0x01;
|
| + byobRequest.respond(1);
|
|
|
| ++pullCount;
|
| },
|
| @@ -286,6 +285,12 @@ promise_test(() => {
|
|
|
| return Promise.resolve().then(() => {
|
| assert_equals(pullCount, 1, 'pull() must have been invoked once');
|
| + assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| + assert_true(viewDefined, 'byobRequest.view must not be undefined');
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 16, 'view.buffer.byteLength should be 16');
|
| + assert_equals(viewInfo.byteOffset, 0, 'view.byteOffset should be 0');
|
| + assert_equals(viewInfo.byteLength, 16, 'view.byteLength should be 16');
|
| return readPromise;
|
| }).then(result => {
|
| assert_not_equals(result.value, undefined);
|
| @@ -294,47 +299,34 @@ promise_test(() => {
|
| assert_equals(result.value.byteOffset, 0);
|
| assert_equals(result.value.byteLength, 1);
|
| assert_equals(result.value[0], 0x01);
|
| + assert_equals(pullCount, 1, 'pull() should only be invoked once');
|
| });
|
| }, 'ReadableStream with byte source: autoAllocateChunkSize');
|
|
|
| promise_test(() => {
|
| let pullCount = 0;
|
| let controller;
|
| + const byobRequests = [];
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| + const byobRequest = controller.byobRequest;
|
| + const view = byobRequest.view;
|
| + byobRequests[pullCount] = {
|
| + defined: byobRequest !== undefined,
|
| + viewDefined: view !== undefined,
|
| + viewInfo: extractViewInfo(view)
|
| + };
|
| if (pullCount === 0) {
|
| - const byobRequest = controller.byobRequest;
|
| - assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| -
|
| - const view = byobRequest.view;
|
| - assert_not_equals(view, undefined, 'byobRequest.view must no be undefined');
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 16);
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 16);
|
| -
|
| view[0] = 0x01;
|
| byobRequest.respond(1);
|
| } else if (pullCount === 1) {
|
| - const byobRequest = controller.byobRequest;
|
| - assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| -
|
| - const view = byobRequest.view;
|
| - assert_not_equals(view, undefined, 'byobRequest.view must no be undefined');
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 32);
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 32);
|
| -
|
| view[0] = 0x02;
|
| view[1] = 0x03;
|
| byobRequest.respond(2);
|
| - } else {
|
| - assert_unreached('Too many pull() calls');
|
| }
|
|
|
| ++pullCount;
|
| @@ -353,6 +345,14 @@ promise_test(() => {
|
| assert_equals(result.value.byteOffset, 0);
|
| assert_equals(result.value.byteLength, 1);
|
| assert_equals(result.value[0], 0x01);
|
| + const byobRequest = byobRequests[0];
|
| + assert_true(byobRequest.defined, 'first byobRequest must not be undefined');
|
| + assert_true(byobRequest.viewDefined, 'first byobRequest.view must not be undefined');
|
| + const viewInfo = byobRequest.viewInfo;
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'first view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 16, 'first view.buffer.byteLength should be 16');
|
| + assert_equals(viewInfo.byteOffset, 0, 'first view.byteOffset should be 0');
|
| + assert_equals(viewInfo.byteLength, 16, 'first view.byteLength should be 16');
|
|
|
| reader.releaseLock();
|
| const byobReader = stream.getReader({ mode: 'byob' });
|
| @@ -365,6 +365,15 @@ promise_test(() => {
|
| assert_equals(result.value.byteLength, 2);
|
| assert_equals(result.value[0], 0x02);
|
| assert_equals(result.value[1], 0x03);
|
| + const byobRequest = byobRequests[1];
|
| + assert_true(byobRequest.defined, 'second byobRequest must not be undefined');
|
| + assert_true(byobRequest.viewDefined, 'second byobRequest.view must not be undefined');
|
| + const viewInfo = byobRequest.viewInfo;
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'second view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 32, 'second view.buffer.byteLength should be 32');
|
| + assert_equals(viewInfo.byteOffset, 0, 'second view.byteOffset should be 0');
|
| + assert_equals(viewInfo.byteLength, 32, 'second view.byteLength should be 32');
|
| + assert_equals(pullCount, 2, 'pullCount should be 2');
|
| });
|
| }, 'ReadableStream with byte source: Mix of auto allocate and BYOB');
|
|
|
| @@ -394,19 +403,20 @@ promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + let desiredSizeInStart;
|
| + let desiredSizeInPull;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| c.enqueue(new Uint8Array(16));
|
| - assert_equals(c.desiredSize, -8, 'desiredSize after enqueue() in start()');
|
| -
|
| + desiredSizeInStart = c.desiredSize;
|
| controller = c;
|
| },
|
| pull() {
|
| ++pullCount;
|
|
|
| if (pullCount === 1) {
|
| - assert_equals(controller.desiredSize, 8, 'desiredSize in pull()');
|
| + desiredSizeInPull = controller.desiredSize;
|
| }
|
| },
|
| type: 'bytes'
|
| @@ -416,11 +426,13 @@ promise_test(() => {
|
|
|
| return Promise.resolve().then(() => {
|
| assert_equals(pullCount, 0, 'No pull as the queue was filled by start()');
|
| + assert_equals(desiredSizeInStart, -8, 'desiredSize after enqueue() in start()');
|
|
|
| const reader = stream.getReader();
|
|
|
| const promise = reader.read();
|
| assert_equals(pullCount, 1, 'The first pull() should be made on read()');
|
| + assert_equals(desiredSizeInPull, 8, 'desiredSize in pull()');
|
|
|
| return promise.then(result => {
|
| assert_equals(result.done, false, 'result.done');
|
| @@ -504,7 +516,7 @@ promise_test(() => {
|
| });
|
| }, 'ReadableStream with byte source: enqueue() with Uint16Array, getReader(), then read()');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| const stream = new ReadableStream({
|
| start(c) {
|
| const view = new Uint8Array(16);
|
| @@ -512,9 +524,7 @@ promise_test(() => {
|
| view[8] = 0x02;
|
| c.enqueue(view);
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -547,16 +557,14 @@ promise_test(() => {
|
| });
|
| }, 'ReadableStream with byte source: enqueue(), read(view) partially, then read()');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| let controller;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -579,15 +587,13 @@ promise_test(() => {
|
| });
|
| }, 'ReadableStream with byte source: getReader(), enqueue(), close(), then read()');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| const stream = new ReadableStream({
|
| start(c) {
|
| c.enqueue(new Uint8Array(16));
|
| c.close();
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -609,6 +615,7 @@ promise_test(() => {
|
|
|
| promise_test(() => {
|
| let controller;
|
| + let byobRequest;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| @@ -616,7 +623,7 @@ promise_test(() => {
|
| },
|
| pull() {
|
| controller.enqueue(new Uint8Array(16));
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
| @@ -626,6 +633,7 @@ promise_test(() => {
|
| return reader.read().then(result => {
|
| assert_equals(result.done, false, 'done');
|
| assert_equals(result.value.byteLength, 16, 'byteLength');
|
| + assert_equals(byobRequest, undefined, 'byobRequest must be undefined');
|
| });
|
| }, 'ReadableStream with byte source: Respond to pull() by enqueue()');
|
|
|
| @@ -633,25 +641,20 @@ promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + let byobRequest;
|
| + const desiredSizes = [];
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest is undefined');
|
| -
|
| - if (pullCount === 0) {
|
| - assert_equals(controller.desiredSize, 256, 'desiredSize on pull');
|
| -
|
| - controller.enqueue(new Uint8Array(1));
|
| - assert_equals(controller.desiredSize, 256, 'desiredSize after 1st enqueue()');
|
| -
|
| - controller.enqueue(new Uint8Array(1));
|
| - assert_equals(controller.desiredSize, 256, 'desiredSize after 2nd enqueue()');
|
| - } else {
|
| - assert_unreached('Too many pull() calls');
|
| - }
|
| + byobRequest = controller.byobRequest;
|
| + desiredSizes.push(controller.desiredSize);
|
| + controller.enqueue(new Uint8Array(1));
|
| + desiredSizes.push(controller.desiredSize);
|
| + controller.enqueue(new Uint8Array(1));
|
| + desiredSizes.push(controller.desiredSize);
|
|
|
| ++pullCount;
|
| },
|
| @@ -680,6 +683,11 @@ promise_test(() => {
|
| assert_equals(result[1].value.byteLength, 1, 'result[1].value.byteLength');
|
| assert_equals(result[2].done, false, 'result[2].done');
|
| assert_equals(result[2].value.byteLength, 1, 'result[2].value.byteLength');
|
| + assert_equals(byobRequest, undefined, 'byobRequest should be undefined');
|
| + assert_equals(desiredSizes[0], 256, 'desiredSize on pull should be 256');
|
| + assert_equals(desiredSizes[1], 256, 'desiredSize after 1st enqueue() should be 256');
|
| + assert_equals(desiredSizes[2], 256, 'desiredSize after 2nd enqueue() should be 256');
|
| + assert_equals(pullCount, 1, 'pull() should only be called once');
|
| });
|
| }, 'ReadableStream with byte source: Respond to pull() by enqueue() asynchronously');
|
|
|
| @@ -687,23 +695,20 @@ promise_test(() => {
|
| let controller;
|
|
|
| let pullCount = 0;
|
| + const byobRequestDefined = [];
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - if (pullCount === 0) {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined before respond()');
|
| + byobRequestDefined.push(controller.byobRequest !== undefined);
|
|
|
| - const view = controller.byobRequest.view;
|
| - view[0] = 0x01;
|
| - controller.byobRequest.respond(1);
|
| + const view = controller.byobRequest.view;
|
| + view[0] = 0x01;
|
| + controller.byobRequest.respond(1);
|
|
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined after respond()');
|
| - } else {
|
| - assert_unreached('Too many pull() calls');
|
| - }
|
| + byobRequestDefined.push(controller.byobRequest !== undefined);
|
|
|
| ++pullCount;
|
| },
|
| @@ -716,6 +721,9 @@ promise_test(() => {
|
| assert_equals(result.done, false, 'result.done');
|
| assert_equals(result.value.byteLength, 1, 'result.value.byteLength');
|
| assert_equals(result.value[0], 0x01, 'result.value[0]');
|
| + assert_equals(pullCount, 1, 'pull() should be called only once');
|
| + assert_true(byobRequestDefined[0], 'byobRequest must not be undefined before respond()');
|
| + assert_false(byobRequestDefined[1], 'byobRequest must be undefined after respond()');
|
| });
|
| }, 'ReadableStream with byte source: read(view), then respond()');
|
|
|
| @@ -723,28 +731,25 @@ promise_test(() => {
|
| let controller;
|
|
|
| let pullCount = 0;
|
| + const byobRequestDefined = [];
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - if (pullCount === 0) {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined before respond()');
|
| -
|
| - // Emulate ArrayBuffer transfer by just creating a new ArrayBuffer and pass it. By checking the result of
|
| - // read(view), we test that the respond()'s buffer argument is working correctly.
|
| - //
|
| - // A real implementation of the underlying byte source would transfer controller.byobRequest.view.buffer into
|
| - // a new ArrayBuffer, then construct a view around it and write to it.
|
| - const transferredView = new Uint8Array(1);
|
| - transferredView[0] = 0x01;
|
| - controller.byobRequest.respondWithNewView(transferredView);
|
| -
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined after respond()');
|
| - } else {
|
| - assert_unreached('Too many pull() calls');
|
| - }
|
| + byobRequestDefined.push(controller.byobRequest !== undefined);
|
| +
|
| + // Emulate ArrayBuffer transfer by just creating a new ArrayBuffer and pass it. By checking the result of
|
| + // read(view), we test that the respond()'s buffer argument is working correctly.
|
| + //
|
| + // A real implementation of the underlying byte source would transfer controller.byobRequest.view.buffer into
|
| + // a new ArrayBuffer, then construct a view around it and write to it.
|
| + const transferredView = new Uint8Array(1);
|
| + transferredView[0] = 0x01;
|
| + controller.byobRequest.respondWithNewView(transferredView);
|
| +
|
| + byobRequestDefined.push(controller.byobRequest !== undefined);
|
|
|
| ++pullCount;
|
| },
|
| @@ -757,20 +762,30 @@ promise_test(() => {
|
| assert_equals(result.done, false, 'result.done');
|
| assert_equals(result.value.byteLength, 1, 'result.value.byteLength');
|
| assert_equals(result.value[0], 0x01, 'result.value[0]');
|
| + assert_equals(pullCount, 1, 'pull() should be called only once');
|
| + assert_true(byobRequestDefined[0], 'byobRequest must not be undefined before respond()');
|
| + assert_false(byobRequestDefined[1], 'byobRequest must be undefined after respond()');
|
| });
|
| }, 'ReadableStream with byte source: read(view), then respond() with a transferred ArrayBuffer');
|
|
|
| -promise_test(t => {
|
| +promise_test(() => {
|
| let controller;
|
| + let byobRequestWasDefined;
|
| + let incorrectRespondException;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest is not undefined');
|
| + byobRequestWasDefined = controller.byobRequest !== undefined;
|
| +
|
| + try {
|
| + controller.byobRequest.respond(2);
|
| + } catch (e) {
|
| + incorrectRespondException = e;
|
| + }
|
|
|
| - assert_throws(new RangeError(), () => controller.byobRequest.respond(2), 'respond() must throw');
|
| controller.byobRequest.respond(1);
|
| },
|
| type: 'bytes'
|
| @@ -778,9 +793,10 @@ promise_test(t => {
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - return reader.read(new Uint8Array(1)).catch(e => {
|
| - assert_unreached(e);
|
| - t.done();
|
| + return reader.read(new Uint8Array(1)).then(() => {
|
| + assert_true(byobRequestWasDefined, 'byobRequest should be defined');
|
| + assert_not_equals(incorrectRespondException, undefined, 'respond() must throw');
|
| + assert_equals(incorrectRespondException.name, 'RangeError', 'respond() must throw a RangeError');
|
| });
|
| }, 'ReadableStream with byte source: read(view), then respond() with too big value');
|
|
|
| @@ -788,26 +804,19 @@ promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + let byobRequest;
|
| + let viewInfo;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - if (pullCount > 1) {
|
| - assert_unreached('Too many pull calls');
|
| - }
|
| -
|
| ++pullCount;
|
|
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| - const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 4);
|
| -
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 4);
|
| + byobRequest = controller.byobRequest;
|
| + const view = byobRequest.view;
|
| + viewInfo = extractViewInfo(view);
|
|
|
| view[0] = 0x01;
|
| view[1] = 0x02;
|
| @@ -834,6 +843,11 @@ promise_test(() => {
|
| return reader.read(new Uint8Array(1));
|
| }).then(result => {
|
| assert_equals(pullCount, 1);
|
| + assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 4, 'view.buffer.byteLength should be 4');
|
| + assert_equals(viewInfo.byteOffset, 0, 'view.byteOffset should be 0');
|
| + assert_equals(viewInfo.byteLength, 4, 'view.byteLength should be 4');
|
|
|
| assert_equals(result.done, false, 'done');
|
|
|
| @@ -846,20 +860,14 @@ promise_test(() => {
|
| }, 'ReadableStream with byte source: respond(3) to read(view) with 2 element Uint16Array enqueues the 1 byte ' +
|
| 'remainder');
|
|
|
| -promise_test(() => {
|
| - let controller;
|
| -
|
| +promise_test(t => {
|
| const stream = new ReadableStream({
|
| - start(c) {
|
| + start(controller) {
|
| const view = new Uint8Array(16);
|
| view[15] = 0x01;
|
| - c.enqueue(view);
|
| -
|
| - controller = c;
|
| - },
|
| - pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest is undefined');
|
| + controller.enqueue(view);
|
| },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -875,8 +883,9 @@ promise_test(() => {
|
| });
|
| }, 'ReadableStream with byte source: enqueue(), getReader(), then read(view)');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| let cancelCount = 0;
|
| + let reason;
|
|
|
| const passedReason = new TypeError('foo');
|
|
|
| @@ -884,14 +893,10 @@ promise_test(() => {
|
| start(c) {
|
| c.enqueue(new Uint8Array(16));
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| - cancel(reason) {
|
| + pull: t.unreached_func('pull() should not be called'),
|
| + cancel(r) {
|
| if (cancelCount === 0) {
|
| - assert_equals(reason, passedReason);
|
| - } else {
|
| - assert_unreached('Too many cancel calls');
|
| + reason = r;
|
| }
|
|
|
| ++cancelCount;
|
| @@ -904,11 +909,13 @@ promise_test(() => {
|
| return reader.cancel(passedReason).then(result => {
|
| assert_equals(result, undefined);
|
| assert_equals(cancelCount, 1);
|
| + assert_equals(reason, passedReason, 'reason should equal the passed reason');
|
| });
|
| }, 'ReadableStream with byte source: enqueue(), getReader(), then cancel() (mode = not BYOB)');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| let cancelCount = 0;
|
| + let reason;
|
|
|
| const passedReason = new TypeError('foo');
|
|
|
| @@ -916,14 +923,10 @@ promise_test(() => {
|
| start(c) {
|
| c.enqueue(new Uint8Array(16));
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| - cancel(reason) {
|
| + pull: t.unreached_func('pull() should not be called'),
|
| + cancel(r) {
|
| if (cancelCount === 0) {
|
| - assert_equals(reason, passedReason);
|
| - } else {
|
| - assert_unreached('Too many cancel calls');
|
| + reason = r;
|
| }
|
|
|
| ++cancelCount;
|
| @@ -936,11 +939,13 @@ promise_test(() => {
|
| return reader.cancel(passedReason).then(result => {
|
| assert_equals(result, undefined);
|
| assert_equals(cancelCount, 1);
|
| + assert_equals(reason, passedReason, 'reason should equal the passed reason');
|
| });
|
| }, 'ReadableStream with byte source: enqueue(), getReader(), then cancel() (mode = BYOB)');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| let cancelCount = 0;
|
| + let reason;
|
|
|
| const passedReason = new TypeError('foo');
|
|
|
| @@ -950,16 +955,11 @@ promise_test(() => {
|
| start(c) {
|
| controller = c;
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| - cancel(reason) {
|
| + pull: t.unreached_func('pull() should not be called'),
|
| + cancel(r) {
|
| if (cancelCount === 0) {
|
| - assert_equals(reason, passedReason);
|
| -
|
| + reason = r;
|
| controller.byobRequest.respond(0);
|
| - } else {
|
| - assert_unreached('Too many cancel calls');
|
| }
|
|
|
| ++cancelCount;
|
| @@ -971,37 +971,36 @@ promise_test(() => {
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - const readPromise0 = reader.read(new Uint8Array(1)).then(result => {
|
| + const readPromise = reader.read(new Uint8Array(1)).then(result => {
|
| assert_equals(result.done, true);
|
| });
|
|
|
| - const readPromise1 = reader.cancel(passedReason).then(result => {
|
| + const cancelPromise = reader.cancel(passedReason).then(result => {
|
| assert_equals(result, undefined);
|
| assert_equals(cancelCount, 1);
|
| + assert_equals(reason, passedReason, 'reason should equal the passed reason');
|
| });
|
|
|
| - return Promise.all([readPromise0, readPromise1]);
|
| + return Promise.all([readPromise, cancelPromise]);
|
| }, 'ReadableStream with byte source: getReader(), read(view), then cancel()');
|
|
|
| promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + let byobRequest;
|
| + const viewInfos = [];
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest is undefined');
|
| + byobRequest = controller.byobRequest;
|
|
|
| - if (pullCount === 0) {
|
| - assert_equals(controller.byobRequest.view.byteLength, 2, 'byteLength before enqueue()');
|
| - controller.enqueue(new Uint8Array(1));
|
| - assert_equals(controller.byobRequest.view.byteLength, 1, 'byteLength after enqueue()');
|
| - } else {
|
| - assert_unreached('Too many pull calls');
|
| - }
|
| + viewInfos.push(extractViewInfo(controller.byobRequest.view));
|
| + controller.enqueue(new Uint8Array(1));
|
| + viewInfos.push(extractViewInfo(controller.byobRequest.view));
|
|
|
| ++pullCount;
|
| },
|
| @@ -1019,18 +1018,24 @@ promise_test(() => {
|
| });
|
|
|
| assert_equals(pullCount, 1, '1 pull() should have been made in response to partial fill by enqueue()');
|
| + assert_not_equals(byobRequest, undefined, 'byobRequest should not be undefined');
|
| + assert_equals(viewInfos[0].byteLength, 2, 'byteLength before enqueue() shouild be 2');
|
| + assert_equals(viewInfos[1].byteLength, 1, 'byteLength after enqueue() should be 1');
|
| +
|
|
|
| reader.cancel();
|
|
|
| // Tell that the buffer given via pull() is returned.
|
| controller.byobRequest.respond(0);
|
|
|
| + assert_equals(pullCount, 1, 'pull() should only be called once');
|
| return promise;
|
| });
|
| }, 'ReadableStream with byte source: cancel() with partially filled pending pull() request');
|
|
|
| promise_test(() => {
|
| let controller;
|
| + let byobRequest;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| @@ -1041,7 +1046,7 @@ promise_test(() => {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
| @@ -1053,6 +1058,8 @@ promise_test(() => {
|
| return reader.read(new Uint8Array(buffer, 8, 8)).then(result => {
|
| assert_equals(result.done, false);
|
|
|
| + assert_equals(byobRequest, undefined, 'byobRequest must be undefined');
|
| +
|
| const view = result.value;
|
| assert_equals(view.constructor, Uint8Array);
|
| assert_equals(view.buffer.byteLength, 16);
|
| @@ -1065,6 +1072,7 @@ promise_test(() => {
|
|
|
| promise_test(() => {
|
| let controller;
|
| + let byobRequest;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| @@ -1081,7 +1089,7 @@ promise_test(() => {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
| @@ -1091,6 +1099,8 @@ promise_test(() => {
|
| return reader.read(new Uint8Array(24)).then(result => {
|
| assert_equals(result.done, false, 'done');
|
|
|
| + assert_equals(byobRequest, undefined, 'byobRequest must be undefined');
|
| +
|
| const view = result.value;
|
| assert_equals(view.byteOffset, 0, 'byteOffset');
|
| assert_equals(view.byteLength, 24, 'byteLength');
|
| @@ -1100,6 +1110,8 @@ promise_test(() => {
|
| }, 'ReadableStream with byte source: Multiple enqueue(), getReader(), then read(view)');
|
|
|
| promise_test(() => {
|
| + let byobRequest;
|
| +
|
| const stream = new ReadableStream({
|
| start(c) {
|
| const view = new Uint8Array(16);
|
| @@ -1107,7 +1119,7 @@ promise_test(() => {
|
| c.enqueue(view);
|
| },
|
| pull(controller) {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
| @@ -1117,6 +1129,8 @@ promise_test(() => {
|
| return reader.read(new Uint8Array(24)).then(result => {
|
| assert_equals(result.done, false);
|
|
|
| + assert_equals(byobRequest, undefined, 'byobRequest must be undefined');
|
| +
|
| const view = result.value;
|
| assert_equals(view.byteOffset, 0);
|
| assert_equals(view.byteLength, 16);
|
| @@ -1125,6 +1139,8 @@ promise_test(() => {
|
| }, 'ReadableStream with byte source: enqueue(), getReader(), then read(view) with a bigger view');
|
|
|
| promise_test(() => {
|
| + let byobRequest;
|
| +
|
| const stream = new ReadableStream({
|
| start(c) {
|
| const view = new Uint8Array(16);
|
| @@ -1133,7 +1149,7 @@ promise_test(() => {
|
| c.enqueue(view);
|
| },
|
| pull(controller) {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
| @@ -1152,6 +1168,8 @@ promise_test(() => {
|
| }).then(result => {
|
| assert_equals(result.done, false, 'done');
|
|
|
| + assert_equals(byobRequest, undefined, 'byobRequest must be undefined');
|
| +
|
| const view = result.value;
|
| assert_equals(view.byteOffset, 0);
|
| assert_equals(view.byteLength, 8);
|
| @@ -1161,6 +1179,7 @@ promise_test(() => {
|
|
|
| promise_test(() => {
|
| let controller;
|
| + let viewInfo;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| @@ -1176,12 +1195,7 @@ promise_test(() => {
|
| }
|
|
|
| const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 2);
|
| -
|
| - assert_equals(view.byteOffset, 1);
|
| - assert_equals(view.byteLength, 1);
|
| + viewInfo = extractViewInfo(view);
|
|
|
| view[0] = 0xaa;
|
| controller.byobRequest.respond(1);
|
| @@ -1198,6 +1212,11 @@ promise_test(() => {
|
| assert_equals(view.byteOffset, 0);
|
| assert_equals(view.byteLength, 2);
|
| assert_equals(view[0], 0xaaff);
|
| +
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 2, 'view.buffer.byteLength should be 2');
|
| + assert_equals(viewInfo.byteOffset, 1, 'view.byteOffset should be 1');
|
| + assert_equals(viewInfo.byteLength, 1, 'view.byteLength should be 1');
|
| });
|
| }, 'ReadableStream with byte source: enqueue() 1 byte, getReader(), then read(view) with Uint16Array');
|
|
|
| @@ -1205,6 +1224,9 @@ promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + let byobRequest;
|
| + let viewInfo;
|
| + let desiredSize;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| @@ -1216,23 +1238,16 @@ promise_test(() => {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| + byobRequest = controller.byobRequest;
|
|
|
| - if (pullCount === 0) {
|
| - const view = controller.byobRequest.view;
|
| + const view = controller.byobRequest.view;
|
|
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 2);
|
| - assert_equals(view.byteOffset, 1);
|
| - assert_equals(view.byteLength, 1);
|
| + viewInfo = extractViewInfo(view);
|
|
|
| - view[0] = 0x03;
|
| - controller.byobRequest.respond(1);
|
| + view[0] = 0x03;
|
| + controller.byobRequest.respond(1);
|
|
|
| - assert_equals(controller.desiredSize, 0, 'desiredSize');
|
| - } else {
|
| - assert_unreached('Too many pull calls');
|
| - }
|
| + desiredSize = controller.desiredSize;
|
|
|
| ++pullCount;
|
| },
|
| @@ -1266,6 +1281,13 @@ promise_test(() => {
|
| assert_equals(view.byteOffset, 0, 'byteOffset');
|
| assert_equals(view.byteLength, 2, 'byteLength');
|
| assert_equals(view[0], 0x0302, 'Contents are set');
|
| +
|
| + assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 2, 'view.buffer.byteLength should be 2');
|
| + assert_equals(viewInfo.byteOffset, 1, 'view.byteOffset should be 1');
|
| + assert_equals(viewInfo.byteLength, 1, 'view.byteLength should be 1');
|
| + assert_equals(desiredSize, 0, 'desiredSize should be zero');
|
| });
|
|
|
| assert_equals(pullCount, 0);
|
| @@ -1282,23 +1304,19 @@ promise_test(t => {
|
| c.enqueue(view);
|
| c.close();
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
|
|
| - const promise = promise_rejects(t, new TypeError(), reader.read(new Uint16Array(1)), 'read(view) must fail');
|
| - return promise_rejects(t, new TypeError(), promise.then(() => reader.closed));
|
| + return promise_rejects(t, new TypeError(), reader.read(new Uint16Array(1)), 'read(view) must fail')
|
| + .then(() => promise_rejects(t, new TypeError(), reader.closed, 'reader.closed should reject'));
|
| }, 'ReadableStream with byte source: read(view) with Uint16Array on close()-d stream with 1 byte enqueue()-d must ' +
|
| 'fail');
|
|
|
| promise_test(t => {
|
| - let pullCount = 0;
|
| -
|
| let controller;
|
|
|
| const stream = new ReadableStream({
|
| @@ -1309,37 +1327,18 @@ promise_test(t => {
|
|
|
| controller = c;
|
| },
|
| - pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| -
|
| - if (pullCount === 0) {
|
| - const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 2);
|
| -
|
| - assert_equals(view.byteOffset, 1);
|
| - assert_equals(view.byteLength, 1);
|
| - } else {
|
| - assert_unreached('Too many pull calls');
|
| - }
|
| -
|
| - ++pullCount;
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - let promise = promise_rejects(t, new TypeError(), reader.read(new Uint16Array(1)), 'read(view) must fail');
|
| - promise = promise_rejects(t, new TypeError(), promise.then(() => reader.closed));
|
| - promise = promise.then(() => {
|
| - assert_equals(pullCount, 0);
|
| - });
|
| + const readPromise = reader.read(new Uint16Array(1));
|
|
|
| assert_throws(new TypeError(), () => controller.close(), 'controller.close() must throw');
|
|
|
| - return promise;
|
| + return promise_rejects(t, new TypeError(), readPromise, 'read(view) must fail')
|
| + .then(() => promise_rejects(t, new TypeError(), reader.closed, 'reader.closed must reject'));
|
| }, 'ReadableStream with byte source: A stream must be errored if close()-d before fulfilling read(view) with ' +
|
| 'Uint16Array');
|
|
|
| @@ -1383,20 +1382,17 @@ test(() => {
|
|
|
| promise_test(() => {
|
| let controller;
|
| + let byobRequest;
|
| + let viewInfo;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| + byobRequest = controller.byobRequest;
|
| const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 16);
|
| -
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 16);
|
| + viewInfo = extractViewInfo(view);
|
|
|
| view[15] = 0x01;
|
| controller.byobRequest.respond(16);
|
| @@ -1422,6 +1418,12 @@ promise_test(() => {
|
| const view = result.value;
|
| assert_equals(view.byteOffset, 0);
|
| assert_equals(view.byteLength, 0);
|
| +
|
| + assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined');
|
| + assert_equals(viewInfo.constructor, Uint8Array, 'view.constructor should be Uint8Array');
|
| + assert_equals(viewInfo.bufferByteLength, 16, 'view.buffer.byteLength should be 16');
|
| + assert_equals(viewInfo.byteOffset, 0, 'view.byteOffset should be 0');
|
| + assert_equals(viewInfo.byteLength, 16, 'view.byteLength should be 16');
|
| });
|
| }, 'ReadableStream with byte source: read(view), then respond() and close() in pull()');
|
|
|
| @@ -1429,6 +1431,7 @@ promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + const viewInfos = [];
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| @@ -1439,21 +1442,12 @@ promise_test(() => {
|
| return;
|
| }
|
|
|
| - if (pullCount < 1) {
|
| - for (let i = 0; i < 4; ++i) {
|
| - const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 4);
|
| -
|
| - assert_equals(view.byteOffset, i);
|
| - assert_equals(view.byteLength, 4 - i);
|
| + for (let i = 0; i < 4; ++i) {
|
| + const view = controller.byobRequest.view;
|
| + viewInfos.push(extractViewInfo(view));
|
|
|
| - view[0] = 0x01;
|
| - controller.byobRequest.respond(1);
|
| - }
|
| - } else {
|
| - assert_unreached('Too many pull() calls');
|
| + view[0] = 0x01;
|
| + controller.byobRequest.respond(1);
|
| }
|
|
|
| ++pullCount;
|
| @@ -1470,6 +1464,16 @@ promise_test(() => {
|
| assert_equals(view.byteOffset, 0);
|
| assert_equals(view.byteLength, 4);
|
| assert_equals(view[0], 0x01010101);
|
| +
|
| + assert_equals(pullCount, 1, 'pull() should only be called once');
|
| +
|
| + for (let i = 0; i < 4; ++i) {
|
| + assert_equals(viewInfos[i].constructor, Uint8Array, 'view.constructor should be Uint8Array');
|
| + assert_equals(viewInfos[i].bufferByteLength, 4, 'view.buffer.byteLength should be 4');
|
| +
|
| + assert_equals(viewInfos[i].byteOffset, i, 'view.byteOffset should be i');
|
| + assert_equals(viewInfos[i].byteLength, 4 - i, 'view.byteLength should be 4 - i');
|
| + }
|
| });
|
| }, 'ReadableStream with byte source: read(view) with Uint32Array, then fill it by multiple respond() calls');
|
|
|
| @@ -1477,17 +1481,14 @@ promise_test(() => {
|
| let pullCount = 0;
|
|
|
| let controller;
|
| + let byobRequest;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| -
|
| - if (pullCount > 1) {
|
| - assert_unreached('Too many pull calls');
|
| - }
|
| + byobRequest = controller.byobRequest;
|
|
|
| ++pullCount;
|
| },
|
| @@ -1525,6 +1526,8 @@ promise_test(() => {
|
| assert_equals(view.buffer.byteLength, 2);
|
| assert_equals(view.byteOffset, 0);
|
| assert_equals(view.byteLength, 2);
|
| +
|
| + assert_equals(byobRequest, undefined, 'byobRequest must be undefined');
|
| });
|
|
|
| assert_equals(pullCount, 0, 'No pull should have been made since the startPromise has not yet been handled');
|
| @@ -1536,32 +1539,14 @@ promise_test(() => {
|
| return Promise.all([p0, p1]);
|
| }, 'ReadableStream with byte source: read() twice, then enqueue() twice');
|
|
|
| -promise_test(() => {
|
| - let pullCount = 0;
|
| -
|
| +promise_test(t => {
|
| let controller;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| - pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| -
|
| - if (pullCount === 0) {
|
| - const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 16);
|
| -
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 16);
|
| - } else {
|
| - assert_unreached('Too many pull calls');
|
| - }
|
| -
|
| - ++pullCount;
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -1591,31 +1576,14 @@ promise_test(() => {
|
| return Promise.all([p0, p1]);
|
| }, 'ReadableStream with byte source: Multiple read(view), close() and respond()');
|
|
|
| -promise_test(() => {
|
| - let pullCount = 0;
|
| -
|
| +promise_test(t => {
|
| let controller;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| - pull() {
|
| - if (pullCount === 0) {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| - const view = controller.byobRequest.view;
|
| -
|
| - assert_equals(view.constructor, Uint8Array);
|
| - assert_equals(view.buffer.byteLength, 16);
|
| -
|
| - assert_equals(view.byteOffset, 0);
|
| - assert_equals(view.byteLength, 16);
|
| - } else {
|
| - assert_unreached();
|
| - }
|
| -
|
| - ++pullCount;
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -1644,16 +1612,14 @@ promise_test(() => {
|
| return Promise.all([p0, p1]);
|
| }, 'ReadableStream with byte source: Multiple read(view), big enqueue()');
|
|
|
| -promise_test(() => {
|
| +promise_test(t => {
|
| let controller;
|
|
|
| const stream = new ReadableStream({
|
| start(c) {
|
| controller = c;
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -1665,15 +1631,12 @@ promise_test(() => {
|
| return reader.read(new Uint8Array(7)).then(result => {
|
| if (result.done) {
|
| assert_equals(bytesRead, 1024);
|
| -
|
| - return null;
|
| + return undefined;
|
| }
|
|
|
| bytesRead += result.value.byteLength;
|
|
|
| return pump();
|
| - }).catch(e => {
|
| - assert_unreached(e);
|
| });
|
| }
|
| const promise = pump();
|
| @@ -1686,29 +1649,33 @@ promise_test(() => {
|
| }, 'ReadableStream with byte source: Multiple read(view) and multiple enqueue()');
|
|
|
| promise_test(t => {
|
| + let byobRequest;
|
| const stream = new ReadableStream({
|
| pull(controller) {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - return promise_rejects(t, new TypeError(), reader.read(), 'read() must fail');
|
| + return promise_rejects(t, new TypeError(), reader.read(), 'read() must fail')
|
| + .then(() => assert_equals(byobRequest, undefined, 'byobRequest must be undefined'));
|
| }, 'ReadableStream with byte source: read(view) with passing undefined as view must fail');
|
|
|
| promise_test(t => {
|
| + let byobRequest;
|
| const stream = new ReadableStream({
|
| pull(controller) {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| },
|
| type: 'bytes'
|
| });
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - return promise_rejects(t, new TypeError(), reader.read(new Uint8Array(0)), 'read(view) must fail');
|
| + return promise_rejects(t, new TypeError(), reader.read(new Uint8Array(0)), 'read(view) must fail')
|
| + .then(() => assert_equals(byobRequest, undefined, 'byobRequest must be undefined'));
|
| }, 'ReadableStream with byte source: read(view) with zero-length view must fail');
|
|
|
| promise_test(t => {
|
| @@ -1738,9 +1705,7 @@ promise_test(t => {
|
| start(c) {
|
| c.error(error1);
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -1773,9 +1738,7 @@ promise_test(t => {
|
| start(c) {
|
| c.error(error1);
|
| },
|
| - pull() {
|
| - assert_unreached('pull must not be called');
|
| - },
|
| + pull: t.unreached_func('pull() should not be called'),
|
| type: 'bytes'
|
| });
|
|
|
| @@ -1805,6 +1768,7 @@ promise_test(t => {
|
|
|
| promise_test(t => {
|
| let controller;
|
| + let byobRequest;
|
|
|
| const testError = new TypeError('foo');
|
|
|
| @@ -1813,7 +1777,7 @@ promise_test(t => {
|
| controller = c;
|
| },
|
| pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + byobRequest = controller.byobRequest;
|
| throw testError;
|
| },
|
| type: 'bytes'
|
| @@ -1822,18 +1786,16 @@ promise_test(t => {
|
| const reader = stream.getReader();
|
|
|
| const promise = promise_rejects(t, testError, reader.read(), 'read() must fail');
|
| - return promise_rejects(t, testError, promise.then(() => reader.closed));
|
| + return promise_rejects(t, testError, promise.then(() => reader.closed))
|
| + .then(() => assert_equals(byobRequest, undefined, 'byobRequest must be undefined'));
|
| }, 'ReadableStream with byte source: Throwing in pull function must error the stream');
|
|
|
| promise_test(t => {
|
| - let controller;
|
| + let byobRequest;
|
|
|
| const stream = new ReadableStream({
|
| - start(c) {
|
| - controller = c;
|
| - },
|
| - pull() {
|
| - assert_equals(controller.byobRequest, undefined, 'byobRequest must be undefined');
|
| + pull(controller) {
|
| + byobRequest = controller.byobRequest;
|
| controller.error(error1);
|
| throw new TypeError('foo');
|
| },
|
| @@ -1842,23 +1804,20 @@ promise_test(t => {
|
|
|
| const reader = stream.getReader();
|
|
|
| - return promise_rejects(t, error1, reader.read(), 'read() must fail').then(() => {
|
| - return promise_rejects(t, error1, reader.closed, 'closed must fail');
|
| - });
|
| + return promise_rejects(t, error1, reader.read(), 'read() must fail')
|
| + .then(() => promise_rejects(t, error1, reader.closed, 'closed must fail'))
|
| + .then(() => assert_equals(byobRequest, undefined, 'byobRequest must be undefined'));
|
| }, 'ReadableStream with byte source: Throwing in pull in response to read() must be ignored if the stream is ' +
|
| 'errored in it');
|
|
|
| promise_test(t => {
|
| - let controller;
|
| + let byobRequest;
|
|
|
| const testError = new TypeError('foo');
|
|
|
| const stream = new ReadableStream({
|
| - start(c) {
|
| - controller = c;
|
| - },
|
| - pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| + pull(controller) {
|
| + byobRequest = controller.byobRequest;
|
| throw testError;
|
| },
|
| type: 'bytes'
|
| @@ -1866,19 +1825,17 @@ promise_test(t => {
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - const promise = promise_rejects(t, testError, reader.read(new Uint8Array(1)), 'read(view) must fail');
|
| - return promise_rejects(t, testError, promise.then(() => reader.closed));
|
| + return promise_rejects(t, testError, reader.read(new Uint8Array(1)), 'read(view) must fail')
|
| + .then(() => promise_rejects(t, testError, reader.closed, 'reader.closed must reject'))
|
| + .then(() => assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined'));
|
| }, 'ReadableStream with byte source: Throwing in pull in response to read(view) function must error the stream');
|
|
|
| promise_test(t => {
|
| - let controller;
|
| + let byobRequest;
|
|
|
| const stream = new ReadableStream({
|
| - start(c) {
|
| - controller = c;
|
| - },
|
| - pull() {
|
| - assert_not_equals(controller.byobRequest, undefined, 'byobRequest must not be undefined');
|
| + pull(controller) {
|
| + byobRequest = controller.byobRequest;
|
| controller.error(error1);
|
| throw new TypeError('foo');
|
| },
|
| @@ -1887,13 +1844,12 @@ promise_test(t => {
|
|
|
| const reader = stream.getReader({ mode: 'byob' });
|
|
|
| - return promise_rejects(t, error1, reader.read(new Uint8Array(1)), 'read(view) must fail').then(() => {
|
| - return promise_rejects(t, error1, reader.closed, 'closed must fail');
|
| - });
|
| + return promise_rejects(t, error1, reader.read(new Uint8Array(1)), 'read(view) must fail')
|
| + .then(() => promise_rejects(t, error1, reader.closed, 'closed must fail'))
|
| + .then(() => assert_not_equals(byobRequest, undefined, 'byobRequest must not be undefined'));
|
| }, 'ReadableStream with byte source: Throwing in pull in response to read(view) must be ignored if the stream is ' +
|
| 'errored in it');
|
|
|
| -
|
| test(() => {
|
| const ReadableStreamBYOBReader = new ReadableStream({ type: 'bytes' }).getReader({ mode: 'byob' }).constructor;
|
| const stream = new ReadableStream({ type: 'bytes' });
|
|
|