| <!DOCTYPE html> |
| <link rel="help" href="https://html.spec.whatwg.org/multipage/#document.title"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <script> |
| var SVG_NAMESPACE = "http://www.w3.org/2000/svg"; |
| var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; |
| |
| function newSVGDocument() { |
| return document.implementation.createDocument(SVG_NAMESPACE, "svg", null); |
| } |
| |
| function assertIsSVGTitle(element, expectedText) { |
| assert_equals(element.namespaceURI, SVG_NAMESPACE); |
| assert_equals(element.localName, "title"); |
| assert_equals(element.textContent, expectedText); |
| } |
| |
| test(function() { |
| var doc = newSVGDocument(); |
| assert_equals(doc.title, ""); |
| var child = doc.createElementNS(SVG_NAMESPACE, "x-child"); |
| doc.documentElement.appendChild(child); |
| doc.title = "foo"; |
| assertIsSVGTitle(doc.documentElement.firstChild, "foo"); |
| assert_equals(doc.title, "foo"); |
| }, "No title element in SVG document"); |
| |
| test(function() { |
| var doc = newSVGDocument(); |
| var title = doc.createElementNS(SVG_NAMESPACE, "title"); |
| title.textContent = "foo"; |
| doc.documentElement.appendChild(title) |
| assert_equals(doc.title, "foo"); |
| doc.title += "bar"; |
| assert_equals(title.textContent, "foobar"); |
| assert_equals(title.childNodes.length, 1); |
| assert_true(title.childNodes[0] instanceof Text); |
| assert_equals(doc.title, "foobar"); |
| doc.title = ""; |
| assert_equals(title.textContent, ""); |
| assert_equals(doc.title, ""); |
| assert_equals(title.childNodes.length, 0); |
| }, "Title element in SVG document"); |
| |
| test(function() { |
| var doc = newSVGDocument(); |
| var title = doc.createElementNS(SVG_NAMESPACE, "title"); |
| title.textContent = "foo"; |
| var child = doc.createElementNS(SVG_NAMESPACE, "x-child"); |
| child.appendChild(title); |
| doc.documentElement.appendChild(child); |
| assert_equals(doc.title, ""); |
| |
| // Now test that on setting, we create a new element and don't change the |
| // existing one |
| doc.title = "bar"; |
| assert_equals(title.textContent, "foo"); |
| assertIsSVGTitle(doc.documentElement.firstChild, "bar"); |
| assert_equals(doc.title, "bar"); |
| }, "Title element not child of SVG root"); |
| |
| test(function() { |
| var doc = newSVGDocument(); |
| var title = doc.createElementNS(HTML_NAMESPACE, "title"); |
| title.textContent = "foo"; |
| doc.documentElement.appendChild(title); |
| assert_equals(doc.title, ""); |
| }, "Title element not in SVG namespace"); |
| |
| test(function() { |
| // "SVG" != "svg" |
| var doc = document.implementation.createDocument(SVG_NAMESPACE, "SVG", null); |
| |
| // Per spec, this does nothing |
| doc.title = "foo"; |
| assert_equals(doc.documentElement.childNodes.length, 0); |
| assert_equals(doc.title, ""); |
| |
| // An SVG title is ignored by .title |
| doc.documentElement.appendChild(doc.createElementNS(SVG_NAMESPACE, "title")); |
| doc.documentElement.lastChild.textContent = "foo"; |
| assert_equals(doc.title, ""); |
| |
| // But an HTML title is respected |
| doc.documentElement.appendChild(doc.createElementNS(HTML_NAMESPACE, "title")); |
| doc.documentElement.lastChild.textContent = "bar"; |
| assert_equals(doc.title, "bar"); |
| |
| // Even if it's not a child of the root |
| var div = doc.createElementNS(HTML_NAMESPACE, "div"); |
| div.appendChild(doc.documentElement.lastChild); |
| doc.documentElement.appendChild(div); |
| assert_equals(doc.title, "bar"); |
| }, 'Root element not named "svg"'); |
| </script> |