<!DOCTYPE html>
<title>Node.parentElement</title>
<link rel="stylesheet" href="/resources/testharness.css">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
  assert_equals(document.parentElement, null)
}, "When the parent is null, parentElement should be null")
test(function() {
  assert_equals(document.doctype.parentElement, null)
}, "When the parent is a document, parentElement should be null (doctype)")
test(function() {
  assert_equals(document.documentElement.parentElement, null)
}, "When the parent is a document, parentElement should be null (element)")
test(function() {
  var comment = document.appendChild(document.createComment("foo"))
  assert_equals(comment.parentElement, null)
}, "When the parent is a document, parentElement should be null (comment)")
test(function() {
  var df = document.createDocumentFragment()
  assert_equals(df.parentElement, null)
  var el = document.createElement("div")
  assert_equals(el.parentElement, null)
  df.appendChild(el)
  assert_equals(el.parentNode, df)
  assert_equals(el.parentElement, null)
}, "parentElement should return null for children of DocumentFragments (element)")
test(function() {
  var df = document.createDocumentFragment()
  assert_equals(df.parentElement, null)
  var text = document.createTextNode("bar")
  assert_equals(text.parentElement, null)
  df.appendChild(text)
  assert_equals(text.parentNode, df)
  assert_equals(text.parentElement, null)
}, "parentElement should return null for children of DocumentFragments (text)")
test(function() {
  var df = document.createDocumentFragment()
  var parent = document.createElement("div")
  df.appendChild(parent)
  var el = document.createElement("div")
  assert_equals(el.parentElement, null)
  parent.appendChild(el)
  assert_equals(el.parentElement, parent)
}, "parentElement should work correctly with DocumentFragments (element)")
test(function() {
  var df = document.createDocumentFragment()
  var parent = document.createElement("div")
  df.appendChild(parent)
  var text = document.createTextNode("bar")
  assert_equals(text.parentElement, null)
  parent.appendChild(text)
  assert_equals(text.parentElement, parent)
}, "parentElement should work correctly with DocumentFragments (text)")
test(function() {
  var parent = document.createElement("div")
  var el = document.createElement("div")
  assert_equals(el.parentElement, null)
  parent.appendChild(el)
  assert_equals(el.parentElement, parent)
}, "parentElement should work correctly in disconnected subtrees (element)")
test(function() {
  var parent = document.createElement("div")
  var text = document.createTextNode("bar")
  assert_equals(text.parentElement, null)
  parent.appendChild(text)
  assert_equals(text.parentElement, parent)
}, "parentElement should work correctly in disconnected subtrees (text)")
test(function() {
  var el = document.createElement("div")
  assert_equals(el.parentElement, null)
  document.body.appendChild(el)
  assert_equals(el.parentElement, document.body)
}, "parentElement should work correctly in a document (element)")
test(function() {
  var text = document.createElement("div")
  assert_equals(text.parentElement, null)
  document.body.appendChild(text)
  assert_equals(text.parentElement, document.body)
}, "parentElement should work correctly in a document (text)")
</script>
