<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description('This test aims to check for rangeUnderflow flag with datetime-local input fields');

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

function checkUnderflow(value, min, disabled)
{
    input.value = value;
    input.min = min;
    input.disabled = !!disabled;
    var underflow = input.validity.rangeUnderflow;
    var resultText = 'The value "' + input.value + '" ' +
        (underflow ? 'underflows' : 'doesn\'t underflow') +
        ' the minimum value "' + input.min + '"' + (disabled ? ' when disabled.' : '.');
    if (underflow)
        testPassed(resultText);
    else
        testFailed(resultText);
}

function checkNotUnderflow(value, min, disabled, sanitized)
{
    input.value = value;
    input.min = min;
    input.disabled = !!disabled;
    var underflow = input.validity.rangeUnderflow;
    var resultText = 'The value "' + input.value + '" ' +
        (sanitized ? 'sanitized from "' + value + '" ' : '') +
        (underflow ? 'underflows' : 'doesn\'t underflow') +
        ' the minimum value "' + input.min + '"' + (disabled ? ' when disabled.' : '.');
    if (underflow)
        testFailed(resultText);
    else
        testPassed(resultText);
}

function checkSanitizedValueNotUnderflow(value, max, disabled)
{
    // For date types, invalid values are sanitized to "".
    checkNotUnderflow(value, max, disabled, true);
}

input.type = 'datetime-local';
input.max = '';
// No underflow cases
checkNotUnderflow('2010-01-27T12:34', null);
checkNotUnderflow('2010-01-27T12:34', '');
checkNotUnderflow('2010-01-27T12:34', 'foo');
// 1000-01-01 is smaller than the implicit minimum value.
// But the date parser rejects it before comparing the minimum value.
checkNotUnderflow('1000-01-01T12:34', '');
checkNotUnderflow('1582-10-15T00:00', '');
checkNotUnderflow('2010-01-27T12:34', '2010-01-26T00:00');
checkNotUnderflow('2010-01-27T12:34', '2009-01-28T00:00');
checkSanitizedValueNotUnderflow('foo', '2011-01-26T00:00');

// Underflow cases
checkUnderflow('2010-01-27T12:34', '2010-01-27T13:00');
checkUnderflow('9999-01-01T12:00', '10000-12-31T12:00');
input.max = '2010-01-01T12:00';  // value < min && value > max
checkUnderflow('2010-01-27T12:00', '2010-02-01T12:00');

// Disabled
checkUnderflow('9999-01-01T12:00', '10000-12-31T12:00', true);
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
