<!DOCTYPE html>
<meta charset=windows-1252>
<!-- Using windows-1252 to ensure that DOMImplementation.createHTMLDocument()
     doesn't inherit utf-8 from the parent document. -->
<title>DOMImplementation.createHTMLDocument</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument">
<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-name">
<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-publicid">
<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-systemid">
<link rel=help href="https://dom.spec.whatwg.org/#dom-document-documentelement">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="DOMImplementation-createHTMLDocument.js"></script>
<div id="log"></div>
<script>
createHTMLDocuments(function(doc, expectedtitle, normalizedtitle) {
  assert_true(doc instanceof Document, "Should be a Document")
  assert_true(doc instanceof Node, "Should be a Node")
  assert_equals(doc.childNodes.length, 2,
                "Document should have two child nodes")

  var doctype = doc.doctype
  assert_true(doctype instanceof DocumentType,
              "Doctype should be a DocumentType")
  assert_true(doctype instanceof Node, "Doctype should be a Node")
  assert_equals(doctype.name, "html")
  assert_equals(doctype.publicId, "")
  assert_equals(doctype.systemId, "")

  var documentElement = doc.documentElement
  assert_true(documentElement instanceof HTMLHtmlElement,
              "Document element should be a HTMLHtmlElement")
  assert_equals(documentElement.childNodes.length, 2,
                "Document element should have two child nodes")
  assert_equals(documentElement.localName, "html")
  assert_equals(documentElement.tagName, "HTML")

  var head = documentElement.firstChild
  assert_true(head instanceof HTMLHeadElement,
              "Head should be a HTMLHeadElement")
  assert_equals(head.localName, "head")
  assert_equals(head.tagName, "HEAD")

  if (expectedtitle !== undefined) {
    assert_equals(head.childNodes.length, 1)

    var title = head.firstChild
    assert_true(title instanceof HTMLTitleElement,
                "Title should be a HTMLTitleElement")
    assert_equals(title.localName, "title")
    assert_equals(title.tagName, "TITLE")
    assert_equals(title.childNodes.length, 1)
    assert_equals(title.firstChild.data, expectedtitle)
  } else {
    assert_equals(head.childNodes.length, 0)
  }

  var body = documentElement.lastChild
  assert_true(body instanceof HTMLBodyElement,
              "Body should be a HTMLBodyElement")
  assert_equals(body.localName, "body")
  assert_equals(body.tagName, "BODY")
  assert_equals(body.childNodes.length, 0)
})

test(function() {
  var doc = document.implementation.createHTMLDocument("test");
  assert_equals(doc.URL, "about:blank");
  assert_equals(doc.documentURI, "about:blank");
  assert_equals(doc.compatMode, "CSS1Compat");
  assert_equals(doc.characterSet, "UTF-8");
  assert_equals(doc.contentType, "text/html");
  assert_equals(doc.createElement("DIV").localName, "div");
}, "createHTMLDocument(): metadata")

test(function() {
  var doc = document.implementation.createHTMLDocument("test");
  assert_equals(doc.characterSet, "UTF-8", "characterSet");
  assert_equals(doc.charset, "UTF-8", "charset");
  assert_equals(doc.inputEncoding, "UTF-8", "inputEncoding");
}, "createHTMLDocument(): characterSet aliases")

test(function() {
  var doc = document.implementation.createHTMLDocument("test");
  var a = doc.createElement("a");
  // In UTF-8: 0xC3 0xA4
  a.href = "http://example.org/?\u00E4";
  assert_equals(a.href, "http://example.org/?%C3%A4");
}, "createHTMLDocument(): URL parsing")
</script>
