chromium/third_party/blink/web_tests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-stepup-stepdown-from-renderer.html

<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="../resources/common.js"></script>
</head>
<body>
<script>
description('Check stepping-up and -down for datetime-local input fields from renderer.');

var input = document.createElement('input');

document.body.appendChild(input);

function keyDown(key, modifiers)
{
    if (!window.eventSender)
        return;
    eventSender.keyDown(key, modifiers);
}

function setInputAttributes(value, min, max, step) {
    input.value = value;
    input.min = min;
    input.max = max;
    input.step = step;
}

function test(value, step, min, max, keySequence) {
    setInputAttributes(value, min, max, step);
    for (var i = 0; i < keySequence.length; i++)
        keyDown(keySequence[i]);
    return input.value;
}

function stepUp(value, step, min, max) {
    return test(value, step, min, max, ['ArrowUp']);
}

function stepDown(value, step, min, max) {
    return test(value, step, min, max, ['ArrowDown']);
}

input.type = 'datetime-local';
input.focus();
debug('Function arguments are (value, step, min, max, [keySequence]).');
debug('The hour field respects min/max attributes when they have the same date.');
keyDown('ArrowRight');
keyDown('ArrowRight');
keyDown('ArrowRight');
shouldBeEqualToString('stepUp("2013-01-16T17:00", 1, "2013-01-16T15:00", "2013-01-16T17:00")', '2013-01-16T15:00');
shouldBeEqualToString('stepDown("2013-01-16T15:00", 1, "2013-01-16T15:00", "2013-01-16T17:00")', '2013-01-16T17:00');
shouldBeEqualToString('stepUp("2013-01-16T17:00", 1, "2013-01-16T15:00", "2013-01-17T17:00")', '2013-01-16T18:00');
shouldBeEqualToString('stepDown("2013-01-16T17:00", 1, "2013-01-16T17:00", "2013-01-17T20:00")', '2013-01-16T16:00');

debug('The hour field wraps am/pm.');
shouldBeEqualToString('stepUp("2013-01-16T11:00", 1, "2013-01-16T00:00", "2013-01-16T23:59")', '2013-01-16T12:00');
shouldBeEqualToString('stepUp("2013-01-16T23:00", 1, "2013-01-16T00:00", "2013-01-16T23:59")', '2013-01-16T00:00');
shouldBeEqualToString('stepDown("2013-01-16T12:00", 1, "2013-01-16T00:00", "2013-01-16T23:59")', '2013-01-16T11:00');
shouldBeEqualToString('stepDown("2013-01-16T00:00", 1, "2013-01-16T00:00", "2013-01-16T23:59")', '2013-01-16T23:00');

debug('');
document.body.removeChild(input);
</script>
</body>
</html>