<!DOCTYPE html>
<meta charset=utf-8>
<title>Node.appendChild</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-node-appendchild">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<iframe src=about:blank></iframe>
<script>
// TODO: Exhaustive tests
function testLeaf(node, desc) {
  // WebIDL.
  test(function() {
    assert_throws(new TypeError(), function() { node.appendChild(null) })
  }, "Appending null to a " + desc)

  // Pre-insert step 1.
  test(function() {
    assert_throws("HIERARCHY_REQUEST_ERR", function() { node.appendChild(document.createTextNode("fail")) })
  }, "Appending to a " + desc)
}

// WebIDL.
test(function() {
  assert_throws(new TypeError(), function() { document.body.appendChild(null) })
  assert_throws(new TypeError(), function() { document.body.appendChild({'a':'b'}) })
}, "WebIDL tests")

// WebIDL and pre-insert step 1.
test(function() {
  testLeaf(document.createTextNode("Foo"), "text node")
  testLeaf(document.createComment("Foo"), "comment")
  testLeaf(document.doctype, "doctype")
}, "Appending to a leaf node.")

// Pre-insert step 5.
test(function() {
  var frameDoc = frames[0].document
  assert_throws("HIERARCHY_REQUEST_ERR", function() { document.body.appendChild(frameDoc) })
}, "Appending a document")

// Pre-insert step 8.
test(function() {
  var frameDoc = frames[0].document
  var s = frameDoc.createElement("a")
  assert_equals(s.ownerDocument, frameDoc)
  document.body.appendChild(s)
  assert_equals(s.ownerDocument, document)
}, "Adopting an orphan")
test(function() {
  var frameDoc = frames[0].document
  var s = frameDoc.createElement("b")
  assert_equals(s.ownerDocument, frameDoc)
  frameDoc.body.appendChild(s)
  assert_equals(s.ownerDocument, frameDoc)
  document.body.appendChild(s)
  assert_equals(s.ownerDocument, document)
}, "Adopting a non-orphan")
</script>
