blob: e7645874d1281d65f41d9d92c13e53e39b01cb24 [file] [log] [blame]
<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>