summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html
blob: 0c60c10738d8eaba9687e6ab0fabeea91aee9a87 (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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: When node's document changes its owner document should be changed</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="When a template element's node document changes, the template element's content DocumentFragment must be adopted into the new node document's template contents owner document">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#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">

test(function() {
    var doc1 = newHTMLDocument();
    var template = doc1.createElement('template');

    assert_equals(template.ownerDocument, doc1, 'Wrong template node owner document');
    assert_not_equals(template.content.ownerDocument, doc1,
            'Wrong template content owner document');

    var doc2 = newHTMLDocument();
    var template2 = doc2.createElement('template');
    doc2.body.appendChild(template);

    assert_equals(template.ownerDocument, template2.ownerDocument,
            'Template node owner document should be changed');
    assert_equals(template.content.ownerDocument, template2.content.ownerDocument,
            'Template content owner document should be changed');

}, 'Changing of template element\'s node document. ' +
    'Test that ownerDocument of an empty template and its content changes');

test(function() {
    var doc1 = newHTMLDocument();
    doc1.body.innerHTML = '<template id="tmpl"><div>Div content</div> And some more text</template>';

    var template = doc1.querySelector('#tmpl');

    assert_equals(template.ownerDocument, doc1,
            'Wrong template node owner document');
    assert_not_equals(template.content.ownerDocument, doc1,
            'Wrong template content owner document');

    var doc2 = newHTMLDocument();
    var template2 = doc2.createElement('template');
    doc2.body.appendChild(template);

    assert_equals(template.ownerDocument, template2.ownerDocument,
            'Template node owner document should be changed');
    assert_equals(template.content.ownerDocument, template2.content.ownerDocument,
            'Template content owner document should be changed');

    assert_equals(template.content.querySelector('div').ownerDocument,
            template2.content.ownerDocument,
            'Template content descendants owner document should be changed');

}, 'Changing of template element\'s node document. ' +
    'Test that ownerDocument of a not empty template and its content changes');

test(function() {
    var doc1 = newHTMLDocument();
    doc1.body.innerHTML = ''
            + '<template id="tmpl"><div>Div content</div> And some more text'
            + '<template id="tmpl2"><div>Template content</div></template>'
            + '</template>';

    var template = doc1.querySelector('#tmpl');

    assert_equals(template.ownerDocument, doc1, 'Wrong template node owner document');
    assert_not_equals(template.content.ownerDocument, doc1,
            'Wrong template content owner document');

    var nestedTemplate = template.content.querySelector('#tmpl2');

    assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument,
            'Wrong nested template node owner document');
    assert_equals(nestedTemplate.content.ownerDocument, template.content.ownerDocument,
            'Wrong nested template content owner document');

    var doc2 = newHTMLDocument();
    var template2 = doc2.createElement('template');
    doc2.body.appendChild(template);

    assert_equals(template.ownerDocument, template2.ownerDocument,
            'Template node owner document should be changed');
    assert_equals(template.content.ownerDocument, template2.content.ownerDocument,
            'Template content owner document should be changed');
    assert_equals(template.content.querySelector('div').ownerDocument,
            template2.content.ownerDocument,
            'Template content descendants owner document should be changed');

    assert_equals(nestedTemplate.ownerDocument,
            template2.content.ownerDocument,
            'Nested template node owner document should be changed');
    assert_equals(nestedTemplate.content.ownerDocument,
            template2.content.ownerDocument,
            'Nested template content owner document should be changed');
    assert_equals(nestedTemplate.content.querySelector('div').ownerDocument,
            template2.content.ownerDocument,
            'Owner document of the nested template content descendants should be changed');

}, 'Changing of template element\'s node document. ' +
    'Test that ownerDocument of nested template and its content changes');

testInIFrame('../resources/template-contents.html', function(context) {
    var doc1 = context.iframes[0].contentDocument;

    var template = doc1.body.querySelector('template');

    var doc2 = newHTMLDocument();
    var template2 = doc2.createElement('template');
    doc2.body.appendChild(template);

    assert_equals(template.ownerDocument, template2.ownerDocument,
            'Template node owner document should be changed');
    assert_equals(template.content.ownerDocument,
            template2.content.ownerDocument,
            'Template content owner document should be changed');
    assert_equals(template.content.querySelector('div').ownerDocument,
            template2.content.ownerDocument,
            'Template content descendants owner document should be changed');

}, 'Changing of template element\'s node document. ' +
    'Test document loaded from a file');

testInIFrame('../resources/template-contents.html', function(context) {
    var doc1 = context.iframes[0].contentDocument;

    var doc2 = newHTMLDocument();
    var template = doc2.createElement('template');
    var div = doc2.createElement('div');
    template.content.appendChild(div);

    doc1.body.appendChild(template);

    assert_not_equals(template.ownerDocument, doc2,
            'Template node owner document should be changed');
    assert_not_equals(template.content.ownerDocument, doc2,
            'Template content owner document should be changed');
    assert_not_equals(div.ownerDocument, doc2,
            'Template content descendants owner document should be changed');

    assert_equals(template.ownerDocument, doc1,
            'Template node owner document should be changed');
    // doc1 has browsing context so it cannot be template.content.ownerDocument
    assert_not_equals(template.content.ownerDocument, doc1,
            'Template content owner document should be a new document');
    assert_equals(div.ownerDocument, template.content.ownerDocument,
            'Template content descendants owner document should be ' +
            'template content document owner');

}, 'Changing of template element\'s node document. ' +
    'Adobt template element into a document that has a browsing context');

testInIFrame('../resources/template-contents.html', function(context) {
    var doc1 = context.iframes[0].contentDocument;

    var template = doc1.querySelector('template');
    var div = template.content.querySelector('div');
    var templateContentOwner = template.content.ownerDocument;

    var doc2 = document;

    doc2.body.appendChild(template);

    assert_not_equals(template.ownerDocument, doc1,
            'Template node owner document should be changed');
    assert_not_equals(template.content.ownerDocument, templateContentOwner,
            'Template content owner document should be changed');
    assert_not_equals(div.ownerDocument, templateContentOwner,
            'Template content descendants owner document should be changed');

    assert_equals(template.ownerDocument, doc2,
            'Template node owner document should be changed');
    // doc2 has browsing context, so it cannot be template.content.ownerDocument
    assert_not_equals(template.content.ownerDocument, doc2,
            'Template content owner document should be a new document');
    assert_equals(div.ownerDocument, template.content.ownerDocument,
            'Template content descendants owner document should be ' +
            'template content document owner');

}, 'Changing of template element\'s node document. ' +
    'Test the case when both old and new owner documents of template element ' +
    'have browsing context');

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