summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/dom/documents/dom-tree-accessors/document.title-09.html
blob: a3273f626cd9cef31e65bf9437989de236b4f89a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!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>