<!DOCTYPE html>
<html>
<body>
<script src="../../resources/dump-as-markup.js"></script>
<div id="test0" contenteditable>
<pre>
<ul><li>hello</li></ul></pre>
</div>

<div id="test1" contenteditable>
<pre><ul><li>hello
world</li>
</ul></pre>
</div>

<div id="test2" contenteditable>
<ul><li><pre>
hello
world
webkit
</pre></li></ul>
</div>

<div id="test3" contenteditable>
<ul><li><pre>
hello
world
webkit
</pre></li></ul>
</div>

<div id="test4" contenteditable>
<ul><li><pre>
hello
world
webkit
</pre></li></ul>
</div>

<div id="test5" contenteditable>
<ul><li><pre>
hello
world
webkit
</pre></li></ul>
</div>

<script>

function testIndentation(containerId, selector) {
    var container = document.getElementById(containerId);
    selector(container);
    Markup.dump(container, 'Indenting');
    document.execCommand('indent', false, null);
    Markup.dump(container, 'yields');
}

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

function selectorForLineN(line) {
    return function (container) {
        window.getSelection().setPosition(container, 0);
        for (var i = 0; i < line - 1; i++)
            window.getSelection().modify('move', 'forward', 'line');
        window.getSelection().modify('extend', 'forward', 'line');
        // Avoid including \n at the end of line.
        window.getSelection().modify('extend', 'backward', 'character');
    }
}

testIndentation('test0', selectAll);
testIndentation('test1', selectAll);
testIndentation('test2', selectAll);
testIndentation('test3', selectorForLineN(1));
testIndentation('test4', selectorForLineN(2));
testIndentation('test5', selectorForLineN(3));

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