<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Response init: simple cases</title>
    <meta name="help" href="https://fetch.spec.whatwg.org/#response">
    <meta name="help" href="https://fetch.spec.whatwg.org/#concept-response">
    <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 defaultValues = { "type" : "default",
                            "url" : "",
                            "ok" : true,
                            "status" : 200,
                            "statusText" : "OK",
                            "body" : null
      };

      var statusCodes = { "givenValues" : [200, 300, 400, 500, 599],
                       "expectedValues" : [200, 300, 400, 500, 599]
      };
      var statusTexts = { "givenValues" : ["OK", "with space", String.fromCharCode(0x80)],
                       "expectedValues" : ["OK", "with space", String.fromCharCode(0x80)]
      };
      var initValuesDict = { "status" : statusCodes,
                             "statusText" : statusTexts
      };

      function isOkStatus(status) {
        return 200 <= status &&  299 >= status;
      }

      var response = new Response();
      for (var attributeName in defaultValues) {
        test(function() {
          var expectedValue = defaultValues[attributeName];
          assert_equals(response[attributeName], expectedValue,
            "Expect default response." + attributeName + " is " + expectedValue);
        }, "Check default value for " + attributeName + " attribute");
      }

      for (var attributeName in initValuesDict)
        test(function() {
          var valuesToTest = initValuesDict[attributeName];
          for (var valueIdx in valuesToTest["givenValues"]) {
            var givenValue = valuesToTest["givenValues"][valueIdx];
            var expectedValue = valuesToTest["expectedValues"][valueIdx];
            var responseInit = {};
            responseInit[attributeName] = givenValue;
            var response = new Response("", responseInit);
            assert_equals(response[attributeName], expectedValue,
              "Expect response." + attributeName + " is " + expectedValue +
              " when initialized with " + givenValue);
            assert_equals(response.ok, isOkStatus(response.status),
              "Expect response.ok is " + isOkStatus(response.status));
          }
        }, "Check " + attributeName + " init values and associated getter");
    </script>
  </body>
</html>
