<html>
    <head>
        <title></title>
        <script type="text/javascript">
            var changeCount = new Array(4);
            changeCount[1] = changeCount[2] = changeCount[3] = 0;

            function test()
            {
                if (!window.eventSender)
                    return;

                testRunner.dumpAsText();

                var popup = document.getElementById("switcher1");
                popup.focus();

                popup = document.getElementById("switcher2");
                popup.focus();

                eventSender.keyDown("t", null);
                eventSender.keyDown("\r", null);

                var popup = document.getElementById("switcher3");
                popup.focus();

                check();
           }

           function check() {
                setTimeout("document.getElementById('switcher3').selectedIndex = 1;", 0);

                var popup = document.getElementById("switcher2");
                popup.focus();

                var result = document.getElementById("result");
                result.innerHTML = "";
                if (changeCount[1] != 0) {
                    result.innerHTML += "<br/>FAILURE: onchange(1) called " + changeCount[1] + " times.";
                } 
                if (changeCount[2] != 1) {
                    result.innerHTML += "<br/>FAILURE: onchange(2) called " + changeCount[2] + " times.";
                } 
                if (changeCount[3] != 0) {
                    result.innerHTML += "<br/>FAILURE: onchange(3) called " + changeCount[3] + " times.";
                } 
                if (result.innerHTML == "") result.innerHTML = "SUCCESS";

            }

            function changed(select)
            {
                changeCount[select]++;
            }
        </script>
    </head>
    <body onload="test()">
        <p>
            Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=23721">http://bugs.webkit.org/show_bug.cgi?id=23721</a>
            Changing dropdown's selectedIndex within onchange handler fires another onchange</i>.
        </p>
        <p id="result">
          To test interactively: focus on the first select (don't change it).<br/>
          Change the second select to "two"<br/>
          Focus on the third, then click <a href="#" onclick="check(); return false;">here</a>.  
        </p>
        This select changes on focus: should not fire onchange.
        <select name="switcher1" id="switcher1" onfocus="this.selectedIndex = 1;" onchange="changed(1)">
            <option value="one">One</option>
            <option value="two">Two</option>
        </select>
        <hr/>
        This select changes on change: should only fire onchange once.
        <select name="switcher2" id="switcher2" onchange="changed(2); if (this.selectedIndex == 1) this.selectedIndex = 2;">
            <option value="one">One</option>
            <option value="two">Two</option>
            <option value="three">Three</option>
        </select>
        <hr/>
        This select is changed by a timeout in the test script.  It should not fire onchange.
        <select name="switcher3" id="switcher3" onchange="changed(3)">
            <option value="one">One</option>
            <option value="two">Two</option>
        </select>        
    </body>
</html>
