<!DOCTYPE html>
<html>
<body>
<div id="test" contenteditable><b style="font-style: italic;">world</b></div>
<pre id="console">
</pre>
<script>

if (window.testRunner)
    testRunner.dumpAsText();

var test = document.getElementById('test');
window.getSelection().selectAllChildren(test);

var console = document.getElementById('console');
var initialValue = test.innerHTML;
var failed = false;
console.appendChild(document.createTextNode('initial:' + test.innerHTML + '\n'));
document.execCommand('bold', false, null);
console.appendChild(document.createTextNode('after removing bold:' + test.innerHTML + '\n'));
document.execCommand('italic', false, null);
console.appendChild(document.createTextNode('after removing italic:' + test.innerHTML + '\n'));
var finalValue = test.innerHTML;

document.execCommand('undo', false, null);
document.execCommand('undo', false, null);
console.appendChild(document.createTextNode('after undo:' + test.innerHTML + '\n'));
if (test.innerHTML != initialValue) {
    console.appendChild(document.createTextNode('but expected ' + initialValue + '\n'));
    failed = true;
}
document.execCommand('redo', false, null);
document.execCommand('redo', false, null);
console.appendChild(document.createTextNode('after redo:' + test.innerHTML + '\n'));
if (test.innerHTML != finalValue) {
    console.appendChild(document.createTextNode('but expected ' + finalValue + '\n'));
    failed = true;
}

test.innerHTML = '';

console.appendChild(document.createTextNode(failed ? 'FAIL\n' : 'PASS\n'));

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