<!DOCTYPE html>
<html>
<head>
<style type="text/css">
 div > * {
     display: block;
 }
</style>
</head>
<body>
<div id="test" contenteditable><hr><datagrid></datagrid><object></object></div>
<script src="../../resources/dump-as-markup.js"></script>
<script>

var test = document.getElementById('test');
test.focus();

Markup.description('This test ensures WebKit does not ignore the content of hr, datagrid, and object with child nodes.')

var text = 'hello world WebKit';

for (var i = 0; i < test.childNodes.length; i++) {
    var textNode = document.createTextNode(text);
    test.childNodes[i].appendChild(textNode);
    window.getSelection().setBaseAndExtent(textNode, 6, textNode, 11);
    document.execCommand('bold', false, null);
}

Markup.dump(test, '"world" and only "world" should be bolded in each element below');

window.getSelection().setPosition(test, 0);

for (var i = 0; i < (text.length + 1) * test.childNodes.length - 1; i++)
    window.getSelection().modify('extend', 'forward', 'character');

var range = window.getSelection().getRangeAt(0).cloneContents();

Markup.dump(range, 'The result below should be identical to the result above');

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