blob: 907393e232737eac8342bc4837e0c3c3070707f9 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../resources/common.js"></script>
</head>
<body>
<script>
// We use a single INPUT element for multiple testcases to improve test performance.
var input = document.createElement('input');
input.type = 'time';
document.body.appendChild(input);
input.focus();
function setDateTimeFormat(pattern) {
getElementByPseudoId(internals.shadowRoot(input), '-webkit-datetime-edit').setAttribute('pattern', pattern);
input.value = ''; // Updates the element for new format
}
function maybeUpdateAttribute(name, value) {
if (value) {
if (input.getAttribute(name) !== value)
input.setAttribute(name, value);
} else {
if (input.hasAttribute(name))
input.removeAttribute(name);
}
}
function assert_input_value_with_limits(initial, step, min, max, keySequence, expected, expectedDisplayValue) {
input.value = initial;
maybeUpdateAttribute('min', min);
maybeUpdateAttribute('max', max);
maybeUpdateAttribute('step', step);
keySequence.forEach(key => { eventSender.keyDown(key); });
assert_equals(input.value, expected);
if (expectedDisplayValue)
assert_equals(getUserAgentShadowTextContent(input), expectedDisplayValue);
}
function assert_input_value_with_limits_after_up(initial, step, min, max, expected, expectedDisplayValue) {
assert_input_value_with_limits(initial, step, min, max, ['ArrowUp'], expected, expectedDisplayValue);
}
function assert_input_value_with_limits_after_down(initial, step, min, max, expected, expectedDisplayValue) {
assert_input_value_with_limits(initial, step, min, max, ['ArrowDown'], expected, expectedDisplayValue);
}
function assert_input_value_with_limits_after_deleteup(initial, step, min, max, expected, expectedDisplayValue) {
assert_input_value_with_limits(initial, step, min, max, ['Delete', 'ArrowUp'], expected, expectedDisplayValue);
}
function assert_input_value_with_limits_after_deletedown(initial, step, min, max, expected, expectedDisplayValue) {
assert_input_value_with_limits(initial, step, min, max, ['Delete', 'ArrowDown'], expected, expectedDisplayValue);
}
function assert_input_value_after_up(initial, step, expected, expectedDisplayValue) {
assert_input_value_with_limits(initial, step, null, null, ['ArrowUp'], expected, expectedDisplayValue);
}
function assert_input_value_after_down(initial, step, expected, expectedDisplayValue) {
assert_input_value_with_limits(initial, step, null, null, ['ArrowDown'], expected, expectedDisplayValue);
}
// Hours, 1-12
test(() => {
assert_own_property(window, 'internals');
assert_own_property(window, 'eventSender');
assert_input_value_after_up('07:00', 1, '08:00');
assert_input_value_after_down('07:00', 1, '06:00');
assert_input_value_after_up('11:00', 1, '00:00');
assert_input_value_after_down('00:00', 1, '11:00');
assert_input_value_after_up('06:00', 7200, '08:00');
assert_input_value_after_down('06:00', 7200, '04:00');
assert_input_value_after_up('10:00', 7200, '00:00');
assert_input_value_after_down('00:00', 7200, '10:00');
assert_input_value_after_up('07:00', 7200, '08:00');
assert_input_value_after_down('07:00', 7200, '06:00');
assert_input_value_after_up('06:00', 3601, '07:00');
assert_input_value_after_down('06:00', 3601, '05:00');
assert_input_value_after_up('06:00', 0, '07:00');
assert_input_value_after_down('06:00', 0, '05:00');
assert_input_value_after_up('06:00', 86400, '00:00');
assert_input_value_after_down('06:00', 86400, '00:00');
assert_input_value_after_up('06:00', 36000, '07:00');
assert_input_value_after_down('06:00', 36000, '05:00');
assert_input_value_with_limits_after_up('06:00', 7200, '01:00', null, '07:00');
assert_input_value_with_limits_after_down('06:00', 7200, '01:00', null, '05:00');
assert_input_value_with_limits_after_deleteup('06:00', 7200, null, null, '02:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, null, null, '00:00', '12:00 AM');
assert_input_value_with_limits_after_deleteup('06:00', 7200, '01:00', null, '01:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, '01:00', null, '11:00');
assert_input_value_with_limits_after_up('17:00', 1, '17:00', '20:00', '18:00');
assert_input_value_with_limits_after_down('17:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('17:00', 1, '15:00', '17:00', '15:00');
assert_input_value_with_limits_after_down('17:00', 1, '15:00', '17:00', '16:00');
assert_input_value_with_limits_after_up('15:00', 1, '17:00', '20:00', '17:00');
assert_input_value_with_limits_after_down('15:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_down('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_up('12:00', 1, '12:00', '15:00', '13:00');
assert_input_value_with_limits_after_down('12:00', 1, '12:00', '15:00', '23:00');
assert_input_value_with_limits_after_up('15:00', 1, '12:00', '15:00', '16:00');
assert_input_value_with_limits_after_down('15:00', 1, '12:00', '15:00', '14:00');
assert_input_value_with_limits_after_up('12:00', 1, '10:00', '12:00', '13:00');
assert_input_value_with_limits_after_down('12:00', 1, '10:00', '12:00', '23:00');
assert_input_value_with_limits_after_up('00:00', 1, '00:00', '03:00', '01:00');
assert_input_value_with_limits_after_down('00:00', 1, '00:00', '03:00', '11:00');
assert_input_value_with_limits_after_up('15:00', 1, '10:00', '15:00', '16:00');
assert_input_value_with_limits_after_down('10:00', 1, '10:00', '15:00', '09:00');
assert_input_value_with_limits_after_up('17:00', 7200, '17:00', '20:00', '19:00');
assert_input_value_with_limits_after_down('17:00', 7200, '17:00', '20:00', '19:00');
assert_input_value_with_limits_after_up('17:00', 7200, '17:00', '18:00', '17:00');
assert_input_value_with_limits_after_down('17:00', 7200, '17:00', '18:00', '17:00');
}, 'Hours, 1-12');
// Hours, 0-11
test(() => {
assert_own_property(window, 'internals');
assert_own_property(window, 'eventSender');
setDateTimeFormat('KK:mm a');
assert_input_value_after_up('11:00', 1, '00:00', '00:00 AM');
assert_input_value_after_down('00:00', 1, '11:00', '11:00 AM');
assert_input_value_after_up('23:00', 1, '12:00', '00:00 PM');
assert_input_value_after_down('12:00', 1, '23:00', '11:00 PM');
assert_input_value_with_limits_after_deleteup('06:00', 7200, null, null, '00:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, null, null, '10:00');
assert_input_value_with_limits_after_deleteup('06:00', 7200, '01:00', null, '01:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, '01:00', null, '11:00');
assert_input_value_with_limits_after_up('17:00', 1, '17:00', '20:00', '18:00');
assert_input_value_with_limits_after_down('17:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('17:00', 1, '15:00', '17:00', '15:00');
assert_input_value_with_limits_after_down('17:00', 1, '15:00', '17:00', '16:00');
assert_input_value_with_limits_after_up('15:00', 1, '17:00', '20:00', '17:00');
assert_input_value_with_limits_after_down('15:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_down('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_up('12:00', 1, '12:00', '15:00', '13:00');
assert_input_value_with_limits_after_down('12:00', 1, '12:00', '15:00', '15:00');
assert_input_value_with_limits_after_up('15:00', 1, '12:00', '15:00', '12:00');
assert_input_value_with_limits_after_down('15:00', 1, '12:00', '15:00', '14:00');
assert_input_value_with_limits_after_up('12:00', 1, '10:00', '12:00', '13:00');
assert_input_value_with_limits_after_down('12:00', 1, '10:00', '12:00', '23:00');
assert_input_value_with_limits_after_up('00:00', 1, '00:00', '03:00', '01:00');
assert_input_value_with_limits_after_down('00:00', 1, '00:00', '03:00', '03:00');
assert_input_value_with_limits_after_up('15:00', 1, '10:00', '15:00', '16:00');
assert_input_value_with_limits_after_down('10:00', 1, '10:00', '15:00', '09:00');
assert_input_value_with_limits_after_up('20:00', 7200, '17:00', '20:00', '17:00');
assert_input_value_with_limits_after_down('20:00', 7200, '17:00', '20:00', '19:00');
}, 'Hours, 0-11');
// Hours, 0-23
test(() => {
assert_own_property(window, 'internals');
assert_own_property(window, 'eventSender');
setDateTimeFormat('HH:mm');
assert_input_value_after_up('07:00', 1, '08:00');
assert_input_value_after_down('07:00', 1, '06:00');
assert_input_value_after_up('23:00', 1, '00:00');
assert_input_value_after_down('00:00', 1, '23:00');
assert_input_value_after_up('06:00', 7200, '08:00');
assert_input_value_after_down('06:00', 7200, '04:00');
assert_input_value_after_up('22:00', 7200, '00:00');
assert_input_value_after_down('00:00', 7200, '22:00');
assert_input_value_after_up('07:00', 7200, '08:00');
assert_input_value_after_down('07:00', 7200, '06:00');
assert_input_value_after_up('06:00', 3601, '07:00');
assert_input_value_after_down('06:00', 3601, '05:00');
assert_input_value_after_up('06:00', 0, '07:00');
assert_input_value_after_down('06:00', 0, '05:00');
assert_input_value_after_up('06:00', 86400, '00:00');
assert_input_value_after_down('06:00', 86400, '00:00');
assert_input_value_after_up('06:00', 36000, '07:00');
assert_input_value_after_down('06:00', 36000, '05:00');
assert_input_value_with_limits_after_up('06:00', 7200, '01:00', null, '07:00');
assert_input_value_with_limits_after_down('06:00', 7200, '01:00', null, '05:00');
assert_input_value_with_limits_after_deleteup('06:00', 7200, null, null, '00:00', '00:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, null, null, '22:00');
assert_input_value_with_limits_after_deleteup('06:00', 7200, '01:00', null, '01:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, '01:00', null, '23:00');
assert_input_value_with_limits_after_up('17:00', 1, '17:00', '20:00', '18:00');
assert_input_value_with_limits_after_down('17:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('17:00', 1, '15:00', '17:00', '15:00');
assert_input_value_with_limits_after_down('17:00', 1, '15:00', '17:00', '16:00');
assert_input_value_with_limits_after_up('15:00', 1, '17:00', '20:00', '17:00');
assert_input_value_with_limits_after_down('15:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_down('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_up('00:00', 1, '00:00', '03:00', '01:00');
assert_input_value_with_limits_after_down('00:00', 1, '00:00', '03:00', '03:00');
assert_input_value_with_limits_after_up('03:00', 1, '00:00', '03:00', '00:00');
assert_input_value_with_limits_after_down('03:00', 1, '00:00', '03:00', '02:00');
assert_input_value_with_limits_after_up('12:00', 1, '10:00', '12:00', '10:00');
assert_input_value_with_limits_after_down('12:00', 1, '10:00', '12:00', '11:00');
assert_input_value_with_limits_after_up('00:00', 1, '00:00', '03:00', '01:00');
assert_input_value_with_limits_after_down('00:00', 1, '00:00', '03:00', '03:00');
assert_input_value_with_limits_after_up('15:00', 1, '10:00', '15:00', '10:00');
assert_input_value_with_limits_after_down('10:00', 1, '10:00', '15:00', '15:00');
assert_input_value_with_limits_after_up('20:00', 7200, '17:00', '20:00', '17:00');
assert_input_value_with_limits_after_down('20:00', 7200, '17:00', '20:00', '19:00');
}, 'Hours, 0-23');
// Hours, 1-24
test(() => {
assert_own_property(window, 'internals');
assert_own_property(window, 'eventSender');
setDateTimeFormat('kk:mm');
assert_input_value_after_up('11:00', 1, '12:00', '12:00');
assert_input_value_after_down('00:00', 1, '23:00', '23:00');
assert_input_value_after_up('23:00', 1, '00:00', '24:00');
assert_input_value_after_down('12:00', 1, '11:00', '11:00');
assert_input_value_with_limits_after_deleteup('06:00', 7200, null, null, '02:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, null, null, '00:00');
assert_input_value_with_limits_after_deleteup('06:00', 7200, '01:00', null, '01:00');
assert_input_value_with_limits_after_deletedown('06:00', 7200, '01:00', null, '23:00');
assert_input_value_with_limits_after_up('17:00', 1, '17:00', '20:00', '18:00');
assert_input_value_with_limits_after_down('17:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('17:00', 1, '15:00', '17:00', '15:00');
assert_input_value_with_limits_after_down('17:00', 1, '15:00', '17:00', '16:00');
assert_input_value_with_limits_after_up('15:00', 1, '17:00', '20:00', '17:00');
assert_input_value_with_limits_after_down('15:00', 1, '17:00', '20:00', '20:00');
assert_input_value_with_limits_after_up('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_down('15:00', 1, '13:00', '13:00', '13:00');
assert_input_value_with_limits_after_up('00:00', 1, '00:00', '03:00', '01:00');
assert_input_value_with_limits_after_down('00:00', 1, '00:00', '03:00', '23:00');
assert_input_value_with_limits_after_up('03:00', 1, '00:00', '03:00', '04:00');
assert_input_value_with_limits_after_down('03:00', 1, '00:00', '03:00', '02:00');
assert_input_value_with_limits_after_up('12:00', 1, '10:00', '12:00', '10:00');
assert_input_value_with_limits_after_down('12:00', 1, '10:00', '12:00', '11:00');
assert_input_value_with_limits_after_up('00:00', 1, '00:00', '03:00', '01:00');
assert_input_value_with_limits_after_down('00:00', 1, '00:00', '03:00', '23:00');
assert_input_value_with_limits_after_up('15:00', 1, '10:00', '15:00', '10:00');
assert_input_value_with_limits_after_down('10:00', 1, '10:00', '15:00', '15:00');
assert_input_value_with_limits_after_up('17:00', 7200, '17:00', '20:00', '19:00');
assert_input_value_with_limits_after_down('17:00', 7200, '17:00', '20:00', '19:00');
assert_input_value_with_limits_after_up('17:00', 7200, '17:00', '18:00', '17:00');
assert_input_value_with_limits_after_down('17:00', 7200, '17:00', '18:00', '17:00');
}, 'Hours, 1-24');
</script>
</body>
</html>