<!DOCTYPE html>
<meta charset=utf-8>
<title>Document.createElementNS</title>
<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelementns">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="Document-createElementNS.js"></script>
<div id="log"></div>
<iframe src="/common/dummy.xml"></iframe>
<iframe src="/common/dummy.xhtml"></iframe>
<script>
var tests = createElementNS_tests.concat([
  /* Arrays with three elements:
   *   the namespace argument
   *   the qualifiedName argument
   *   the expected exception, or null if none
   */
  ["", "", "INVALID_CHARACTER_ERR"],
  [null, "", "INVALID_CHARACTER_ERR"],
  [undefined, "", "INVALID_CHARACTER_ERR"],
  ["http://example.com/", null, null],
  ["http://example.com/", "", "INVALID_CHARACTER_ERR"],
  ["/", null, null],
  ["/", "", "INVALID_CHARACTER_ERR"],
  ["http://www.w3.org/XML/1998/namespace", null, null],
  ["http://www.w3.org/XML/1998/namespace", "", "INVALID_CHARACTER_ERR"],
  ["http://www.w3.org/2000/xmlns/", null, "NAMESPACE_ERR"],
  ["http://www.w3.org/2000/xmlns/", "", "INVALID_CHARACTER_ERR"],
  ["foo:", null, null],
  ["foo:", "", "INVALID_CHARACTER_ERR"],
])

var xmlIframe = document.querySelector('[src="/common/dummy.xml"]');
var xhtmlIframe = document.querySelector('[src="/common/dummy.xhtml"]');

function runTest(t, i, desc) {
  async_test(function(testObj) {
    window.addEventListener("load", function() {
      testObj.step(function() {
        var doc;
        if (desc == "HTML document") {
          doc = document;
        } else if (desc == "XML document") {
          doc = xmlIframe.contentDocument;
          // Make sure we're testing the right document
          assert_equals(doc.documentElement.textContent, "Dummy XML document");
        } else if (desc == "XHTML document") {
          doc = xhtmlIframe.contentDocument;
          assert_equals(doc.documentElement.textContent, "Dummy XHTML document");
        }
        var namespace = t[0], qualifiedName = t[1], expected = t[2]
        if (expected != null) {
          assert_throws(expected, function() { doc.createElementNS(namespace, qualifiedName) })
        } else {
          var element = doc.createElementNS(namespace, qualifiedName)
          assert_not_equals(element, null)
          assert_equals(element.nodeType, Node.ELEMENT_NODE)
          assert_equals(element.nodeType, element.ELEMENT_NODE)
          assert_equals(element.nodeValue, null)
          assert_equals(element.ownerDocument, doc)
          var qualified = String(qualifiedName), names = []
          if (qualified.indexOf(":") >= 0) {
            names = qualified.split(":", 2)
          } else {
            names = [null, qualified]
          }
          assert_equals(element.prefix, names[0])
          assert_equals(element.localName, names[1])
          assert_equals(element.tagName, qualified)
          assert_equals(element.nodeName, qualified)
          assert_equals(element.namespaceURI,
                        namespace === undefined || namespace === "" ? null
                                                                    : namespace)
        }
      });
      testObj.done();
    });
  }, "createElementNS test in " + desc + ": " + t.map(format_value))
}

tests.forEach(function(t, i) {
  runTest(t, i, "HTML document")
  runTest(t, i, "XML document")
  runTest(t, i, "XHTML document")
})


test(function() {
  var HTMLNS = "http://www.w3.org/1999/xhtml";
  var element = document.createElementNS(HTMLNS, "span");
  assert_equals(element.namespaceURI, HTMLNS);
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "SPAN");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
  assert_true(element instanceof HTMLSpanElement, "Should be an HTMLSpanElement");
}, "Lower-case HTML element without a prefix");

test(function() {
  var HTMLNS = "http://www.w3.org/1999/xhtml";
  var element = document.createElementNS(HTMLNS, "html:span");
  assert_equals(element.namespaceURI, HTMLNS);
  assert_equals(element.prefix, "html");
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "HTML:SPAN");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
  assert_true(element instanceof HTMLSpanElement, "Should be an HTMLSpanElement");
}, "Lower-case HTML element with a prefix");

test(function() {
  var element = document.createElementNS("test", "span");
  assert_equals(element.namespaceURI, "test");
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "span");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "Lower-case non-HTML element without a prefix");

test(function() {
  var element = document.createElementNS("test", "html:span");
  assert_equals(element.namespaceURI, "test");
  assert_equals(element.prefix, "html");
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "html:span");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "Lower-case non-HTML element with a prefix");

test(function() {
  var HTMLNS = "http://www.w3.org/1999/xhtml";
  var element = document.createElementNS(HTMLNS, "SPAN");
  assert_equals(element.namespaceURI, HTMLNS);
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "SPAN");
  assert_equals(element.tagName, "SPAN");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
  assert_true(element instanceof HTMLUnknownElement, "Should be an HTMLUnknownElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "Upper-case HTML element without a prefix");

test(function() {
  var HTMLNS = "http://www.w3.org/1999/xhtml";
  var element = document.createElementNS(HTMLNS, "html:SPAN");
  assert_equals(element.namespaceURI, HTMLNS);
  assert_equals(element.prefix, "html");
  assert_equals(element.localName, "SPAN");
  assert_equals(element.tagName, "HTML:SPAN");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "Upper-case HTML element with a prefix");

test(function() {
  var element = document.createElementNS("test", "SPAN");
  assert_equals(element.namespaceURI, "test");
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "SPAN");
  assert_equals(element.tagName, "SPAN");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "Upper-case non-HTML element without a prefix");

test(function() {
  var element = document.createElementNS("test", "html:SPAN");
  assert_equals(element.namespaceURI, "test");
  assert_equals(element.prefix, "html");
  assert_equals(element.localName, "SPAN");
  assert_equals(element.tagName, "html:SPAN");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "Upper-case non-HTML element with a prefix");

test(function() {
  var element = document.createElementNS(null, "span");
  assert_equals(element.namespaceURI, null);
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "span");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "null namespace");

test(function() {
  var element = document.createElementNS(undefined, "span");
  assert_equals(element.namespaceURI, null);
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "span");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "undefined namespace");

test(function() {
  var element = document.createElementNS("", "span");
  assert_equals(element.namespaceURI, null);
  assert_equals(element.prefix, null);
  assert_equals(element.localName, "span");
  assert_equals(element.tagName, "span");
  assert_true(element instanceof Node, "Should be a Node");
  assert_true(element instanceof Element, "Should be an Element");
  assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
  assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
}, "empty string namespace");
</script>
