<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: In body insertion mode: Template contains a start tag whose tag name is body</title>
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="If the stack of open elements has a template element in html scope then ignore <body> the token. (fragment or template contents case)">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#in-body-addition">
<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">


test(function () {
    var doc = newHTMLDocument();

    doc.body.innerHTML = '<template id="tmpl"><body></template>';

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

    assert_equals(template.content.childNodes.length, 0, 'Element must be ignored');

}, 'In body insertion mode: Template contains a start tag whose tag name is body.'
    + 'Test <body> tag only');



test(function () {
    var doc = newHTMLDocument();

    doc.body.innerHTML = '<template id="tmpl"><body>Body text content</body></template>';

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

    assert_equals(template.content.querySelector('body'), null,
            '<body> element must be ignored');
    assert_equals(template.content.childNodes.length, 1, 'Text shouldn\'t be ignored');
    assert_equals(template.content.firstChild.nodeType, Node.TEXT_NODE,
            'Text shouldn\'t be ignored');

}, 'In body insertion mode: Template contains a start tag whose tag name is body. '
    + 'Test <body> tag containing some text');



test(function () {
    var doc = newHTMLDocument();

    doc.body.innerHTML = '<template id="tmpl"><body>'
        + '<div id="div1">DIV 1</div>'
        + '<div id="div2">DIV 2</div>'
        + '</body></template>';

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

    assert_equals(template.content.querySelector('body'), null,
            '<body> element must be ignored');
    assert_equals(template.content.childNodes.length, 2,
            'Only body tag should be ignored');
    assert_not_equals(template.content.querySelector('#div1'), null,
            'Children of <body tag shouldn\'t be ignored');
    assert_not_equals(template.content.querySelector('#div2'), null,
            'Children of <body tag shouldn\'t be ignored');

}, 'In body insertion mode: Template contains a start tag whose tag name is body. '
    + 'Test <body> tag containing some other elements');



test(function () {
    var doc = newHTMLDocument();

    doc.body.innerHTML = '<template id="tmpl1"><template id="tmpl2"><body>'
        + '<div id="div1">DIV 1</div>'
        + '<div id="div2">DIV 2</div>'
        + '</body></template></template>';

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

    assert_equals(template.content.querySelector('body'), null,
            '<body> element must be ignored');
    assert_equals(template.content.childNodes.length, 2,
            'Only body tag should be ignored');
    assert_not_equals(template.content.querySelector('#div1'), null,
            'Children of <body tag shouldn\'t be ignored');
    assert_not_equals(template.content.querySelector('#div2'), null,
            'Children of <body tag shouldn\'t be ignored');

}, 'In body insertion mode: Template contains a start tag whose tag name is body. '
    + 'Test nested template tag containing <body> tag with some other elements');

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