<!DOCTYPE html>

<html>
<head>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }
    
        async function runTest()
        {
            var output = '';

            function select(element) {
                const range = document.createRange();
                
                range.setStartBefore(element);
                range.setEndAfter(element);
                
                const selection = window.getSelection();
                
                selection.removeAllRanges();
                selection.addRange(range);
            }

            select(document.querySelector('thead tr'));
            if (document.getSelection().toString() == "A\tB\tC\tD\n")
                output += 'PASS: Correctly Selects row in thead';
            else
                output += 'FAIL: Incorrect Selection: ' + document.getSelection().toString();
            output += '<br>';

            const lastHeadCell = [ ...document.querySelectorAll('thead th') ].pop();
            select(lastHeadCell);
            if (document.getSelection().toString() == "D\n")
                output += 'PASS: Correctly Selects last cell in thead';
            else
                output += 'FAIL: Incorrect Selection: ' + document.getSelection().toString();
            output += '<br>';

            select(document.querySelector('tbody tr'));
            if (document.getSelection().toString() == "1A\t1B\t1C\t1D\n")
                output += 'PASS: Correctly Selects row in tbody';
            else
                output += 'FAIL: Incorrect Selection: ' + document.getSelection().toString();
            output += '<br>';

            const lastBodyCell = [ ...document.querySelectorAll('tbody td') ].pop();
            select(lastBodyCell);
            if (document.getSelection().toString() == "5D\n")
                output += 'PASS: Correctly Selects last cell in tbody';
            else
                output += 'FAIL: Incorrect Selection: ' + document.getSelection().toString();
            output += '<br>';
            
            document.getElementById('target').innerHTML = output;
            testRunner.notifyDone();
        }

        window.addEventListener('load', runTest, false);
    </script>
        <style>
        #target {
            height: 50px;
            width: 300px;
            background-color: silver;
            font-family: monospace;
            font-size: 18px;
        }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <div contenteditable>
    <table border="1">
        <thead>
            <tr>
                <th scope="col">A</th>
                <th scope="col">B</th>
                <th scope="col">C</th>
                <th scope="col">D</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th scope="row">1A</th>
                <td>1B</td>
                <td>1C</td>
                <td>1D</td>
            </tr>
            <tr>
                <th scope="row">2A</th>
                <td>2B</td>
                <td>2C</td>
                <td>2D</td>
            </tr>
            <tr>
                <th scope="row">3A</th>
                <td>3B</td>
                <td>3C</td>
                <td>3D</td>
            </tr>
            <tr>
                <th scope="row">4A</th>
                <td>4B</td>
                <td>4C</td>
                <td>4D</td>
            </tr>
            <tr>
                <th scope="row">5A</th>
                <td>5B</td>
                <td>5C</td>
                <td>5D</td>
            </tr>
        </tbody>
    </table>
</div>
    <div id="target">
    </div>
</body>
</html>
