<!DOCTYPE html>
<html>
<body>
<script src="../../resources/dump-as-markup.js"></script>
<div id="test0" contenteditable>
<div>hello</div><div>world</div><div>WebKit</div>
</div>
<div id="test1" contenteditable>
<p>hello</p><p>world</p>
</div>
<div id="test2" contenteditable>
<div>hello<pre>world</pre></div>
</div>
<div id="test3" contenteditable>
<h1>hello</h1><div><h2>world</h2><h3>WebKit</h3></div>
</div>
<div id="test4" contenteditable>
<div>hello<p>world</p>webkit</div>
</div>
<div id="test5" contenteditable>
<pre>hello
world
webkit
</pre>
</div>
<div id="test6" contenteditable>
<pre>hello
world
webkit
</pre>
</div>
<div id="test7" contenteditable>
hello<p>world</p><p>webkit</p>
</pre>
</div>
<div id="test8" contenteditable>
<div>hello</div><div>world</div><div>webkit</div>
</div>
<div id="test9" contenteditable>
<ul><li>hello</li><li>world</li></ul>
</div>
<script>

Markup.description('This tests ensures formatBlock do not make multiple elements when formatting multiple paragraphs.')

function testIndentation(containerId, selector, value) {
    var container = document.getElementById(containerId);
    selector(container);
    Markup.dump(container, 'Formatting');
    document.execCommand('FormatBlock', false, value);
    Markup.dump(container, 'by ' + value + ' yields');
}

function selectAll(container) {
    window.getSelection().selectAllChildren(container);
}

function selectorForLines(first, last) {
    return function (container) {
        window.getSelection().setPosition(container, 0);
        for (var i = 0; i < first - 1; i++)
            window.getSelection().modify('move', 'forward', 'line');
        for (var i = 0; i < Math.abs(last - first, 0) + 1; i++)
            window.getSelection().modify('extend', 'forward', 'line');
        window.getSelection().modify('extend', 'backward', 'character');
    }
}

testIndentation('test0', selectAll, 'p');
testIndentation('test1', selectAll, 'blockquote');
testIndentation('test2', selectAll, 'p');
testIndentation('test3', selectAll, 'pre');
testIndentation('test4', selectorForLines(2, 3), 'h1');
testIndentation('test5', selectorForLines(1, 2), 'blockquote');
testIndentation('test6', selectorForLines(2, 3), 'blockquote');
testIndentation('test7', selectorForLines(1, 2), 'pre');
testIndentation('test8', selectorForLines(2, 3), 'pre');
testIndentation('test9', selectAll, 'blockquote');

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