Index: LayoutTests/imported/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html |
diff --git a/LayoutTests/imported/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html b/LayoutTests/imported/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..918298a2752fd29b19c2d231979c0f4ba47b6fde |
--- /dev/null |
+++ b/LayoutTests/imported/web-platform-tests/html/semantics/scripting-1/the-template-element/template-element/node-document-changes.html |
@@ -0,0 +1,200 @@ |
+<!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='../testcommon.js'></script> |
+<link rel="stylesheet" href="../../../../../../../resources/testharness.css"> |
+</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> |