<!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.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");
}, "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.createElement("a");
  // 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>
