blob: 37a83d81acdf9466d00e5063258cfde7de395cdf [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
</head>
<body>
<script>
description('This test aims to check for typeMismatch flag with type=number input fields');
var i = document.createElement('input');
i.type = 'number';
// TODO(tkent): check() doesn't make sense because the number type never be
// typeMismatch.
function check(value, disabled)
{
i.value = value;
i.disabled = !!disabled;
var mismatch = i.validity.typeMismatch;
var resultText = '"' + value + '" is ' + (mismatch ? 'an invalid' : 'a valid') + ' number' + (disabled ? ' when disabled.' : '.');
if (!mismatch)
testPassed(resultText);
else
testFailed(resultText);
}
function checkSanitization(value, expectedValue)
{
i.value = value;
if (i.validity.typeMismatch) {
testFailed('"' + value + '" made typeMismatch true.');
} else if (i.value != expectedValue) {
testFailed('"' + value + '" was sanitized to "' + i.value + '". It should be ' + expectedValue);
} else {
testPassed('"' + value + '" was sanitized to "' + i.value + '".');
}
}
// Valid values
check('0');
check('10');
check('01');
check('0.2');
check('.2');
check('-0');
check('-1.2');
check('1.2E10');
check('1.2E-10');
check('1.2E+10');
check('12345678901234567890123456789012345678901234567890');
check('0.12345678901234567890123456789012345678901234567890');
// Invalid values
checkSanitization('abc', '');
checkSanitization('0xff', '');
checkSanitization('+1', '');
checkSanitization(' 10', '');
checkSanitization('10 ', '');
checkSanitization('0.', '');
checkSanitization('1.', '');
checkSanitization('1,2', '');
checkSanitization('1E', '');
checkSanitization('NaN', '');
checkSanitization('nan', '');
checkSanitization('Inf', '');
checkSanitization('inf', '');
checkSanitization('Infinity', '');
checkSanitization('infinity', '');
// Assume empty string as valid.
check('');
// Huge exponent.
checkSanitization('1.2E65535', '');
checkSanitization('1.2e10', '1.2e10');
// Disabled
check('invalid', true);
</script>
</body>
</html>