blob: 12dc4e67d411e79ba499c66b7e3dc7a585215075 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<p id="description"></p>
<p>
Please run this with DumpRenderTree.
</p>
Test following keys:
<ul>
<li>Digits</li>
<li>Left/Right - Move focus field inside element</li>
<li>Up/Down - Increment/decrement value of focus field</li>
<li>Tab - Move focus field</li>
<li>Backspace - Make value empty</li>
</ul>
<input id="before">
<input id="input" type="month">
<input id="another">
<div id="console"></div>
<script>
description("Multiple fields UI of month input type with keyboard events");
if (window.internals)
internals.settings.setLangAttributeAwareFormControlUIEnabled(true);
var input = document.getElementById("input");
function keyDown(key, modifiers)
{
if (!window.eventSender)
return;
eventSender.keyDown(key, modifiers);
}
function beginTest(title, value, opt_min, opt_max)
{
debug("== " + title + " ==");
input.value = value;
input.min = opt_min ? opt_min : "";
input.max = opt_max ? opt_max : "";
input.blur();
input.focus();
}
// We assume the year-month format is "MMM yyyy".
beginTest('Digit keys');
keyDown('s');
keyDown('ArrowRight');
keyDown('0');
keyDown('1');
keyDown('2');
keyDown('A');
shouldBeEqualToString('input.value', '0012-09');
beginTest('Left/Right keys', '2012-09');
keyDown('ArrowRight');
keyDown('5');
keyDown('ArrowLeft');
keyDown('6');
shouldBeEqualToString('input.value', '0005-06');
keyDown('ArrowLeft');
keyDown('ArrowLeft');
keyDown('ArrowLeft');
shouldBeEqualToString('document.activeElement.id', 'input');
beginTest('Up/Down keys', '2012-09');
keyDown('ArrowUp');
shouldBeEqualToString('input.value', '2012-10');
keyDown('ArrowDown');
keyDown('ArrowDown');
shouldBeEqualToString('input.value', '2012-08');
// Note that empty value for the year field without min/max attributes is not
// testable because its default value depends on the current date.
beginTest('Up/Down keys on empty value', '', '2012-01');
keyDown('ArrowDown');
keyDown('ArrowDown');
keyDown('ArrowRight');
keyDown('ArrowUp');
keyDown('ArrowUp');
keyDown('ArrowDown');
shouldBeEqualToString('input.value', '2012-11');
beginTest('Up/Down keys on empty value 2', '', undefined, '2012-01');
keyDown('ArrowUp');
keyDown('ArrowUp');
keyDown('ArrowRight');
keyDown('ArrowDown');
keyDown('ArrowDown');
keyDown('ArrowUp');
shouldBeEqualToString('input.value', '2012-02');
beginTest('Tab key', '2012-09');
keyDown('\t'); // -> Sep [2012]
keyDown('5'); // -> Sep [0005]
shouldBeEqualToString('input.value', '0005-09');
keyDown('\t', ['shiftKey']); // -> [Sep] [0005]
keyDown('J'); // -> [Jan] 0005
shouldBeEqualToString('input.value', '0005-01');
keyDown('\t'); // -> Jan [0005]
keyDown('\t'); // -> Jan 0005
shouldBeEqualToString('document.activeElement.id', 'another');
beginTest('Shfit+Tab key', '2012-09');
another.focus();
keyDown('\t', ['shiftKey']);
keyDown('3');
shouldBeEqualToString('input.value', '0003-09');
keyDown('\t', ['shiftKey']);
keyDown('\t', ['shiftKey']);
shouldBeEqualToString('document.activeElement.id', 'before');
beginTest('Up key on maximum value', '275760-09');
keyDown('ArrowUp');
keyDown('\t');
keyDown('ArrowUp');
shouldBeEqualToString('input.value', '0001-10');
beginTest('Up key with a maximum attribute', '1999-12', undefined, '1999-12');
keyDown('ArrowUp');
keyDown('\t');
keyDown('ArrowUp');
shouldBeEqualToString('input.value', '0001-01');
beginTest('Down key on minimum value', '0001-01', 'bad min', 'wrong max');
keyDown('ArrowDown'); // -> 0001-12
keyDown('\t');
keyDown('ArrowDown'); // -> 275760-12, which is greater than the hard limit.
shouldBeEqualToString('input.value', '');
beginTest('Down key with a minimum attribute', '0001-01', '0001-01');
keyDown('ArrowDown'); // -> 0001-12
keyDown('\t');
keyDown('ArrowDown'); // -> 275760-12, which is greater than the hard limit.
shouldBeEqualToString('input.value', '');
beginTest('Inconsistent min-max attributes', '1999-12', '1999-12', '1000-01');
keyDown('\t');
keyDown('ArrowUp');
shouldBeEqualToString('input.value', '1000-12');
keyDown('ArrowDown');
shouldBeEqualToString('input.value', '1999-12');
beginTest('Backspace key', '2012-09');
keyDown("Backspace");
shouldBeEqualToString('input.value', '');
beginTest('Delete key', '2012-09');
keyDown("Delete");
shouldBeEqualToString('input.value', '');
beginTest('Typeahead', '2012-12');
keyDown('ArrowRight');
keyDown('1');
shouldBeEqualToString('input.value', '0001-12');
keyDown('ArrowLeft');
keyDown('ArrowRight');
keyDown('2');
shouldBeEqualToString('input.value', '0002-12');
beginTest('Typeahead cycle first character', '2012-09');
keyDown('j'); // -> [Jan] 2012
shouldBeEqualToString('input.value', '2012-01');
keyDown('j'); // -> [Jun] 2012
shouldBeEqualToString('input.value', '2012-06');
keyDown('j'); // -> [Jul] 2012
shouldBeEqualToString('input.value', '2012-07');
keyDown('j'); // -> [Jan] 2012
shouldBeEqualToString('input.value', '2012-01');
keyDown('x'); // -> [Jan] 2012
shouldBeEqualToString('input.value', '2012-01');
beginTest('Typeahead prefix match', '2012-09');
keyDown('m'); // -> [Mar] 2012
shouldBeEqualToString('input.value', '2012-03');
keyDown('a'); // -> [Mar] 2012
shouldBeEqualToString('input.value', '2012-03');
keyDown('y'); // -> [May] 2012
shouldBeEqualToString('input.value', '2012-05');
keyDown('x'); // -> [May] 2012
shouldBeEqualToString('input.value', '2012-05');
beginTest('Typeahead index match', '2012-09');
keyDown('1'); // -> [Jan] 2012
shouldBeEqualToString('input.value', '2012-01');
keyDown('2'); // -> [Dec] 2012
shouldBeEqualToString('input.value', '2012-12');
keyDown('x'); // -> [Dec] 2012
shouldBeEqualToString('input.value', '2012-12');
beginTest('Typeahead should search from current selection', '2012-01');
keyDown('j'); // -> [Jun] 2012
shouldBeEqualToString('input.value', '2012-06');
input.setAttribute("lang", "he-il");
beginTest('RTL focus navigation', '2012-09');
debug('The tests in this block fail on platforms without the lang-attribute-aware-form-control-UI feature.');
keyDown('ArrowUp'); // -> 2012 [M10]
shouldBeEqualToString('input.value', '2012-10');
keyDown('\t'); // -> [2012] M10
keyDown('2'); // -> [0002] M10
shouldBeEqualToString('input.value', '0002-10');
keyDown('\t', ['shiftKey']); // -> 0002 [M10]
keyDown('ArrowUp'); // -> 0002 [M11]
shouldBeEqualToString('input.value', '0002-11');
input.removeAttribute("lang");
</script>
</body>
</html>