| <!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> | |
| <script> | |
| test(function() { | |
| 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, null, null], | |
| [null, "", "INVALID_CHARACTER_ERR"], | |
| [undefined, null, null], | |
| [undefined, undefined, null], | |
| [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"], | |
| ]) | |
| tests.forEach(function(t, i) { | |
| test(function() { | |
| var namespace = t[0], qualifiedName = t[1], expected = t[2] | |
| if (expected != null) { | |
| assert_throws(expected, function() { document.createElementNS(namespace, qualifiedName) }) | |
| } else { | |
| var element = document.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, document) | |
| 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 ? null : namespace) | |
| } | |
| }, "createElementNS test " + i + ": " + t.map(function(el) { return format_value(el) })) | |
| }) | |
| }) | |
| 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> |