Document-createElementNS.html (10492B)
1 <!DOCTYPE html> 2 <meta charset=utf-8> 3 <title>Document.createElementNS</title> 4 <link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelementns"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="Document-createElementNS.js"></script> 8 <div id="log"></div> 9 <iframe src="/common/dummy.xml"></iframe> 10 <iframe src="/common/dummy.xhtml"></iframe> 11 <script> 12 var tests = createElementNS_tests.concat([ 13 /* Arrays with three elements: 14 * the namespace argument 15 * the qualifiedName argument 16 * the expected exception, or null if none 17 */ 18 ["", "", "INVALID_CHARACTER_ERR"], 19 [null, "", "INVALID_CHARACTER_ERR"], 20 [undefined, "", "INVALID_CHARACTER_ERR"], 21 ["http://example.com/", null, null], 22 ["http://example.com/", "", "INVALID_CHARACTER_ERR"], 23 ["/", null, null], 24 ["/", "", "INVALID_CHARACTER_ERR"], 25 ["http://www.w3.org/XML/1998/namespace", null, null], 26 ["http://www.w3.org/XML/1998/namespace", "", "INVALID_CHARACTER_ERR"], 27 ["http://www.w3.org/2000/xmlns/", null, "NAMESPACE_ERR"], 28 ["http://www.w3.org/2000/xmlns/", "", "INVALID_CHARACTER_ERR"], 29 ["foo:", null, null], 30 ["foo:", "", "INVALID_CHARACTER_ERR"], 31 ]) 32 33 var xmlIframe = document.querySelector('[src="/common/dummy.xml"]'); 34 var xhtmlIframe = document.querySelector('[src="/common/dummy.xhtml"]'); 35 36 function runTest(t, i, desc) { 37 async_test(function(testObj) { 38 window.addEventListener("load", function() { 39 testObj.step(function() { 40 var doc; 41 if (desc == "HTML document") { 42 doc = document; 43 } else if (desc == "XML document") { 44 doc = xmlIframe.contentDocument; 45 // Make sure we're testing the right document 46 assert_equals(doc.documentElement.textContent, "Dummy XML document"); 47 } else if (desc == "XHTML document") { 48 doc = xhtmlIframe.contentDocument; 49 assert_equals(doc.documentElement.textContent, "Dummy XHTML document"); 50 } 51 var namespace = t[0], qualifiedName = t[1], expected = t[2] 52 if (expected != null) { 53 assert_throws_dom(expected, doc.defaultView.DOMException, function() {doc.createElementNS(namespace, qualifiedName) }); 54 } else { 55 var element = doc.createElementNS(namespace, qualifiedName) 56 assert_not_equals(element, null) 57 assert_equals(element.nodeType, Node.ELEMENT_NODE) 58 assert_equals(element.nodeType, element.ELEMENT_NODE) 59 assert_equals(element.nodeValue, null) 60 assert_equals(element.ownerDocument, doc) 61 var qualified = String(qualifiedName) 62 var tagName = String(qualifiedName) 63 var names = []; 64 var firstColonIndex = qualified.indexOf(":") 65 if (firstColonIndex >= 0) { 66 names = qualifiedName.split(":", 2); 67 tagName = names.join(":"); 68 } else { 69 names = [null, qualified] 70 } 71 assert_equals(element.prefix, names[0], 'element.prefix') 72 assert_equals(element.localName, names[1], 'element.localName') 73 assert_equals(element.tagName, tagName, 'element.tagName') 74 assert_equals(element.nodeName, tagName, 'element.nodeName') 75 assert_equals(element.namespaceURI, 76 namespace === undefined || namespace === "" ? null 77 : namespace, 78 'element.namespaceURI') 79 } 80 }); 81 testObj.done(); 82 }); 83 }, "createElementNS test in " + desc + ": " + t.map(format_value)) 84 } 85 86 tests.forEach(function(t, i) { 87 runTest(t, i, "HTML document") 88 runTest(t, i, "XML document") 89 runTest(t, i, "XHTML document") 90 }) 91 92 93 test(function() { 94 var HTMLNS = "http://www.w3.org/1999/xhtml"; 95 var element = document.createElementNS(HTMLNS, "span"); 96 assert_equals(element.namespaceURI, HTMLNS); 97 assert_equals(element.prefix, null); 98 assert_equals(element.localName, "span"); 99 assert_equals(element.tagName, "SPAN"); 100 assert_true(element instanceof Node, "Should be a Node"); 101 assert_true(element instanceof Element, "Should be an Element"); 102 assert_true(element instanceof HTMLElement, "Should be an HTMLElement"); 103 assert_true(element instanceof HTMLSpanElement, "Should be an HTMLSpanElement"); 104 }, "Lower-case HTML element without a prefix"); 105 106 test(function() { 107 var HTMLNS = "http://www.w3.org/1999/xhtml"; 108 var element = document.createElementNS(HTMLNS, "html:span"); 109 assert_equals(element.namespaceURI, HTMLNS); 110 assert_equals(element.prefix, "html"); 111 assert_equals(element.localName, "span"); 112 assert_equals(element.tagName, "HTML:SPAN"); 113 assert_true(element instanceof Node, "Should be a Node"); 114 assert_true(element instanceof Element, "Should be an Element"); 115 assert_true(element instanceof HTMLElement, "Should be an HTMLElement"); 116 assert_true(element instanceof HTMLSpanElement, "Should be an HTMLSpanElement"); 117 }, "Lower-case HTML element with a prefix"); 118 119 test(function() { 120 var element = document.createElementNS("test", "span"); 121 assert_equals(element.namespaceURI, "test"); 122 assert_equals(element.prefix, null); 123 assert_equals(element.localName, "span"); 124 assert_equals(element.tagName, "span"); 125 assert_true(element instanceof Node, "Should be a Node"); 126 assert_true(element instanceof Element, "Should be an Element"); 127 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 128 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 129 }, "Lower-case non-HTML element without a prefix"); 130 131 test(function() { 132 var element = document.createElementNS("test", "html:span"); 133 assert_equals(element.namespaceURI, "test"); 134 assert_equals(element.prefix, "html"); 135 assert_equals(element.localName, "span"); 136 assert_equals(element.tagName, "html:span"); 137 assert_true(element instanceof Node, "Should be a Node"); 138 assert_true(element instanceof Element, "Should be an Element"); 139 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 140 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 141 }, "Lower-case non-HTML element with a prefix"); 142 143 test(function() { 144 var HTMLNS = "http://www.w3.org/1999/xhtml"; 145 var element = document.createElementNS(HTMLNS, "SPAN"); 146 assert_equals(element.namespaceURI, HTMLNS); 147 assert_equals(element.prefix, null); 148 assert_equals(element.localName, "SPAN"); 149 assert_equals(element.tagName, "SPAN"); 150 assert_true(element instanceof Node, "Should be a Node"); 151 assert_true(element instanceof Element, "Should be an Element"); 152 assert_true(element instanceof HTMLElement, "Should be an HTMLElement"); 153 assert_true(element instanceof HTMLUnknownElement, "Should be an HTMLUnknownElement"); 154 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 155 }, "Upper-case HTML element without a prefix"); 156 157 test(function() { 158 var HTMLNS = "http://www.w3.org/1999/xhtml"; 159 var element = document.createElementNS(HTMLNS, "html:SPAN"); 160 assert_equals(element.namespaceURI, HTMLNS); 161 assert_equals(element.prefix, "html"); 162 assert_equals(element.localName, "SPAN"); 163 assert_equals(element.tagName, "HTML:SPAN"); 164 assert_true(element instanceof Node, "Should be a Node"); 165 assert_true(element instanceof Element, "Should be an Element"); 166 assert_true(element instanceof HTMLElement, "Should be an HTMLElement"); 167 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 168 }, "Upper-case HTML element with a prefix"); 169 170 test(function() { 171 var element = document.createElementNS("test", "SPAN"); 172 assert_equals(element.namespaceURI, "test"); 173 assert_equals(element.prefix, null); 174 assert_equals(element.localName, "SPAN"); 175 assert_equals(element.tagName, "SPAN"); 176 assert_true(element instanceof Node, "Should be a Node"); 177 assert_true(element instanceof Element, "Should be an Element"); 178 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 179 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 180 }, "Upper-case non-HTML element without a prefix"); 181 182 test(function() { 183 var element = document.createElementNS("test", "html:SPAN"); 184 assert_equals(element.namespaceURI, "test"); 185 assert_equals(element.prefix, "html"); 186 assert_equals(element.localName, "SPAN"); 187 assert_equals(element.tagName, "html:SPAN"); 188 assert_true(element instanceof Node, "Should be a Node"); 189 assert_true(element instanceof Element, "Should be an Element"); 190 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 191 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 192 }, "Upper-case non-HTML element with a prefix"); 193 194 test(function() { 195 var element = document.createElementNS(null, "span"); 196 assert_equals(element.namespaceURI, null); 197 assert_equals(element.prefix, null); 198 assert_equals(element.localName, "span"); 199 assert_equals(element.tagName, "span"); 200 assert_true(element instanceof Node, "Should be a Node"); 201 assert_true(element instanceof Element, "Should be an Element"); 202 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 203 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 204 }, "null namespace"); 205 206 test(function() { 207 var element = document.createElementNS(undefined, "span"); 208 assert_equals(element.namespaceURI, null); 209 assert_equals(element.prefix, null); 210 assert_equals(element.localName, "span"); 211 assert_equals(element.tagName, "span"); 212 assert_true(element instanceof Node, "Should be a Node"); 213 assert_true(element instanceof Element, "Should be an Element"); 214 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 215 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 216 }, "undefined namespace"); 217 218 test(function() { 219 var element = document.createElementNS("", "span"); 220 assert_equals(element.namespaceURI, null); 221 assert_equals(element.prefix, null); 222 assert_equals(element.localName, "span"); 223 assert_equals(element.tagName, "span"); 224 assert_true(element instanceof Node, "Should be a Node"); 225 assert_true(element instanceof Element, "Should be an Element"); 226 assert_false(element instanceof HTMLElement, "Should not be an HTMLElement"); 227 assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement"); 228 }, "empty string namespace"); 229 </script>