<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Consuming Request body after getting a ReadableStream</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <script>
function createRequestWithLockedReadableStream(callback) {
    var request = new Request("", {body: "{\"key\": \"value\"}", method: "POST"});
    var reader = request.body.getReader();
    return callback(request);
}

promise_test(function(test) {
    return createRequestWithLockedReadableStream(function(request) {
        return promise_rejects_js(test, TypeError, request.blob());
    });
}, "Getting blob after getting a locked Request body");

promise_test(function(test) {
    return createRequestWithLockedReadableStream(function(request) {
        return promise_rejects_js(test, TypeError, request.text());
    });
}, "Getting text after getting a locked Request body");

promise_test(function(test) {
    return createRequestWithLockedReadableStream(function(request) {
        return promise_rejects_js(test, TypeError, request.json());
    });
}, "Getting json after getting a locked Request body");

promise_test(function(test) {
    return createRequestWithLockedReadableStream(function(request) {
        return promise_rejects_js(test, TypeError, request.arrayBuffer());
    });
}, "Getting arrayBuffer after getting a locked Request body");

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