<!DOCTYPE html>
<script src='../resources/testharness.js'></script>
<script src='../resources/testharnessreport.js'></script>
<script src='../resources/gc.js'></script>
<script>
// This is updated till https://github.com/whatwg/streams/commit/4ba861e6f60c248060811830e11271c84b439cc3

test(function() {
    var input = {
        readable: { },
        writable: { }
    };
    var options = { };
    assert_throws(new TypeError(), function() { ReadableStream.prototype.pipeThrough.call(undefined, input, options); });
    assert_throws(new TypeError(), function() { ReadableStream.prototype.pipeThrough.call(null, input, options); });
    assert_throws(new TypeError(), function() { ReadableStream.prototype.pipeThrough.call(1, input, options); });
    assert_throws(new TypeError(), function() { ReadableStream.prototype.pipeThrough.call({ "pipeTo": "test" }, input, options); });
}, 'ReadableStream.prototype.pipeThrough should throw when "this" has no pipeTo method');

test(function() {
    var options = { };
    var thisValue = {
        pipeTo: function() {
            assert_unreached();
        }
    };

    assert_throws(new TypeError(), function() { ReadableStream.prototype.pipeThrough.call(thisValue, null, options); });
    assert_throws(new TypeError(), function() { ReadableStream.prototype.pipeThrough.call(thisValue, undefined, options); });
}, 'ReadableStream.prototype.pipeThrough should throw when passed argument is not an object');

test(function() {
    var options = { };
    var error = new TypeError("potato");

    var thisWrongValue = {
        get pipeTo() {
            throw error;
        }
    };
    assert_throws(error, function() { ReadableStream.prototype.pipeThrough.call(thisWrongValue, { readable: { }, writable: { } }, options); });

    var thisValue = {
        pipeTo: function() {
            assert_unreached();
        }
    };
    var wrongInput = {
        readable: { },
        get writable() {
            throw error;
        }
    };
    assert_throws(error, function() { ReadableStream.prototype.pipeThrough.call(thisValue, wrongInput, options); });

    var wrongInput2 = {
        get readable() {
            throw error;
        },
        writable: { }
    };
    var thisValue2 = {
        pipeTo: function() { }
    };
    assert_throws(error, function() { ReadableStream.prototype.pipeThrough.call(thisValue2, wrongInput2, options); });
}, 'ReadableStream.prototype.pipeThrough should throw when called getters are throwing');
</script>
