<!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>
      var methods = {"givenValues" : ["GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS", "head"],
                     "expectedValues" : ["GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS", "HEAD"]
      };
      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 is not supported due to privacy concerns.
                             //"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>
