<!DOCTYPE html>
<html>
<head>
<title>HTML Templates: serialize template contents instead of template element</title>
<meta name="author" title="Aleksei Yu. Semenov" href="a.semenov@unipro.ru">
<meta name="assert" content="Template contents should be serialized instead of template element if serializing template element in XHTML document">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#serializing-xhtml-documents">
<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 doc = newXHTMLDocument();
    var template = doc.createElement('template');

    var div = doc.createElement('div');
    div.setAttribute('id', 'div1');
    div.innerHTML = 'some text';
    template.content.appendChild(div);

    assert_equals(template.outerHTML, '<template xmlns="http://www.w3.org/1999/xhtml"><div id="div1">some text</div></template>',
       'template element is serialized incorrectly');

}, 'Template contents should be serialized instead of template element if serializing template element');



test(function () {
    var doc = newXHTMLDocument();
    var template = doc.createElement('template');
    var nestedTemplate = doc.createElement('template');

    template.content.appendChild(nestedTemplate);

    var div = doc.createElement('div');
    div.setAttribute('id', 'div1');
    div.innerHTML = 'some text';
    nestedTemplate.content.appendChild(div);

    assert_equals(template.outerHTML, '<template xmlns="http://www.w3.org/1999/xhtml"><template><div id="div1">some text</div></template></template>',
       'template element is serialized incorrectly');


}, 'Template contents should be serialized instead of template element if serializing template element. '
    + 'Test nested template');


test(function () {
    var doc = newXHTMLDocument();
    var template = doc.createElement('template');

    var div = doc.createElement('div');
    div.setAttribute('id', 'div1');
    div.innerHTML = 'some text';
    template.content.appendChild(div);
    doc.body = doc.createElement('body');
    doc.body.appendChild(template);

    assert_equals(doc.documentElement.outerHTML, '<html xmlns="http://www.w3.org/1999/xhtml"><body><template><div id="div1">some text</div></template></body></html>',
       'template element is serialized incorrectly');

}, 'Template contents should be serialized instead of template element if serializing template element. '
    + 'Test serializing whole document');

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