<!DOCTYPE html>
<html>
  <head>
    <title>XMLHttpRequest: open() resolving URLs - fragment identifier</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-open()-method" data-tested-assertations="following::ol[1]/li[7]" />
  </head>
  <body>
    <div id="log"></div>
    <script>
      test(function() {
        var client = new XMLHttpRequest()
        client.open("GET", "folder.txt#foobar", false)
        client.send(null)
        assert_equals(client.responseText, "top\n")
      })
      test(function() {
        var client = new XMLHttpRequest()
        client.open("GET", "resources/requri.py#foobar", false)
        client.send(null)
        assert_regexp_match(client.responseText, /XMLHttpRequest\/resources\/requri\.py$/)
      }, 'make sure fragment is removed from URL before request')
      test(function() {
        var client = new XMLHttpRequest()
        client.open("GET", "resources/requri.py?help=#foobar", false)
        client.send(null)
        assert_regexp_match(client.responseText, /XMLHttpRequest\/resources\/requri\.py\?help=$/)
      }, 'make sure fragment is removed from URL before request (with query string)')
      test(function() {
        var client = new XMLHttpRequest()
        client.open("GET", "resources/requri.py?" +encodeURIComponent("#foobar"), false)
        client.send(null)
        assert_regexp_match(client.responseText, /XMLHttpRequest\/resources\/requri\.py\?%23foobar$/)
      }, 'make sure escaped # is not removed')
    </script>
  </body>
</html>
