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(); |