<!DOCTYPE html>
<title>Element.tagName</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
  var HTMLNS = "http://www.w3.org/1999/xhtml"
  assert_equals(document.createElementNS(HTMLNS, "I").tagName, "I")
  assert_equals(document.createElementNS(HTMLNS, "i").tagName, "I")
  assert_equals(document.createElementNS(HTMLNS, "x:b").tagName, "X:B")
}, "tagName should upper-case for HTML elements in HTML documents.")

test(function() {
  var SVGNS = "http://www.w3.org/2000/svg"
  assert_equals(document.createElementNS(SVGNS, "svg").tagName, "svg")
  assert_equals(document.createElementNS(SVGNS, "SVG").tagName, "SVG")
  assert_equals(document.createElementNS(SVGNS, "s:svg").tagName, "s:svg")
  assert_equals(document.createElementNS(SVGNS, "s:SVG").tagName, "s:SVG")
}, "tagName should not upper-case for SVG elements in HTML documents.")

test(function() {
  if ("DOMParser" in window) {
    var xmlel = new DOMParser()
      .parseFromString('<div xmlns="http://www.w3.org/1999/xhtml">Test</div>', 'text/xml')
      .documentElement;
    assert_equals(xmlel.tagName, "div", "tagName should be lowercase in XML")
    var htmlel = document.importNode(xmlel, true)
    assert_equals(htmlel.tagName, "DIV", "tagName should be uppercase in HTML")
  }
}, "tagName should be updated when changing ownerDocument")

test(function() {
  var xmlel = document.implementation
    .createDocument("http://www.w3.org/1999/xhtml", "div", null)
    .documentElement;
  assert_equals(xmlel.tagName, "div", "tagName should be lowercase in XML")
  var htmlel = document.importNode(xmlel, true)
  assert_equals(htmlel.tagName, "DIV", "tagName should be uppercase in HTML")
}, "tagName should be updated when changing ownerDocument (createDocument without prefix)")

test(function() {
  var xmlel = document.implementation
    .createDocument("http://www.w3.org/1999/xhtml", "foo:div", null)
    .documentElement;
  assert_equals(xmlel.tagName, "foo:div", "tagName should be lowercase in XML")
  var htmlel = document.importNode(xmlel, true)
  assert_equals(htmlel.tagName, "FOO:DIV", "tagName should be uppercase in HTML")
}, "tagName should be updated when changing ownerDocument (createDocument with prefix)")
</script>
