blob: f13447594207ce06d2c4d5a0cf1050b62acd963c [file] [log] [blame]
<!DOCTYPE html>
<html>
<head><title></title></head>
<body onload="test()">
<select id="single">
<option>0</option>
<option>1</option>
<option>2</option>
</select>
<select id="sized" size="3">
<option>0</option>
<option>1</option>
<option>2</option>
</select>
<select id="multiple-1" multiple>
<option>0</option>
<option>1</option>
<option>2</option>
</select>
<select id="multiple-2" multiple>
<option>0</option>
<option>1</option>
<option>2</option>
</select>
<select id="multiple-3" multiple>
<optgroup>
<option>0</option>
<option>1</option>
</optgroup>
<optgroup>
<option>2</option>
<option>3</option>
</optgroup>
</select>
<pre id="console"></pre>
<script>
// -----------
// Helpers
// -----------
function log(msg) {
document.getElementById("console").appendChild(document.createTextNode(msg + "\n"));
}
function onChangeEventHandler(event) {
log("** change event fired **");
}
function assertSelectedIndex(elem, index) {
if (elem.selectedIndex === index)
log("PASS - expected index was selected.");
else
log("FAIL - expected index was " + elem.selected + " but was expected to be " + index + ".");
}
function assertSelectedIndexes(elem, flags) {
var allGood = true;
var options = elem.options;
for (var i=0; i<options.length; ++i) {
if (options[i].selected !== flags[i]) {
log("FAIL - option " + i + " was not what we expected.");
allGood = false;
}
}
if (allGood)
log("PASS - selected options were what we expected.")
}
// ------------
// The Test
// ------------
function test() {
if (!window.testRunner) {
log("This test can only be run under DumpRenderTree.");
return;
}
testRunner.dumpAsText();
log("This tests the Private Objective-C DOM HTML Bindings API for selecting indexes of a <select> that also activate the \"change\" event.");
wrapper("Select a single index in a normal <select>.", "single", testSingle);
wrapper("Select a single index in a sized <select>.", "sized", testSized);
wrapper("Select multiple indexes, in a <select multiple>.", "multiple-1", testMultiple1);
wrapper("Select multiple indexes, with multi-select on, in a <select multiple>.", "multiple-2", testMultiple2);
wrapper("Select multiple indexes, with multi-select on, in a <select multiple> with <optgroup>s.", "multiple-3", testMultiple3);
}
function wrapper(msg, id, func) {
log("");
log(msg);
var elem = document.getElementById(id);
elem.addEventListener("change", onChangeEventHandler, false);
func(elem);
}
function testSingle(elem) {
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 1, false);
assertSelectedIndex(elem, 1);
}
function testSized(elem) {
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 1, false);
assertSelectedIndex(elem, 1);
}
function testMultiple1(elem) {
// Triggers selecting index 1 then 2, expecting the result to be just index 2 selected.
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 1, false);
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 2, false);
assertSelectedIndexes(elem, [false, false, true]);
}
function testMultiple2(elem) {
// Triggers selecting index 1 then 2, expecting the result to be both are selected.
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 1, true);
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 2, true);
assertSelectedIndexes(elem, [false, true, true]);
}
function testMultiple3(elem) {
// Triggers selecting index 1 then 2, expecting the result to be both are selected.
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 1, true);
objCController.setSelectElementSelectedIndexAllowingMultiple(elem, 2, true);
assertSelectedIndexes(elem, [false, true, true, false]);
}
</script>
</body>
</html>