| <!DOCTYPE html> |
| <script src='../resources/testharness.js'></script> |
| <script src='../resources/testharnessreport.js'></script> |
| <script src='reference-implementation/resources/streams-utils.js'></script> |
| <script> |
| // This is updated till https://github.com/whatwg/streams/commit/4ba861e6f60c248060811830e11271c84b439cc3 |
| |
| let ReadableStreamDefaultReader = (new ReadableStream()).getReader().constructor; |
| |
| function fakeWritableStream() { |
| return { |
| get closed() { return Promise.resolve(); }, |
| get ready() { return Promise.resolve(); }, |
| get state() { return 'closed' }, |
| abort(reason) { return Promise.resolve(); }, |
| close() { return Promise.resolve(); }, |
| write(chunk) { return Promise.resolve(); } |
| }; |
| } |
| |
| function realReadableStream() { |
| return new ReadableStream(); |
| } |
| |
| function fakeReadableStream() { |
| return { |
| cancel: function(reason) { return Promise.resolve(); }, |
| getReader: function() { return new ReadableStreamDefaultReader(new ReadableStream()); }, |
| pipeThrough: function(obj, options) { return obj.readable; }, |
| pipeTo: function() { return Promise.resolve(); }, |
| tee: function() { return [realReadableStream(), realReadableStream()]; } |
| }; |
| } |
| |
| test(function() { |
| var pipeToArguments; |
| var thisValue = { |
| pipeTo: function() { |
| pipeToArguments = arguments; |
| } |
| }; |
| |
| var input = { readable: {}, writable: {} }; |
| var options = {}; |
| var 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 works generically on its this and its arguments'); |
| |
| test(function() { |
| ReadableStream.prototype.pipeTo.call(fakeReadableStream(), fakeWritableStream()); // Check it does not throw. |
| }, 'ReadableStream.prototype.pipeTo works generically on its this and its arguments'); |
| |
| test(function() { |
| var thisValue = null; |
| var returnValue = { 'returned from': 'byteLength getter' }; |
| var chunk = { |
| get byteLength() { |
| return returnValue; |
| } |
| }; |
| |
| assert_equals(ByteLengthQueuingStrategy.prototype.size.call(thisValue, chunk), returnValue); |
| }, 'ByteLengthQueuingStrategy.prototype.size should work generically on its this and its arguments'); |
| |
| test(function() { |
| var thisValue = null; |
| var chunk = { |
| get byteLength() { |
| throw new TypeError('shouldn\'t be called'); |
| } |
| }; |
| |
| assert_equals(CountQueuingStrategy.prototype.size.call(thisValue, chunk), 1); |
| }, 'CountQueuingStrategy.prototype.size should work generically on its this and its arguments'); |
| </script> |