<html>
<body>
<div id="test"><span id="span1">foo<span id="span2">bar</span></span><span id="span3">baz</span></div>
<div id="console"></div>
<script>
var s = window.getSelection();
var testDiv = document.getElementById("test");
var span1 = document.getElementById("span1");
var span2 = document.getElementById("span2");
var span3 = document.getElementById("span3");

function log(str) {
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(str));
    document.getElementById("console").appendChild(li);
}

function shouldBe(expr, expected) {
    var actual = eval(expr);
    if (actual != expected)
        log("Failure: " + expr + " should be " + expected + ", was " + actual + ".");
    else
        log("Success: " + expr + " is " + expected + ".");
}

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

var r = document.createRange();


// delete a collapsed selection
r.setStart(span2.firstChild, 1);
r.setEnd(span2.firstChild, 1);
s.addRange(r);

s.deleteFromDocument()
shouldBe('span1.textContent', 'fooar');
try {
  s.deleteFromDocument()
  shouldBe('span1.textContent', 'foar');
} catch (ex) {
  log(ex);
}


// try to delete a collapsed selection at the start
r.setStart(span1.firstChild, 0);
r.setEnd(span1.firstChild, 0);
s.removeAllRanges();
s.addRange(r);

try {
  s.deleteFromDocument()
  shouldBe('span1.textContent', 'foar');
} catch (ex) {
  log(ex);
}


// delete whole contents
r.setStart(span2.firstChild, 0);
r.setEnd(span2.firstChild, 2);
s.removeAllRanges();
s.addRange(r);

s.deleteFromDocument()
shouldBe('span1.firstChild.nextSibling.id', 'span2');
shouldBe('span1.firstChild.nextSibling.firstChild.nodeValue', '');


// partially delete two nodes
r.setStart(span1.firstChild, 1);
r.setEnd(span3.firstChild, 2);
s.removeAllRanges();
s.addRange(r);

s.deleteFromDocument()
shouldBe('test.textContent', 'fz');

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