<!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 rangeOverflow flag with input fields');

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

function checkOverflow(value, max, disabled)
{
    input.value = value;
    input.max = max;
    input.disabled = !!disabled;
    var overflow = input.validity.rangeOverflow;
    var resultText = 'The value "' + input.value + '" ' +
        (overflow ? 'overflows' : 'doesn\'t overflow') +
        ' the maximum value "' + input.max + '"' + (disabled ? ' when disabled.' : '.');
    if (overflow)
        testPassed(resultText);
    else
        testFailed(resultText);
}

function checkNotOverflow(value, max, disabled, sanitized)
{
    input.value = value;
    input.max = max;
    input.disabled = !!disabled;
    var overflow = input.validity.rangeOverflow;
    var resultText = 'The value "' + input.value + '" ' +
        (sanitized ? 'sanitized from "' + value + '" ' : '') +
        (overflow ? 'overflows' : 'doesn\'t overflow') +
        ' the maximum value "' + input.max + '"' + (disabled ? ' when disabled.' : '.');
    if (overflow)
        testFailed(resultText);
    else
        testPassed(resultText);
}

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

input.type = 'datetime';
input.min = '';
// No overflow cases
checkNotOverflow('2010-01-27T12:34Z', null);
checkNotOverflow('2010-01-27T12:34Z', '');
checkNotOverflow('2010-01-27T12:34Z', 'foo');
checkNotOverflow('2010-01-27T12:34Z', '2010-01-27T12:34Z');
checkNotOverflow('2010-01-27T12:34Z', '2010-01-27T12:34:56Z');
checkNotOverflow('2010-01-27T12:34Z', '2011-01-26T12:34Z');
checkSanitizedValueNotOverflow('foo', '2011-01-26T12:34Z');
checkNotOverflow('2010-01-27T12:34Z', '0000-01-01T00:00Z'); // Too small max value.

// Overflow cases
checkOverflow('2010-01-27T12:34Z', '2010-01-26T12:33:59.999Z');
checkOverflow('9999-01-01T23:59Z', '2010-12-31T00:00Z');
input.min = '2010-01-28T12:00Z';  // value < min && value > max
checkOverflow('2010-01-27T12:34Z', '2010-01-26T12:34Z');

// Disabled
checkNotOverflow('9999-01-01T23:59Z', '2010-12-31T00:00Z', true);
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
