<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Request init: simple cases</title>
    <meta name="help" href="https://fetch.spec.whatwg.org/#request">
    <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>
      // https://fetch.spec.whatwg.org/#concept-method-normalize
      var methods = {
        "givenValues" : [
          "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS",
          "get", "head", "post", "put", "delete", "options",
          "Get", "hEad", "poSt", "Put", "deleTe", "optionS",
          "PATCH", "patch", "patCh"
        ],
        "expectedValues" : [
          "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS",
          "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS",
          "GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS",
          "PATCH", "patch", "patCh"
        ]
      };
      var referrers = {"givenValues" : ["/relative/ressource",
                                        "http://{{host}}:{{ports[http][0]}}/relative/ressource?query=true#fragment",
                                        "http://{{host}}:{{ports[http][0]}}/",
                                        "http://test.url",
                                        "about:client",
                                        ""
                                       ],
                       "expectedValues" : ["http://{{host}}:{{ports[http][0]}}/relative/ressource",
                                           "http://{{host}}:{{ports[http][0]}}/relative/ressource?query=true#fragment",
                                           "http://{{host}}:{{ports[http][0]}}/",
                                           "about:client",
                                           "about:client",
                                           ""
                                          ]
      };
      var referrerPolicies = {"givenValues" : [ "",
                                                "no-referrer",
                                                "no-referrer-when-downgrade",
                                                "origin",
                                                "origin-when-cross-origin",
                                                "unsafe-url",
                                                "same-origin",
                                                "strict-origin",
                                                "strict-origin-when-cross-origin"
                                              ],
                              "expectedValues" : ["",
                                                  "no-referrer",
                                                  "no-referrer-when-downgrade",
                                                  "origin",
                                                  "origin-when-cross-origin",
                                                  "unsafe-url",
                                                  "same-origin",
                                                  "strict-origin",
                                                  "strict-origin-when-cross-origin"
                                                  ]
      };
      var modes = {"givenValues" : ["same-origin", "no-cors", "cors"],
                   "expectedValues" : ["same-origin", "no-cors", "cors"]
      };
      var credentials = {"givenValues" : ["omit", "same-origin", "include"],
                          "expectedValues" : ["omit", "same-origin", "include"]
      };
      var caches = {"givenValues" : [ "default", "no-store", "reload", "no-cache", "force-cache"],
                    "expectedValues" : [ "default", "no-store", "reload", "no-cache", "force-cache"]
      };
      var redirects = {"givenValues" : ["follow", "error", "manual"],
                       "expectedValues" : ["follow", "error", "manual"]
      };
      var integrities = {"givenValues" : ["", "AZERTYUIOP1234567890" ],
                         "expectedValues" : ["", "AZERTYUIOP1234567890"]
      };

      //there is no getter for window, init's window might be null
      var windows = {"givenValues" : [ null ],
                     "expectedValues" : [undefined]
      };

      var initValuesDict = { "method" : methods,
                             "referrer" : referrers,
                             "referrerPolicy" : referrerPolicies,
                             "mode" : modes,
                             "credentials" : credentials,
                             "cache" : caches,
                             "redirect" : redirects,
                             "integrity" : integrities,
                             "window" : windows
      };

      for (var attributeName in initValuesDict) {
        var valuesToTest = initValuesDict[attributeName];
        for (var valueIdx in valuesToTest["givenValues"]) {
          var givenValue = valuesToTest["givenValues"][valueIdx];
          var expectedValue = valuesToTest["expectedValues"][valueIdx];
          test(function() {
            var requestInit = {};
            requestInit[attributeName] = givenValue
            var request = new Request("", requestInit);
            assert_equals(request[attributeName], expectedValue,
              "Expect request's " + attributeName + " is " + expectedValue + " when initialized with " + givenValue);
          }, "Check " + attributeName + " init value of " + givenValue + " and associated getter");
        }
      }
    </script>
  </body>
</html>
