<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description('Various tests for the header element.');

var testParent = document.createElement('div');
document.body.appendChild(testParent);

debug('&lt;header> closes &lt;p>:');
testParent.innerHTML = '<p>Test that <header id="header1">a header element</header> closes &lt;p>.</p>';
var header1 = document.getElementById('header1');
shouldBeFalse('header1.parentNode.nodeName == "p"');

debug('&lt;p> does not close &lt;header>:');
testParent.innerHTML = '<header>Test that <p id="p1">a p element</p> does not close a header element.</header>';
var p1 = document.getElementById('p1');
shouldBe('p1.parentNode.nodeName', '"HEADER"');

debug('&lt;header> can be nested inside &lt;header> or &lt;footer>:');
testParent.innerHTML = '<header id="header2">Test that <header id="header3">a header element</header> can be nested inside another header element.</header>';
var header3 = document.getElementById('header3');
shouldBe('header3.parentNode.id', '"header2"');
testParent.innerHTML = '<footer id="footer1">Test that <header id="header5">a header element</header> can be nested inside a footer element.</footer>';
var header5 = document.getElementById('header5');
shouldBe('header5.parentNode.id', '"footer1"');

debug('Residual style:');
testParent.innerHTML = '<b><header id="header4">This text should be bold.</header> <span id="span1">This is also bold.</span></b>';
function getWeight(id) {
    return document.defaultView.getComputedStyle(document.getElementById(id), null).getPropertyValue('font-weight');
}
shouldBe('getWeight("header4")', '"700"');
shouldBe('getWeight("span1")', '"700"');
document.body.removeChild(testParent);

debug('FormatBlock:');
var editable = document.createElement('div');
editable.innerHTML = '[<span id="span2">The text will be a child of &lt;header>.</span>]';
document.body.appendChild(editable);
editable.contentEditable = true;
var selection = window.getSelection();
selection.selectAllChildren(editable);
document.execCommand('FormatBlock', false, 'header');
selection.collapse(null);
shouldBe('document.getElementById("span2").parentNode.nodeName', '"HEADER"');
document.body.removeChild(editable);

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
