Index: third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/templated.js |
diff --git a/third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/templated.js b/third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/templated.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6db0429994d453dbfcd2e8347e6fa7efdf20bc4e |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/http/tests/streams/readable-streams/templated.js |
@@ -0,0 +1,148 @@ |
+'use strict'; |
+ |
+if (self.importScripts) { |
+ self.importScripts('/resources/testharness.js'); |
+ self.importScripts('../resources/test-utils.js'); |
+ self.importScripts('../resources/rs-test-templates.js'); |
+} |
+ |
+// Run the readable stream test templates against readable streams created directly using the constructor |
+ |
+const theError = { name: 'boo!' }; |
+const chunks = ['a', 'b']; |
+ |
+templatedRSEmpty('ReadableStream (empty)', () => { |
+ return new ReadableStream(); |
+}); |
+ |
+templatedRSEmptyReader('ReadableStream (empty) reader', () => { |
+ return streamAndDefaultReader(new ReadableStream()); |
+}); |
+ |
+templatedRSClosed('ReadableStream (closed via call in start)', () => { |
+ return new ReadableStream({ |
+ start(c) { |
+ c.close(); |
+ } |
+ }); |
+}); |
+ |
+templatedRSClosedReader('ReadableStream reader (closed before getting reader)', () => { |
+ let controller; |
+ const stream = new ReadableStream({ |
+ start(c) { |
+ controller = c; |
+ } |
+ }); |
+ controller.close(); |
+ const result = streamAndDefaultReader(stream); |
+ return result; |
+}); |
+ |
+templatedRSClosedReader('ReadableStream reader (closed after getting reader)', () => { |
+ let controller; |
+ const stream = new ReadableStream({ |
+ start(c) { |
+ controller = c; |
+ } |
+ }); |
+ const result = streamAndDefaultReader(stream); |
+ controller.close(); |
+ return result; |
+}); |
+ |
+templatedRSClosed('ReadableStream (closed via cancel)', () => { |
+ const stream = new ReadableStream(); |
+ stream.cancel(); |
+ return stream; |
+}); |
+ |
+templatedRSClosedReader('ReadableStream reader (closed via cancel after getting reader)', () => { |
+ const stream = new ReadableStream(); |
+ const result = streamAndDefaultReader(stream); |
+ result.reader.cancel(); |
+ return result; |
+}); |
+ |
+templatedRSErrored('ReadableStream (errored via call in start)', () => { |
+ return new ReadableStream({ |
+ start(c) { |
+ c.error(theError); |
+ } |
+ }); |
+}, theError); |
+ |
+templatedRSErroredSyncOnly('ReadableStream (errored via call in start)', () => { |
+ return new ReadableStream({ |
+ start(c) { |
+ c.error(theError); |
+ } |
+ }); |
+}, theError); |
+ |
+templatedRSErrored('ReadableStream (errored via returning a rejected promise in start)', () => { |
+ return new ReadableStream({ |
+ start() { |
+ return Promise.reject(theError); |
+ } |
+ }); |
+}, theError); |
+ |
+templatedRSErroredReader('ReadableStream (errored via returning a rejected promise in start) reader', () => { |
+ return streamAndDefaultReader(new ReadableStream({ |
+ start() { |
+ return Promise.reject(theError); |
+ } |
+ })); |
+}, theError); |
+ |
+templatedRSErroredReader('ReadableStream reader (errored before getting reader)', () => { |
+ let controller; |
+ const stream = new ReadableStream({ |
+ start(c) { |
+ controller = c; |
+ } |
+ }); |
+ controller.error(theError); |
+ return streamAndDefaultReader(stream); |
+}, theError); |
+ |
+templatedRSErroredReader('ReadableStream reader (errored after getting reader)', () => { |
+ let controller; |
+ const result = streamAndDefaultReader(new ReadableStream({ |
+ start(c) { |
+ controller = c; |
+ } |
+ })); |
+ controller.error(theError); |
+ return result; |
+}, theError); |
+ |
+templatedRSTwoChunksOpenReader('ReadableStream (two chunks enqueued, still open) reader', () => { |
+ return streamAndDefaultReader(new ReadableStream({ |
+ start(c) { |
+ c.enqueue(chunks[0]); |
+ c.enqueue(chunks[1]); |
+ } |
+ })); |
+}, chunks); |
+ |
+templatedRSTwoChunksClosedReader('ReadableStream (two chunks enqueued, then closed) reader', () => { |
+ let doClose; |
+ const stream = new ReadableStream({ |
+ start(c) { |
+ c.enqueue(chunks[0]); |
+ c.enqueue(chunks[1]); |
+ doClose = c.close.bind(c); |
+ } |
+ }); |
+ const result = streamAndDefaultReader(stream); |
+ doClose(); |
+ return result; |
+}, chunks); |
+ |
+function streamAndDefaultReader(stream) { |
+ return { stream, reader: stream.getReader() }; |
+} |
+ |
+done(); |