blob: 7f9180254eda906aef4525fd984ab30bb1afc1d1 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<p id="description">Test for keyboard operations of &lt;input type=range></p>
<div id="console"></div>
<script>
function sendKey(element, keyName) {
eventSender.keyDown(keyName);
}
var changeEventCounter = 0;
function handleChange() {
changeEventCounter++;
}
var parent = document.createElement('div');
document.body.appendChild(parent);
parent.innerHTML = '<input type=range id=range min=0 max=100 value=50>';
var input = document.getElementById('range');
input.onchange = handleChange;
input.focus();
debug('Tests for a horizontal range');
debug('Press the up arrow key:');
var lastChangeEventCounter = changeEventCounter;
sendKey(input, 'upArrow');
shouldBe('input.value', '"51"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Press the down arrow key:');
sendKey(input, 'downArrow');
shouldBe('input.value', '"50"');
debug('Press the left arrow key:');
sendKey(input, 'leftArrow');
shouldBe('input.value', '"49"');
debug('Press the right arrow key:');
sendKey(input, 'rightArrow');
shouldBe('input.value', '"50"');
debug('Press the PageUp key:');
sendKey(input, 'pageUp');
shouldBe('input.value', '"60"');
debug('Press the PageDown key:');
sendKey(input, 'pageDown');
shouldBe('input.value', '"50"');
debug('Press the Home key:');
sendKey(input, 'home');
shouldBe('input.value', '"0"');
debug('Press the End key:');
sendKey(input, 'end');
shouldBe('input.value', '"100"');
debug('Edge cases');
input.valueAsNumber = 0;
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'leftArrow');
shouldBe('input.value', '"0"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'rightArrow');
shouldBe('input.value', '"1"');
input.valueAsNumber = 100;
sendKey(input, 'rightArrow');
shouldBe('input.value', '"100"');
sendKey(input, 'leftArrow');
shouldBe('input.value', '"99"');
input.valueAsNumber = 0;
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'pageDown');
shouldBe('input.value', '"0"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'home');
shouldBe('input.value', '"0"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
input.valueAsNumber = 100;
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'pageUp');
shouldBe('input.value', '"100"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'end');
shouldBe('input.value', '"100"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
input.dir = 'rtl';
input.value = '50';
input.offsetLeft;
debug('');
debug('RTL');
sendKey(input, 'leftArrow');
shouldBeEqualToString('input.value', '51');
sendKey(input, 'rightArrow');
shouldBeEqualToString('input.value', '50');
input.dir = 'ltr';
debug('');
input.setAttribute('style', '-webkit-appearance:slider-vertical; height: 40px;');
input.offsetLeft; // force layout
input.valueAsNumber = 50;
debug('Tests for a vertical range');
debug('Press the up arrow key:');
sendKey(input, 'upArrow');
shouldBe('input.value', '"51"');
debug('Press the down arrow key:');
sendKey(input, 'downArrow');
shouldBe('input.value', '"50"');
debug('Press the left arrow key:');
sendKey(input, 'leftArrow');
shouldBe('input.value', '"51"');
debug('Press the right arrow key:');
sendKey(input, 'rightArrow');
shouldBe('input.value', '"50"');
debug('Press the PageUp key:');
sendKey(input, 'pageUp');
shouldBe('input.value', '"60"');
debug('Press the PageDown key:');
sendKey(input, 'pageDown');
shouldBe('input.value', '"50"');
debug('Press the Home key:');
sendKey(input, 'home');
shouldBe('input.value', '"100"');
debug('Press the End key:');
sendKey(input, 'end');
shouldBe('input.value', '"0"');
debug('');
debug('step=any cases');
input.step = 'any';
input.min = '0';
input.max = '200';
input.valueAsNumber = 100;
debug('Press the up arrow key:');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'upArrow');
shouldBe('input.value', '"102"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Press the down arrow key:');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'downArrow');
shouldBe('input.value', '"100"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Press the pageup key:');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'pageUp');
shouldBe('input.value', '"120"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Press the pagedown key:');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'pageDown');
shouldBe('input.value', '"100"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Press the home key:');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'home');
shouldBe('input.value', '"200"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Press the end key:');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'end');
shouldBe('input.value', '"0"');
shouldBe('changeEventCounter', 'lastChangeEventCounter + 1');
debug('Edge cases');
input.valueAsNumber = 199;
sendKey(input, 'upArrow');
shouldBe('input.value', '"200"');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'upArrow');
shouldBe('input.value', '"200"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'downArrow');
shouldBe('input.value', '"198"');
input.valueAsNumber = 199;
sendKey(input, 'pageUp');
shouldBe('input.value', '"200"');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'pageUp');
shouldBe('input.value', '"200"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'pageDown');
shouldBe('input.value', '"180"');
input.valueAsNumber = 1;
sendKey(input, 'downArrow');
shouldBe('input.value', '"0"');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'downArrow');
shouldBe('input.value', '"0"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'upArrow');
shouldBe('input.value', '"2"');
input.valueAsNumber = 1;
sendKey(input, 'pageDown');
shouldBe('input.value', '"0"');
lastChangeEventCounter = changeEventCounter;
sendKey(input, 'pageDown');
shouldBe('input.value', '"0"');
shouldBe('changeEventCounter', 'lastChangeEventCounter');
sendKey(input, 'pageUp');
shouldBe('input.value', '"20"');
debug('');
debug('small range');
input.min = '0';
input.max = '10';
input.step = '3';
input.valueAsNumber = 6;
sendKey(input, 'pageUp');
shouldBe('input.value', '"9"');
sendKey(input, 'pageDown');
shouldBe('input.value', '"6"');
sendKey(input, 'end');
shouldBe('input.value', '"0"');
sendKey(input, 'home');
shouldBe('input.value', '"9"');
sendKey(input, 'end');
shouldBe('input.value', '"0"');
debug('');
debug('Disabled and read-only');
input.min = '0';
input.max = '100';
input.step = '1';
input.value = '1';
input.disabled = true;
sendKey(input, 'upArrow');
shouldBe('input.value', '"1"');
sendKey(input, 'home');
shouldBe('input.value', '"1"');
sendKey(input, 'pageUp');
shouldBe('input.value', '"1"');
input.removeAttribute('disabled');
input.readOnly = true;
sendKey(input, 'upArrow');
shouldBe('input.value', '"1"');
sendKey(input, 'home');
shouldBe('input.value', '"1"');
sendKey(input, 'pageUp');
shouldBe('input.value', '"1"');
input.readOnly = false;
debug('');
</script>
</body>
</html>