<!doctype html>
<meta charset=windows-1252>
<!-- Using windows-1252 to ensure that new Document() doesn't inherit utf-8
     from the parent document. -->
<title>Document constructor</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-document">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
  var doc = new Document();
  assert_true(doc instanceof Node, "Should be a Node");
  assert_true(doc instanceof Document, "Should be a Document");
  assert_false(doc instanceof XMLDocument, "Should not be an XMLDocument");
  assert_equals(Object.getPrototypeOf(doc), Document.prototype,
                "Document should be the primary interface");
}, "new Document(): interfaces")

test(function() {
  var doc = new Document();
  assert_equals(doc.firstChild, null, "firstChild");
  assert_equals(doc.lastChild, null, "lastChild");
  assert_equals(doc.doctype, null, "doctype");
  assert_equals(doc.documentElement, null, "documentElement");
  assert_array_equals(doc.childNodes, [], "childNodes");
}, "new Document(): children")

test(function() {
  var doc = new Document();
  assert_equals(doc.location, null);
  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, "application/xml");
  assert_equals(doc.createElement("DIV").localName, "DIV");
  assert_equals(doc.createElement("a").constructor, Element);
}, "new Document(): metadata")

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

test(function() {
  var doc = new Document();
  var a = doc.createElementNS("http://www.w3.org/1999/xhtml", "a");
  assert_equals(a.constructor, HTMLAnchorElement);
  // In UTF-8: 0xC3 0xA4
  a.href = "http://example.org/?\u00E4";
  assert_equals(a.href, "http://example.org/?%C3%A4");
}, "new Document(): URL parsing")
</script>
