<html>
<head>
<script>
function test () {
    var testField = document.getElementById('t1');
    var results = document.getElementById('result');
    
    testSelectionRange(1, 0, 0, 0, 0, testField, results);
    testSelectionEnd(2, 17, 0, 17, testField, results);
    testSelectionStart(3, 1, 1, 17, testField, results);
    testSelectionRange(4, 10, 3, 3, 3, testField, results);
    testSelectionEnd(5, 2, 2, 2, testField, results);
    testSelectionRange(6, 5, 4, 4, 4, testField, results);
    testSelectionRange(7, -5, -4, 20, 20, testField, results);
    testSelectionRange(8, -5, 80, 20, 20, testField, results);
    testSelectionRange(9, 3, 12, 3, 12, testField, results);

}

function testSelectionRange (testNumber, start, end, expectedStart, expectedEnd, tf, res)
{
    tf.focus();
    tf.setSelectionRange(start, end);
    res.innerHTML = res.innerHTML + "<br>Test " + testNumber + ": setSelectionRange(" + start + ", " + end + ")";            
    if (tf.selectionStart == expectedStart && tf.selectionEnd == expectedEnd)
        res.innerHTML = res.innerHTML + "<br>Passed.<br>";
    else
        res.innerHTML = res.innerHTML + "<br>Failed.<br>";
}

function testSelectionStart (testNumber, start, expectedStart, expectedEnd, tf, res)
{
    tf.selectionStart = start;
    res.innerHTML = res.innerHTML + "<br>Test " + testNumber + ": selectionStart = " + start;       
    if (tf.selectionStart == expectedStart && tf.selectionEnd == expectedEnd)
        res.innerHTML = res.innerHTML + "<br>Passed.<br>";
    else
        res.innerHTML = res.innerHTML + "<br>Failed.<br>";
}

function testSelectionEnd (testNumber, end, expectedStart, expectedEnd, tf, res)
{
    tf.selectionEnd = end;
    res.innerHTML = res.innerHTML + "<br>Test " + testNumber + ": selectionEnd = " + end;       
    if (tf.selectionStart == expectedStart && tf.selectionEnd == expectedEnd)
        res.innerHTML = res.innerHTML + "<br>Passed.<br>";
    else
        res.innerHTML = res.innerHTML + "<br>Failed.<br>";
}

</script>
</head>
<body onload="test()">
This tests the selection methods on the new text field.
<p>
<input type="text" id="t1" style="-khtml-appearance:textfield" value="123456789 ABCDEFGHIJ"></input>
<div id="result"></div>
</p>
</body>
</html>
