<!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 ? 'undeflows' : '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
checkNotUnderflow('9999-01', '10000-12', true);
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
