document.title-09.html (3371B)
1 <!DOCTYPE html> 2 <link rel="help" href="https://html.spec.whatwg.org/multipage/#document.title"> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <div id="log"></div> 6 <script> 7 var SVG_NAMESPACE = "http://www.w3.org/2000/svg"; 8 var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; 9 10 function newSVGDocument() { 11 return document.implementation.createDocument(SVG_NAMESPACE, "svg", null); 12 } 13 14 function assertIsSVGTitle(element, expectedText) { 15 assert_equals(element.namespaceURI, SVG_NAMESPACE); 16 assert_equals(element.localName, "title"); 17 assert_equals(element.textContent, expectedText); 18 } 19 20 test(function() { 21 var doc = newSVGDocument(); 22 assert_equals(doc.title, ""); 23 var child = doc.createElementNS(SVG_NAMESPACE, "x-child"); 24 doc.documentElement.appendChild(child); 25 doc.title = "foo"; 26 assertIsSVGTitle(doc.documentElement.firstChild, "foo"); 27 assert_equals(doc.title, "foo"); 28 }, "No title element in SVG document"); 29 30 test(function() { 31 var doc = newSVGDocument(); 32 var title = doc.createElementNS(SVG_NAMESPACE, "title"); 33 title.textContent = "foo"; 34 doc.documentElement.appendChild(title) 35 assert_equals(doc.title, "foo"); 36 doc.title += "bar"; 37 assert_equals(title.textContent, "foobar"); 38 assert_equals(title.childNodes.length, 1); 39 assert_true(title.childNodes[0] instanceof Text); 40 assert_equals(doc.title, "foobar"); 41 doc.title = ""; 42 assert_equals(title.textContent, ""); 43 assert_equals(doc.title, ""); 44 assert_equals(title.childNodes.length, 0); 45 }, "Title element in SVG document"); 46 47 test(function() { 48 var doc = newSVGDocument(); 49 var title = doc.createElementNS(SVG_NAMESPACE, "title"); 50 title.textContent = "foo"; 51 var child = doc.createElementNS(SVG_NAMESPACE, "x-child"); 52 child.appendChild(title); 53 doc.documentElement.appendChild(child); 54 assert_equals(doc.title, ""); 55 56 // Now test that on setting, we create a new element and don't change the 57 // existing one 58 doc.title = "bar"; 59 assert_equals(title.textContent, "foo"); 60 assertIsSVGTitle(doc.documentElement.firstChild, "bar"); 61 assert_equals(doc.title, "bar"); 62 }, "Title element not child of SVG root"); 63 64 test(function() { 65 var doc = newSVGDocument(); 66 var title = doc.createElementNS(HTML_NAMESPACE, "title"); 67 title.textContent = "foo"; 68 doc.documentElement.appendChild(title); 69 assert_equals(doc.title, ""); 70 }, "Title element not in SVG namespace"); 71 72 test(function() { 73 // "SVG" != "svg" 74 var doc = document.implementation.createDocument(SVG_NAMESPACE, "SVG", null); 75 76 // Per spec, this does nothing 77 doc.title = "foo"; 78 assert_equals(doc.documentElement.childNodes.length, 0); 79 assert_equals(doc.title, ""); 80 81 // An SVG title is ignored by .title 82 doc.documentElement.appendChild(doc.createElementNS(SVG_NAMESPACE, "title")); 83 doc.documentElement.lastChild.textContent = "foo"; 84 assert_equals(doc.title, ""); 85 86 // But an HTML title is respected 87 doc.documentElement.appendChild(doc.createElementNS(HTML_NAMESPACE, "title")); 88 doc.documentElement.lastChild.textContent = "bar"; 89 assert_equals(doc.title, "bar"); 90 91 // Even if it's not a child of the root 92 var div = doc.createElementNS(HTML_NAMESPACE, "div"); 93 div.appendChild(doc.documentElement.lastChild); 94 doc.documentElement.appendChild(div); 95 assert_equals(doc.title, "bar"); 96 }, 'Root element not named "svg"'); 97 </script>