<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: The template contents owner document type is HTML document</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="The template contents owner document type is HTML document, if template is declared in HTML document">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#definitions">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src='/html/resources/common.js'></script>
<link rel="stylesheet" href="/resources/testharness.css">
</head>
<body>
<div id="log"></div>
<script type="text/javascript">

testInIFrame('../resources/template-contents.html', function(context) {
    var doc = context.iframes[0].contentDocument;
    var template = doc.querySelector('template');
    var content_owner = template.content.ownerDocument;

    assert_class_string(content_owner, 'Document',
            'Template content owner should be a document');
    assert_equals(content_owner.createElement('DIV').localName, 'div',
            'Template content owner should be an HTML document');

}, 'The template contents owner document type is HTML document ' +
    '(case when document has browsing context and the template ' +
    'is created by HTML parser)');


testInIFrame('../resources/template-contents.html', function(context) {
    var doc = context.iframes[0].contentDocument;
    var template = doc.createElement('template');
    var content_owner = template.content.ownerDocument;
    var div = doc.createElement('DIV');
    template.appendChild(div);

    doc.body.appendChild(template);

    assert_class_string(content_owner, 'Document',
            'Template content owner should be a document');
    assert_equals(div.localName, 'div',
            'Template content owner should be an HTML document');

}, 'The template contents owner document type is HTML document ' +
    '(case when document has browsing context and the template ' +
    'is created by createElement())');


test(function() {
    var doc = newHTMLDocument();
    var template = doc.createElement('template');
    var content_owner = template.content.ownerDocument;
    var div = doc.createElement('DIV');
    template.appendChild(div);

    doc.body.appendChild(template);

    assert_class_string(content_owner, 'Document',
            'Template content owner should be a document');
    assert_equals(div.localName, 'div',
            'Template content owner should be an HTML document');

}, 'The template contents owner document type is HTML document ' +
    '(case when document has no browsing context and the template is created ' +
    'by createElement())');

test(function() {
    var doc = newHTMLDocument();
    doc.body.innerHTML = '<template><div>Hello!</div></template>';
    var template = doc.querySelector('template');
    var content_owner = template.content.ownerDocument;

    assert_class_string(content_owner, 'Document',
            'Template content owner should be a document');
    assert_equals(content_owner.createElement('DIV').localName, 'div',
            'Template content owner should be an HTML document');

}, 'The template contents owner document type is HTML document ' +
    '(case when document has no browsing context and the template is created via innerHTML)');
</script>
</body>
</html>
