<!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">
<link rel="help" href="http://www.w3.org/TR/2013/WD-html-templates-20130214/#serializing-html-templates">
<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 = newHTMLDocument();
    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><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 = newHTMLDocument();
    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><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 = newHTMLDocument();
    var template = doc.createElement('template');

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

    assert_equals(doc.documentElement.outerHTML, '<html><head><title>Test Document</title></head><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>
