| Index: third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/brand-checks.js
|
| diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/brand-checks.js b/third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/brand-checks.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..32553cf92f52fd6dc0e723baf6f73d73eeb8f5f0
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/brand-checks.js
|
| @@ -0,0 +1,151 @@
|
| +'use strict';
|
| +
|
| +if (self.importScripts) {
|
| + self.importScripts('../resources/test-utils.js');
|
| + self.importScripts('/resources/testharness.js');
|
| +}
|
| +
|
| +let ReadableStreamReader;
|
| +let ReadableStreamController;
|
| +
|
| +test(() => {
|
| +
|
| + // It's not exposed globally, but we test a few of its properties here.
|
| + ReadableStreamReader = (new ReadableStream()).getReader().constructor;
|
| +
|
| +}, 'Can get the ReadableStreamReader constructor indirectly');
|
| +
|
| +test(() => {
|
| +
|
| + // It's not exposed globally, but we test a few of its properties here.
|
| + new ReadableStream({
|
| + start(c) {
|
| + ReadableStreamController = c.constructor;
|
| + }
|
| + });
|
| +
|
| +}, 'Can get the ReadableStreamController constructor indirectly');
|
| +
|
| +function fakeReadableStream() {
|
| + return {
|
| + cancel() { return Promise.resolve(); },
|
| + getReader() { return new ReadableStreamReader(new ReadableStream()); },
|
| + pipeThrough(obj) { return obj.readable; },
|
| + pipeTo() { return Promise.resolve(); },
|
| + tee() { return [realReadableStream(), realReadableStream()]; }
|
| + };
|
| +}
|
| +
|
| +function realReadableStream() {
|
| + return new ReadableStream();
|
| +}
|
| +
|
| +function fakeReadableStreamReader() {
|
| + return {
|
| + get closed() { return Promise.resolve(); },
|
| + cancel() { return Promise.resolve(); },
|
| + read() { return Promise.resolve({ value: undefined, done: true }); },
|
| + releaseLock() { return; }
|
| + };
|
| +}
|
| +
|
| +function fakeReadableStreamController() {
|
| + return {
|
| + close() { },
|
| + enqueue() { },
|
| + error() { }
|
| + };
|
| +}
|
| +
|
| +promise_test(t => {
|
| +
|
| + return methodRejects(t, ReadableStream.prototype, 'cancel', fakeReadableStream());
|
| +
|
| +}, 'ReadableStream.prototype.cancel enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + methodThrows(ReadableStream.prototype, 'getReader', fakeReadableStream());
|
| +
|
| +}, 'ReadableStream.prototype.getReader enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + methodThrows(ReadableStream.prototype, 'tee', fakeReadableStream());
|
| +
|
| +}, 'ReadableStream.prototype.tee enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + assert_throws(new TypeError(), () => new ReadableStreamReader(fakeReadableStream()),
|
| + 'Constructing a ReadableStreamReader should throw');
|
| +
|
| +}, 'ReadableStreamReader enforces a brand check on its argument');
|
| +
|
| +promise_test(t => {
|
| +
|
| + return Promise.all([
|
| + getterRejects(t, ReadableStreamReader.prototype, 'closed', fakeReadableStreamReader()),
|
| + getterRejects(t, ReadableStreamReader.prototype, 'closed', realReadableStream())
|
| + ]);
|
| +
|
| +}, 'ReadableStreamReader.prototype.closed enforces a brand check');
|
| +
|
| +promise_test(t => {
|
| +
|
| + return Promise.all([
|
| + methodRejects(t, ReadableStreamReader.prototype, 'cancel', fakeReadableStreamReader()),
|
| + methodRejects(t, ReadableStreamReader.prototype, 'cancel', realReadableStream())
|
| + ]);
|
| +
|
| +}, 'ReadableStreamReader.prototype.cancel enforces a brand check');
|
| +
|
| +promise_test(t => {
|
| +
|
| + return Promise.all([
|
| + methodRejects(t, ReadableStreamReader.prototype, 'read', fakeReadableStreamReader()),
|
| + methodRejects(t, ReadableStreamReader.prototype, 'read', realReadableStream())
|
| + ]);
|
| +
|
| +}, 'ReadableStreamReader.prototype.read enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + methodThrows(ReadableStreamReader.prototype, 'releaseLock', fakeReadableStreamReader());
|
| + methodThrows(ReadableStreamReader.prototype, 'releaseLock', realReadableStream());
|
| +
|
| +}, 'ReadableStreamReader.prototype.releaseLock enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + assert_throws(new TypeError(), () => new ReadableStreamController(fakeReadableStream()),
|
| + 'Constructing a ReadableStreamController should throw');
|
| +
|
| +}, 'ReadableStreamController enforces a brand check on its argument');
|
| +
|
| +test(() => {
|
| +
|
| + assert_throws(new TypeError(), () => new ReadableStreamController(realReadableStream()),
|
| + 'Constructing a ReadableStreamController should throw');
|
| +
|
| +}, 'ReadableStreamController can\'t be given a fully-constructed ReadableStream');
|
| +
|
| +test(() => {
|
| +
|
| + methodThrows(ReadableStreamController.prototype, 'close', fakeReadableStreamController());
|
| +
|
| +}, 'ReadableStreamController.prototype.close enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + methodThrows(ReadableStreamController.prototype, 'enqueue', fakeReadableStreamController());
|
| +
|
| +}, 'ReadableStreamController.prototype.enqueue enforces a brand check');
|
| +
|
| +test(() => {
|
| +
|
| + methodThrows(ReadableStreamController.prototype, 'error', fakeReadableStreamController());
|
| +
|
| +}, 'ReadableStreamController.prototype.error enforces a brand check');
|
| +
|
| +done();
|
|
|