<html>
    <head>
        <script>
        function test()
        {
            if (window.layoutTestController) {
                layoutTestController.dumpAsText();
                layoutTestController.waitUntilDone();
            }

            setTimeout(test2, 0);
        }
        
        function test2()
        {
            var select = document.getElementById("listbox");
            while (select.hasChildNodes())
                select.removeChild(select.firstChild);

            var option = document.createElement("option");
            option.innerText = "Test Passed";
            select.appendChild(option);
        
            var scrollTop = select.scrollTop;
            if (scrollTop == 0)
                log("Test Passed");
            else
                log("Test Failed.  scrollTop = " + scrollTop + " even though there is only one option in the listbox");
            
            if (window.layoutTestController)
                layoutTestController.notifyDone();
        }
        
        function log(msg)
        {
            document.getElementById('console').appendChild(document.createTextNode(msg + '\n'));
        }
        </script>
    </head>
    <body onload="test()">
        <a href="http://bugs.webkit.org/show_bug.cgi?id=15252">Bug 15252: &lt;select multiple&gt; doesn't scroll to top when old options are removed and new ones are added, leaving listbox empty-looking</a>

        <p>When the test runs, all the &lt;option&gt;s in the select are removed and replaced with 1 new option. If the bug is present, the select will appear empty until you scroll up with the mousewheel.</p>

        <select id="listbox" size="4">
            <option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
            <option>5</option>
            <option selected>6</option>
        </select>
        <pre id="console"></pre>
    </body>
</html>
