4 <title>HTML Templates: ownerDocument property of the element in template</title>
5 <meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
6 <meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
7 <meta name="assert" content="ownerDocument property of the element appended to template must be set to the template contents owner of the ownerDocument of the template element">
8 <link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#creating-an-element-for-a-token">
9 <script src="../../../../../resources/testharness.js"></script>
10 <script src="../../../../../resources/testharnessreport.js"></script>
11 <script src='../../testcommon.js'></script>
12 <link rel="stylesheet" href="../../../../../resources/testharness.css">
16 <script type="text/javascript">
20 var doc = newHTMLDocument();
21 doc.body.innerHTML = '<div><template id="tmpl1"><div id="div">DIV</div></template></div>';
23 var template = doc.querySelector('#tmpl1');
25 var div = template.content.querySelector('#div');
27 assert_equals(div.ownerDocument, template.content.ownerDocument,
28 'Wrong ownerDocument of the element in template');
30 }, 'Test ownerDocument property of the element in a template. '
31 + 'Current DOCUMENT has no browsing context. Test template element inside the div');
36 var doc = newHTMLDocument();
37 doc.body.innerHTML = '<template id="tmpl1"><div id="div">DIV</div></template>';
39 var template = doc.querySelector('#tmpl1');
41 var div = template.content.querySelector('#div');
43 assert_equals(div.ownerDocument, template.content.ownerDocument,
44 'Wrong ownerDocument of the element in template');
46 }, 'Test ownerDocument property of the element in a template. '
47 + 'Current DOCUMENT has no browsing context. Test template element '
48 + 'in the root of the body');
53 var doc = newHTMLDocument();
54 doc.head.innerHTML = '<template id="tmpl1"><div id="div">DIV</div></template>';
56 var template = doc.querySelector('#tmpl1');
58 var div = template.content.querySelector('#div');
60 assert_equals(div.ownerDocument, template.content.ownerDocument,
61 'Wrong ownerDocument of the element in template');
63 }, 'Test ownerDocument property of the element in a template. '
64 + 'Current DOCUMENT has no browsing context. Test template element '
65 + 'in the root of the head');
70 var doc = newHTMLDocument();
73 doc.write('<frameset><template id="tmpl1"><div id="div">DIV</div></template></frameset>');
76 var template = doc.querySelector('#tmpl1');
78 var div = template.content.querySelector('#div');
80 assert_equals(div.ownerDocument, template.content.ownerDocument,
81 'Wrong ownerDocument of the element in template');
83 }, 'Test ownerDocument property of the element in a template. '
84 + 'Current DOCUMENT has no browsing context. Test template element '
85 + 'in the root of the frameset');
90 var doc = newHTMLDocument();
91 doc.body.innerHTML = '<template id="tmpl1">'
92 + '<template id="tmpl2"><div id="div">DIV</div></template></template>';
94 var template = doc.querySelector('#tmpl1');
96 var nestedTemplate = template.content.querySelector('#tmpl2');
98 assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument,
99 'Wrong nested template owner document');
101 var div = nestedTemplate.content.querySelector('#div');
103 assert_equals(div.ownerDocument, nestedTemplate.content.ownerDocument,
104 'Wrong div ownerDocument');
106 }, 'Test ownerDocument property of the element in a nested template');
110 testInIFrame('../../resources/template-contents.html', function(context) {
111 var doc = context.iframes[0].contentDocument;
113 var template = doc.querySelector('template');
115 var div = template.content.querySelector('div');
117 assert_equals(div.ownerDocument, template.content.ownerDocument,
118 'Wrong ownerDocument of the element in template');
120 }, 'Test ownerDocument property of the element in a template. '
121 + 'Load HTML document from a file, current DOCUMENT has browsing context');
125 testInIFrame('../../resources/template-contents-nested.html', function(context) {
126 var doc = context.iframes[0].contentDocument;
128 var template = doc.querySelector('template');
130 var nestedTemplate = template.content.querySelector('template');
132 assert_equals(nestedTemplate.ownerDocument, template.content.ownerDocument,
133 'Wrong nested template owner document');
135 var div = nestedTemplate.content.querySelector('div');
137 assert_equals(div.ownerDocument, nestedTemplate.content.ownerDocument,
138 'Wrong div ownerDocument');
140 }, 'Test ownerDocument property of the element in a nested template. '
141 + 'Load HTML document from a file, current DOCUMENT has browsing context');
145 testInIFrame('../../resources/two-templates.html', function(context) {
146 var doc = context.iframes[0].contentDocument;
148 var template1 = doc.querySelector('#template1');
149 var div1 = template1.content.querySelector('div');
150 var template2 = doc.querySelector('#template2');
151 var div2 = template2.content.querySelector('div');
153 assert_equals(div1.ownerDocument, template1.content.ownerDocument,
154 'Wrong ownerDocument of the element in template');
155 assert_equals(div2.ownerDocument, template2.content.ownerDocument,
156 'Wrong ownerDocument of the element in template');
157 assert_equals(div1.ownerDocument, div2.ownerDocument,
158 'Different elements in the same document should share the same template contents owner');
160 }, 'Test ownerDocument property of two elements in a template. '
161 + 'Load HTML document from a file, current DOCUMENT has browsing context');
166 HTML5_ELEMENTS.forEach(function(value) {
167 if (value !== 'body' && value !== 'html' && value !== 'head' && value !== 'frameset') {
169 var doc = newHTMLDocument();
171 if (isVoidElement(value)) {
172 doc.body.innerHTML = '<template><' + value + '/></template>';
174 doc.body.innerHTML = '<template><' + value + '></' + value + '></template>';
177 var template = doc.querySelector('template');
178 var element = template.content.querySelector(value);
180 doc.body.appendChild(template);
183 'Test ownerDocument for the element ' + value + ' in the template',
184 element.ownerDocument,
185 template.content.ownerDocument
189 generate_tests(assert_equals, parameters,
190 'Test ownerDocument property of all HTML5 elements in a template. '
191 + 'Current DOCUMENT has no browsing context.');
193 var context = newContext();
198 HTML5_ELEMENTS.forEach(function(value) {
200 if (value !== 'body' && value !== 'html' && value !== 'head' && value !== 'frameset') {
202 var doc = newRenderedHTMLDocument(context);
204 if (isVoidElement(value)) {
205 doc.body.innerHTML = '<template><' + value + '/></template>';
207 doc.body.innerHTML = '<template><' + value + '></' + value + '></template>';
210 var template = doc.querySelector('template');
211 var element = template.content.querySelector(value);
213 doc.body.appendChild(template);
216 'Test ownerDocument for the element ' + value + ' in the template. '
217 + 'Document has browsing context',
218 element.ownerDocument,
219 template.content.ownerDocument
223 generate_tests(assert_equals, parameters,
224 'Test ownerDocument property of all HTML5 elements in a template. '
225 + 'Current DOCUMENT has browsing context.');
229 cleanContext(context);