<!DOCTYPE HTML>
<html>
    <head>
        <title id="desc">HTML5 Selection: Set selectionStart and selectionEnd on a text field</title>
        <script type="text/javascript">  
            var testPassed = true;
            
            function checkDefaultSelectionAttributes()
            {
                var selection = window.getSelection();
                if (null != selection.anchorNode)
                {
                    testPassed = false;
                }
                if (0 != selection.anchorOffset)
                {
                    testPassed = false;
                }
                if (null != selection.focusNode)
                {
                    testPassed = false;
                }
                if (0 != selection.focusOffset)
                {
                    testPassed = false;
                }
                if (!selection.isCollapsed)
                {
                    testPassed = false;
                }
                if (0 != selection.rangeCount)
                {
                    testPassed = false;
                }  
            }
            
            function RunTest()
            {
                try
                {
                    var input1 = document.getElementById("input1");
                    var expectedResult = "text";
                    
                    input1.selectionStart = 5;
                    input1.selectionEnd = 9;
                    
                    checkDefaultSelectionAttributes();
                    
                    var selectionText = input1.value.substring(input1.selectionStart, input1.selectionEnd);
                    if (expectedResult != selectionText)
                    {
                        testPassed = false;
                    }
                    
                    if (testPassed)
                    {
                        document.getElementById("testresult").firstChild.data = "PASS";
                    }
                }
                catch (ex)
                {
                    document.getElementById("testresult").firstChild.data = "FAIL";
                }
            }
        </script>
    </head>
    <body onload="RunTest();">
        <input style="WIDTH: 500px" id="input1" value="Some text in an input control" type="text" /> 
        <p>Select some text in the input element by setting selectionStart and selectionEnd</p>
        <p>Test passes if the word "PASS" appears below.</p>
        <div>Test result: </div>
        <div id="testresult">FAIL</div>
    </body>
</html>
