This is a test for window.find().
<br><br>
Four score and seven years ago our fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.
<br><br>
Now we are engaged in a great civil war, testing whether that nation, or any nation so conceived and so dedicated, can long endure. We are met on a great battle-field of that war. We have come to dedicate a portion of that field, as a final resting place for those who here gave their lives that that nation might live. It is altogether fitting and proper that we should do this.
<ul id="console"></ul>
<script>
function log(msg) {
    var console = document.getElementById("console");
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(msg));
    console.appendChild(li);
}

function assert(expected, actual, error)
{
    if (expected != actual)
        log("Error: " + error);
}

function runTest() {
    assert(window.find("now we are"), true, "'now we are' wasn't found");
        assert(window.find(), true, "'now we are' wasn't found");
}
if (window.testRunner) {
    window.testRunner.dumpEditingCallbacks();
    window.testRunner.dumpAsText();
}
window.setTimeout(runTest, 100);
</script>
