<!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 month 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 = 'month';
input.max = '';
// No underflow cases
checkNotUnderflow('2010-01', null);
checkNotUnderflow('2010-01', '');
checkNotUnderflow('2010-01', 'foo');
// 1000-01 is smaller than the implicit minimum value.
// But the month parser rejects it before comparing the minimum value.
checkNotUnderflow('1000-01', '');
checkNotUnderflow('1582-10', '');
checkNotUnderflow('2010-01', '2009-12');
checkNotUnderflow('2010-01', '2009-01');
checkSanitizedValueNotUnderflow('foo', '2011-01');

// Underflow cases
checkUnderflow('2010-01', '2010-02');
checkUnderflow('9999-01', '10000-12');
input.max = '2009-12';  // value < min && value > max
checkUnderflow('2010-01', '2010-02');

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