<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: responseXML basic test</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-responsexml-attribute" data-tested-assertations="following::ol[1]/li[2] following::ol[1]/li[4]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[1] following::ol[1]/li[6] following::ol[1]/li[10]" />
  </head>
  <body>
    <div id="log"></div>
    <script>
      test(function() {
        var client = new XMLHttpRequest()
        assert_equals(client.responseXML, null)
        client.open("GET", "resources/well-formed.xml", false)
        assert_equals(client.responseXML, null)
        client.send(null)
        assert_equals(client.responseXML.documentElement.localName, "html", 'localName is html')
        assert_equals(client.responseXML.documentElement.childNodes.length, 5, 'childNodes is 5')
        assert_equals(client.responseXML.getElementById("n1").localName, client.responseXML.documentElement.childNodes[1].localName)
        assert_equals(client.responseXML.getElementById("n2"), null, 'getElementById("n2")')
        assert_equals(client.responseXML.getElementsByTagName("p")[1].namespaceURI, "namespacesarejuststrings", 'namespaceURI')
      })
      test(function() {
        var client = new XMLHttpRequest()
        client.open("GET", "resources/status.py?type=application/xml", false)
        client.send(null)
        assert_equals(client.responseXML, null)
      }, 'responseXML on empty response documents')
    </script>
  </body>
</html>
