<p>This tests to see that Range::compareBoundaryPoints throws a WrongDocumentError exception if the two ranges are in different documents, or if one is detached.</p>
<div id="div" contenteditable="true">dog<a href="http://www.google.com/">food</a></div>
<ul id="console"></ul>

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

if (window.testRunner)
    window.testRunner.dumpAsText();
    
var div = document.getElementById("div");
var text = div.firstChild;
var link = div.lastChild;
div.focus();    

text.parentNode.removeChild(text);

var r1 = document.createRange();
r1.setStart(link, 0);
r1.setEnd(link, 0);

var r2 = document.createRange();
r2.setStart(text, 0);
r2.setEnd(text, 0);

try {
    var compare = r1.compareBoundaryPoints(Range.START_TO_START, r2);
    log("Error.  compareBoundaryPoints should have thrown an exception.");
} catch (e) {
    var expected = "WrongDocumentError: The object is in the wrong document.";
    if (e != expected)
        log("Error.  Exception thrown should have been: " + expected);
}
</script>
