tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>