<html>
<body>
<script src="../../resources/dump-as-markup.js"></script>
<div id="test" contenteditable></div>

<script type="text/javascript">

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

function printState(command, description) {
    var underlineState = document.queryCommandState('underline');
    var strikeThroughState = document.queryCommandState('strikeThrough');
    var state = 'no text decorations';
    if (underlineState && strikeThroughState)
        state = 'underline and strike';
    else if (underlineState)
        state = 'underline';
    else (strikeThroughState)
        state = 'strike';
    Markup.dump(test, 'Has ' + state + (description ? " " + description : "") + " in");
}

function runTextDecorationTest(command) {
    printState(command, 'before adding ' + command);
    document.execCommand(command, false, null);
    printState(command, 'after adding ' + command);
    document.execCommand("InsertText", false, 'x');
    document.execCommand("InsertText", false, 'x');
    printState(command);
    window.getSelection().modify('move', 'backward', 'character');
    printState(command);

    document.execCommand(command, false, null);
    printState(command, 'after removing ' + command);
    document.execCommand("InsertText", false, 'x');
    printState(command);

    window.getSelection().modify('move', 'forward', 'line');
    printState(command, 'before removing ' + command);
    document.execCommand(command, false, null);
    printState(command, 'after removing ' + command);
    document.execCommand("InsertText", false, 'x');
    printState(command);
}

window.getSelection().setPosition(test, 0);
runTextDecorationTest('underline');
runTextDecorationTest('strikeThrough');

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