304 lines
13 KiB
HTML
304 lines
13 KiB
HTML
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
<p>This test verifies that the Home/End/PageUp/PageDown keys work correctly for <select> elements.
|
|
Since it requires <CODE>eventSender.keyDown</CODE>, it will not run solo in the web browser; it must be run with <KBD>run-webkit-tests</KBD>.</p>
|
|
<hr>
|
|
<form>
|
|
<!-- We specify a size of 3 but will end up rendering with 4 because webkit imposes a minimum size of 4.
|
|
It is important to make sure the code handles this case -->
|
|
<select name="singleselect" id="ss" size="3" multiple="true">
|
|
<option value="0">0 </option>
|
|
<option value="1">1 </option>
|
|
<option value="2">2 </option>
|
|
<option value="3">3 </option>
|
|
<option value="4">4 </option>
|
|
<option value="5">5 </option>
|
|
<option value="6">6 </option>
|
|
</select>
|
|
<select name="singleselectwithdisabled" id="ssd" size="4" multiple="false">
|
|
<option value="0" disabled="true">0 </option>
|
|
<option value="1">1 </option>
|
|
<option value="2">2 </option>
|
|
<option value="3" disabled="true">3 </option>
|
|
<option value="4">4 </option>
|
|
<option value="5">5 </option>
|
|
<option value="6">6 </option>
|
|
<option value="7" disabled = "true">7 </option>
|
|
</select>
|
|
<select name="singleselectwithgroup" id="ssg" size="4" multiple="false">
|
|
<optgroup label="gp0">
|
|
<option value="0">0 </option>
|
|
<option value="1">1 </option>
|
|
<option value="2">2 </option>
|
|
</optgroup>
|
|
<optgroup label="gp1">
|
|
<option value="3">3 </option>
|
|
</optgroup>
|
|
<option value="4">4 </option>
|
|
<optgroup label="gp2">
|
|
<option value="5">5 </option>
|
|
</optgroup>
|
|
<option value="6">6 </option>
|
|
</select>
|
|
</form>
|
|
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
<div id="log"></div>
|
|
|
|
<script>
|
|
|
|
function log(message) {
|
|
document.getElementById('log').appendChild(document.createTextNode(message + "\n"));
|
|
}
|
|
|
|
function sendKeyAndExpectIndex(selectId, key, initialIndex, expectedIndex) {
|
|
var select = document.getElementById(selectId);
|
|
clearSelection(select);
|
|
select.focus();
|
|
select.selectedIndex = initialIndex;
|
|
if (select.selectedIndex != initialIndex) {
|
|
log("can't set selectedIndex to " + initialIndex + ' (is ' + select.selectedIndex + ')');
|
|
return false;
|
|
}
|
|
if (window.testRunner)
|
|
eventSender.keyDown(key);
|
|
if (select.selectedIndex != expectedIndex) {
|
|
log('selectedIndex should be ' + expectedIndex + ' (is ' + select.selectedIndex + ') after a ' + key + ' from index ' + initialIndex);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function equalArrays(a1, a2) {
|
|
if (a1.length != a2.length)
|
|
return false;
|
|
for (i = 0; i < a1.length; i++) {
|
|
if (a1[i] != a2[i])
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function dumpArray(a) {
|
|
s = "[";
|
|
for (i = 0; i < a.length; i++) {
|
|
s = s + a[i];
|
|
if (i < a.length - 1)
|
|
s = s + ", ";
|
|
}
|
|
return s + "]";
|
|
}
|
|
|
|
function getSelectedIndices(select) {
|
|
nowSelected = [];
|
|
for (i = 0; i < select.options.length; i++)
|
|
if (select.options[i].selected)
|
|
nowSelected.push(i);
|
|
return nowSelected;
|
|
}
|
|
|
|
function clearSelection(select) {
|
|
for (i = 0; i < select.options.length; i++)
|
|
select.options[i].selected = false;
|
|
}
|
|
|
|
// expectedIndices should be in sorted order
|
|
function sendWithShiftKeyAndExpectIndices(selectId, key, expectedIndices) {
|
|
var select = document.getElementById(selectId);
|
|
select.focus();
|
|
if (window.testRunner)
|
|
eventSender.keyDown(key, ["shiftKey"]);
|
|
nowSelected = getSelectedIndices(select);
|
|
if (!equalArrays(nowSelected, expectedIndices)) {
|
|
log('selected indices should be ' + dumpArray(expectedIndices) + ' (is ' +
|
|
dumpArray(nowSelected) + ') after a ' + key);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function testPageDownNoDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 0, 3)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 1, 4)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 2, 5)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 3, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 4, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 5, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageDown", 6, 6)', 'true');
|
|
}
|
|
|
|
function testPageUpNoDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 6, 3)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 5, 2)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 4, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 3, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 2, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 1, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "pageUp", 0, 0)', 'true');
|
|
}
|
|
|
|
function testHomeNoDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 6, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 5, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 4, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 3, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 2, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 1, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "home", 0, 0)', 'true');
|
|
}
|
|
|
|
function testEndNoDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 6, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 5, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 4, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 3, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 2, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 1, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ss", "end", 0, 6)', 'true');
|
|
}
|
|
|
|
function testPageDownWithDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 0, 4)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 1, 4)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 2, 5)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 4, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 5, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 6, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageDown", 7, 6)', 'true');
|
|
}
|
|
|
|
function testPageUpWithDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 7, 4)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 6, 2)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 5, 2)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 4, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 2, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 1, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "pageUp", 0, 1)', 'true');
|
|
}
|
|
|
|
function testHomeWithDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 7, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 6, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 5, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 4, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 3, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 2, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 1, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "home", 0, 1)', 'true');
|
|
}
|
|
|
|
function testEndWithDisabledElements() {
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 7, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 6, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 5, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 4, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 3, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 2, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 1, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssd", "end", 0, 6)', 'true');
|
|
}
|
|
|
|
function testVariousShiftKeysNoDisabledElements() {
|
|
var select = document.getElementById("ss");
|
|
select.focus();
|
|
clearSelection(select);
|
|
select.selectedIndex = 0;
|
|
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageDown", [0, 1, 2, 3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageDown", [0, 1, 2, 3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageDown", [0, 1, 2, 3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [0, 1, 2, 3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [0])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [0])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "end", [0, 1, 2, 3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "end", [0, 1, 2, 3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "home", [0])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "home", [0])', 'true');
|
|
|
|
clearSelection(select);
|
|
select.selectedIndex = 3;
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageDown", [3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageDown", [3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [0, 1, 2, 3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [0, 1, 2, 3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "pageUp", [0, 1, 2, 3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "end", [3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "end", [3, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "home", [0, 1, 2, 3])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ss", "home", [0, 1, 2, 3])', 'true');
|
|
}
|
|
|
|
function testVariousShiftKeysWithDisabledElements() {
|
|
var select = document.getElementById('ssd');
|
|
select.focus();
|
|
clearSelection(select);
|
|
select.selectedIndex = 1;
|
|
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageDown", [1, 2, 4])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageDown", [1, 2, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageDown", [1, 2, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageUp", [1, 2])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageUp", [1])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageUp", [1])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "end", [1, 2, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "end", [1, 2, 4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "home", [1])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "home", [1])', 'true');
|
|
|
|
clearSelection(select);
|
|
select.selectedIndex = 4;
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageDown", [4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageDown", [4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageUp", [2, 4])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageUp", [1, 2, 4])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "pageUp", [1, 2, 4])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "end", [4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "end", [4, 5, 6])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "home", [1, 2, 4])', 'true');
|
|
shouldBe('sendWithShiftKeyAndExpectIndices("ssd", "home", [1, 2, 4])', 'true');
|
|
}
|
|
|
|
function testPageDownWithGroup() {
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 0, 3)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 1, 3)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 2, 4)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 3, 5)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 4, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 5, 6)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageDown", 6, 6)', 'true');
|
|
}
|
|
|
|
function testPageUpWithGroup() {
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 6, 4)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 5, 3)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 4, 2)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 3, 1)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 2, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 1, 0)', 'true');
|
|
shouldBe('sendKeyAndExpectIndex("ssg", "pageUp", 0, 0)', 'true');
|
|
}
|
|
|
|
testPageDownNoDisabledElements();
|
|
testPageUpNoDisabledElements();
|
|
testHomeNoDisabledElements();
|
|
testEndNoDisabledElements();
|
|
testPageDownWithDisabledElements();
|
|
testPageUpWithDisabledElements();
|
|
testHomeWithDisabledElements();
|
|
testEndWithDisabledElements();
|
|
testVariousShiftKeysNoDisabledElements();
|
|
testVariousShiftKeysWithDisabledElements();
|
|
testPageDownWithGroup();
|
|
testPageUpWithGroup();
|
|
</script>
|
|
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|