summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html
blob: caa1beab47ae8005c951c91d2308dff19c836048 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: Template element as a descendant of the body element.</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
<meta name="assert" content="Template element can be a descendant of the body element">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-template-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src='/html/resources/common.js'></script>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">

function templateIsAChild(element) {
    element.innerHTML = '<template>some text</template>';

    assert_not_equals(element.querySelector('template'), null,
        'Template element should be a descendant of the ' + element.tagName + ' element');
}

function templateIsDisallowedAsAChild(element) {
    element.innerHTML = '<template>some text</template>';

    assert_equals(element.querySelector('template'), null,
        'Template element should not be allowed as a descendant of the ' + element.tagName + ' element');
}

function templateIsAnIndirectChild(element) {
    element.innerHTML = '<div><template>some text</template></div>';

    assert_not_equals(element.querySelector('template'), null,
        'Template element should be a descendant of the ' + element.tagName + ' element');
}

function templateIsDisallowedAsAnIndirectChild(element) {
    element.innerHTML = '<div><template>some text</template></div>';

    assert_equals(element.querySelector('template'), null,
        'Template element should not be allowed as indirect descendant of the ' + element.tagName + ' element');
}

function templateIsAnAppendedChild(doc, element) {
    var template = doc.createElement('template');

    element.appendChild(template);

    assert_not_equals(element.querySelector('template'), null,
        'Template element should be a descendant of the ' + element.tagName + ' element');
}

function templateIsAnAppendedIndirectChild(doc, element) {
    var template = doc.createElement('template');
    var div = doc.createElement('div');
    div.appendChild(template);

    element.appendChild(div);

    assert_not_equals(element.querySelector('template'), null,
        'Template element should be a descendant of the ' + element.tagName + ' element');
}

var doc = newHTMLDocument();
var frameset = doc.createElement('frameset');

var parameters = [['Template element as a descendant of the BODY element. ' +
                   'Template element is created by innerHTML',
                   doc.body],
                  ['Template element as a descendant of the HEAD element. ' +
                   'Template element is created by innerHTML',
                   doc.head],
                   ];
// Template element as a descendant of the HEAD and BODY elements
generate_tests(templateIsAChild, parameters);

parameters = [['Template element as a descendant of the FRAMESET element. ' +
               'Template element is created by innerHTML',
               frameset],
               ];
// Template element should be disallowed as a descendant of the FRAMESET elements
generate_tests(templateIsDisallowedAsAChild, parameters);


parameters = [['Template element as an indirect descendant of the BODY element. ' +
               'Template element is created by innerHTML',
               doc.body],
              ['Template element as an indirect descendant of the HEAD element. ' +
               'Template element is created by innerHTML',
               doc.head],
               ];
// Template element as an indirect descendant of the HEAD, BODY and FRAMESET elements
generate_tests(templateIsAnIndirectChild, parameters);

parameters = [['Template element as an indirect descendant of the FRAMESET element. ' +
               'Template element is created by innerHTML',
               frameset],
               ];
// Template element should be disallowed as an indirect descendant of the FRAMESET elements
generate_tests(templateIsDisallowedAsAnIndirectChild, parameters);



parameters = [['Template element as a descendant of the BODY element. ' +
               'Template element is appended by appendChild()',
               doc, doc.body],
              ['Template element as a descendant of the HEAD element. ' +
               'Template element is appended by appendChild()',
               doc, doc.head],
               ['Template element as a descendant of the FRAMESET element. ' +
                'Template element is  appended by appendChild()',
                doc, frameset]
               ];
// Template element as a descendant of the HEAD, BODY and FRAMESET elements
generate_tests(templateIsAnAppendedChild, parameters);



parameters = [['Template element as an indirect descendant of the BODY element. ' +
               'Template element is appended by appendChild()',
               doc, doc.body],
              ['Template element as an indirect descendant of the HEAD element. ' +
               'Template element is appended by appendChild()',
               doc, doc.head],
               ['Template element as an indirect descendant of the FRAMESET element. ' +
                'Template element is  appended by appendChild()',
                doc, frameset]
               ];
// Template element as a descendant of the HEAD, BODY and FRAMESET elements
generate_tests(templateIsAnAppendedIndirectChild, parameters);

</script>
</body>
</html>