Index: third_party/WebKit/LayoutTests/imported/wpt/streams/readable-streams/pipe-through.js |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/streams/readable-streams/pipe-through.js b/third_party/WebKit/LayoutTests/imported/wpt/streams/readable-streams/pipe-through.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4988928e78b18e73af44ecf49dd1e4af81b6b3ef |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/streams/readable-streams/pipe-through.js |
@@ -0,0 +1,108 @@ |
+'use strict'; |
+ |
+if (self.importScripts) { |
+ self.importScripts('../resources/test-utils.js'); |
+ self.importScripts('/resources/testharness.js'); |
+} |
+ |
+test(() => { |
+ |
+ let pipeToArguments; |
+ const thisValue = { |
+ pipeTo() { |
+ pipeToArguments = arguments; |
+ } |
+ }; |
+ |
+ const input = { readable: {}, writable: {} }; |
+ const options = {}; |
+ const result = ReadableStream.prototype.pipeThrough.call(thisValue, input, options); |
+ |
+ assert_array_equals(pipeToArguments, [input.writable, options], |
+ 'correct arguments should be passed to thisValue.pipeTo'); |
+ assert_equals(result, input.readable, 'return value should be the passed readable property'); |
+ |
+}, 'ReadableStream.prototype.pipeThrough should work generically on its this and its arguments'); |
+ |
+test(() => { |
+ |
+ const thisValue = { |
+ pipeTo() { |
+ assert_unreached('pipeTo should not be called'); |
+ } |
+ }; |
+ |
+ methodThrows(ReadableStream.prototype, 'pipeThrough', thisValue, [undefined, {}]); |
+ methodThrows(ReadableStream.prototype, 'pipeThrough', thisValue, [null, {}]); |
+ |
+}, 'ReadableStream.prototype.pipeThrough should throw when its first argument is not convertible to an object'); |
+ |
+test(() => { |
+ |
+ const args = [{ readable: {}, writable: {} }, {}]; |
+ |
+ methodThrows(ReadableStream.prototype, 'pipeThrough', undefined, args); |
+ methodThrows(ReadableStream.prototype, 'pipeThrough', null, args); |
+ methodThrows(ReadableStream.prototype, 'pipeThrough', 1, args); |
+ methodThrows(ReadableStream.prototype, 'pipeThrough', { pipeTo: 'test' }, args); |
+ |
+}, 'ReadableStream.prototype.pipeThrough should throw when "this" has no pipeTo method'); |
+ |
+test(() => { |
+ const error = new Error('potato'); |
+ |
+ const throwingPipeTo = { |
+ get pipeTo() { |
+ throw error; |
+ } |
+ }; |
+ assert_throws(error, |
+ () => ReadableStream.prototype.pipeThrough.call(throwingPipeTo, { readable: { }, writable: { } }, {}), |
+ 'pipeThrough should rethrow the error thrown by pipeTo'); |
+ |
+ const thisValue = { |
+ pipeTo() { |
+ assert_unreached('pipeTo should not be called'); |
+ } |
+ }; |
+ |
+ const throwingWritable = { |
+ readable: {}, |
+ get writable() { |
+ throw error; |
+ } |
+ }; |
+ assert_throws(error, |
+ () => ReadableStream.prototype.pipeThrough.call(thisValue, throwingWritable, {}), |
+ 'pipeThrough should rethrow the error thrown by the writable getter'); |
+ |
+ const throwingReadable = { |
+ get readable() { |
+ throw error; |
+ }, |
+ writable: {} |
+ }; |
+ assert_throws(error, |
+ () => ReadableStream.prototype.pipeThrough.call(thisValue, throwingReadable, {}), |
+ 'pipeThrough should rethrow the error thrown by the readable getter'); |
+ |
+}, 'ReadableStream.prototype.pipeThrough should rethrow errors from accessing pipeTo, readable, or writable'); |
+ |
+test(() => { |
+ |
+ let count = 0; |
+ const thisValue = { |
+ pipeTo() { |
+ ++count; |
+ } |
+ }; |
+ |
+ ReadableStream.prototype.pipeThrough.call(thisValue, { readable: {}, writable: {} }); |
+ ReadableStream.prototype.pipeThrough.call(thisValue, { readable: {} }, {}); |
+ ReadableStream.prototype.pipeThrough.call(thisValue, { writable: {} }, {}); |
+ |
+ assert_equals(count, 3, 'pipeTo was called 3 times'); |
+ |
+}, 'ReadableStream.prototype.pipeThrough should work with missing readable, writable, or options'); |
+ |
+done(); |