<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Response: redirect static method</title>
    <meta name="help" href="https://fetch.spec.whatwg.org/#response">
    <meta name="help" href="https://fetch.spec.whatwg.org/#redirect-status">
    <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>
      var url = "http://test.url:1234/";
      test(function() {
        redirectResponse = Response.redirect(url);
        assert_equals(redirectResponse.status, 302, "Default redirect status is 302");
        assert_equals(redirectResponse.headers.get("Location"), url,
          "redirected response has Location header with the correct url");
      }, "Check default redirect response");

      var redirectStatus = [301, 302, 303, 307, 308];
      redirectStatus.forEach(function(status) {
        test(function() {
          redirectResponse = Response.redirect(url, status);
          assert_equals(redirectResponse.status, status, "Redirect status is " + status);
        }, "Check response returned by static method redirect(), status = " + status);
      });

      test(function() {
        var invalidUrl = "http://:This is not an url";
        assert_throws(new TypeError(), function() { Response.redirect(invalidUrl); },
          "Expect TypeError exception");
      }, "Check error returned when giving invalid url to redirect()");

      var invalidRedirectStatus = [200, 309, 400, 500];
      invalidRedirectStatus.forEach(function(invalidStatus) {
        test(function() {
          assert_throws(new RangeError() , function() { Response.redirect(url, invalidStatus); },
              "Expect RangeError exception");
        }, "Check error returned when giving invalid status to redirect(), status = " + invalidStatus);
      });
    </script>
  </body>
</html>
