<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: responseXML document properties</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[4]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#document-response-entity-body" data-tested-assertations="following::ol[1]/li[6] following::ol[1]/li[7] following::ol[1]/li[8] following::ol[1]/li[10]" />
  </head>
  <body>
    <div id="log"></div>
    <script>
      var client = new XMLHttpRequest()
      client.open("GET", "resources/well-formed.xml", false)
      client.send(null)
      var expected = {
        domain:undefined,
        URL:location.href.replace(/[^/]*$/, 'resources/well-formed.xml'),
        documentURI:location.href.replace(/[^/]*$/, 'resources/well-formed.xml'),
        referrer:'',
        title:'',
        contentType:'application/xml',
        readyState:'complete',
        location:null,
        defaultView:null,
        body:undefined,
        images: undefined,
        doctype:null,
        forms:undefined,
        all:undefined,
        links: undefined,
        cookie:''
      }

      for (var name in expected) {
        runTest(name, expected[name])
      }

      function runTest(name, value){
        test(function(){
          assert_equals(client.responseXML[name], value)
        }, name)
      }

      test(function() {
        assert_true((new Date(client.getResponseHeader('Last-Modified'))).getTime() == (new Date(client.responseXML.lastModified)).getTime(), 'responseXML.lastModified time shoud be equal to time in response Last-Modified header')
      }, 'lastModified set according to HTTP header')

      test(function() {
        client.responseXML.cookie = "thisshouldbeignored"
        assert_equals(client.responseXML.cookie, "")
      }, 'cookie (after setting it)')

      test(function() {
        assert_equals(typeof(client.responseXML.styleSheets), "object")
      }, 'styleSheets')

      test(function() {
        assert_equals(typeof(client.responseXML.implementation), "object")
      }, 'implementation')
    </script>
  </body>
</html>
