<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Consuming Response body after getting a ReadableStream</title>
    <meta name="help" href="https://fetch.spec.whatwg.org/#response">
    <meta name="help" href="https://fetch.spec.whatwg.org/#body-mixin">
    <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>

function createResponseWithDisturbedReadableStream(callback) {
    return fetch("../resources/data.json").then(function(response) {
        var reader = response.body.getReader();
        reader.read();
        return callback(response);
    });
}

promise_test(function(test) {
    return createResponseWithDisturbedReadableStream(function(response) {
        if ('blob' in response) {
            return promise_rejects(test, new TypeError(), response.blob());
        }
    });
}, "Getting blob after reading the Response body");

promise_test(function(test) {
    return createResponseWithDisturbedReadableStream(function(response) {
        return promise_rejects(test, new TypeError(), response.text());
    });
}, "Getting text after reading the Response body");

promise_test(function(test) {
    return createResponseWithDisturbedReadableStream(function(response) {
        return promise_rejects(test, new TypeError(), response.json());
    });
}, "Getting json after reading the Response body");

promise_test(function(test) {
    return createResponseWithDisturbedReadableStream(function(response) {
        return promise_rejects(test, new TypeError(), response.arrayBuffer());
    });
}, "Getting arrayBuffer after reading the Response body");

    </script>
  </body>
</html>
