blob: 57c0adce283fced826ec931246132afda7046d48 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<style>
input.with-border::-webkit-inner-spin-button {
border: 10px solid;
}
input.with-padding::-webkit-inner-spin-button {
padding: 0 8px 0 8px;
}
input.with-margin::-webkit-inner-spin-button {
margin: 0 10px 0 10px;
}
input#number-without-spinbutton::-webkit-inner-spin-button {
display: none;
margin: 0;
}
input#number-with-width {
width: 100px;
}
</style>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description('Test for size attribute of input');
var parent = document.createElement('div');
document.body.appendChild(parent);
parent.innerHTML = '<input type=text id=text>'
+ '<input type="number" id=number>'
+ '<input type="number" id="number-without-spinbutton" min="0" max="10" step="1">'
+ '<input type="number" id="number-with-spinbutton" min="0" max="10" step="1">'
+ '<input type="number" id="number-with-width">'
var number = document.getElementById('number');
var numberWithoutSpinButton = document.getElementById('number-without-spinbutton');
var numberWithSpinButton = document.getElementById('number-with-spinbutton');
var numberWithWidth = document.getElementById('number-with-width');
var text = document.getElementById('text');
// The width of spin button should differ by environment. So it should be calculated here.
var spinButtonWidth = numberWithSpinButton.offsetWidth - numberWithoutSpinButton.offsetWidth;
// spinButtonWidth should have menaningful width.
shouldBeGreaterThanOrEqual('spinButtonWidth', '1');
debug('The content area of the number input without min/max/step attribute should have the same width as text input');
shouldBe('number.offsetWidth', 'text.offsetWidth');
debug('');
debug('The number whose width is specified should respect the setting');
shouldBe('numberWithWidth.offsetWidth', '100');
shouldBe('numberWithWidth.min = 0; numberWithWidth.max = 100; numberWithWidth.offsetWidth', '100');
debug('');
debug('The number input should ignore size attribute for layout');
shouldBe('number.size = 10; number.offsetWidth', 'text.offsetWidth');
shouldBe('number.size', '10');
shouldBe('number.size = 100; number.offsetWidth', 'text.offsetWidth');
shouldBe('number.size', '100');
shouldThrow('number.size = null', '"IndexSizeError: Failed to set the \'size\' property on \'HTMLInputElement\': The value provided is 0, which is an invalid size."');
debug('');
function numberWidth(min, max, step, className) {
number.className = className;
number.step = step;
number.min = min;
number.max = max;
return number.offsetWidth;
}
function textWidthPlusSpinButtonWidth(size) {
text.size = size;
return text.offsetWidth + spinButtonWidth;
}
debug('If min or max is absent, the number input has the same width as input[type=text]')
shouldBe('numberWidth(0, null, null)', 'text.offsetWidth');
shouldBe('numberWidth(null, 100, null)', 'text.offsetWidth');
shouldBe('numberWidth(null, null, 100)', 'text.offsetWidth');
debug('');
debug('If step is any, the input[type=text] has the same width as input[type=text]')
shouldBe('numberWidth(0, 1, "any")', 'text.offsetWidth');
shouldBe('numberWidth(0, 10, "any")', 'text.offsetWidth');
shouldBe('numberWidth(0, 1.1, "any")', 'text.offsetWidth');
debug('');
debug('The case the inner spin button has border or padding.');
var borderWidth = 20;
var paddingWidth = 16;
shouldBe('numberWidth(0, 10, 1, "with-border")', 'textWidthPlusSpinButtonWidth(2) + borderWidth');
shouldBe('numberWidth(0, 10, 1, "with-padding")', 'textWidthPlusSpinButtonWidth(2) + paddingWidth');
shouldBe('numberWidth(0, 10, 1, "with-margin")', 'textWidthPlusSpinButtonWidth(2)');
shouldBe('numberWidth(0, 10, 1, "with-border with-padding")', 'textWidthPlusSpinButtonWidth(2) + borderWidth + paddingWidth');
debug('');
debug('The default step does not need to be considered.')
shouldBe('numberWidth(0, 1, null)', 'textWidthPlusSpinButtonWidth(1)');
shouldBe('numberWidth(0, 100, null)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(-100, 1, null)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(0.0, 1.0, null)', 'textWidthPlusSpinButtonWidth(1)');
shouldBe('numberWidth(0.5, 1.5, null)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(-0.5, 1.5, null)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(1e+10, 1e+10 + 1, null)', 'textWidthPlusSpinButtonWidth(11)');
shouldBe('numberWidth(-1e+10, 1e+10 + 1, null)', 'textWidthPlusSpinButtonWidth(12)');
debug('');
debug('Check the width of a number input when min/max/step is changed variously')
shouldBe('numberWidth(0, 1, 1)', 'textWidthPlusSpinButtonWidth(1)');
shouldBe('numberWidth(0, 10, 1)', 'textWidthPlusSpinButtonWidth(2)');
shouldBe('numberWidth(0, 100, 1)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(0, 1000, 1)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(0, 10000, 1)', 'textWidthPlusSpinButtonWidth(5)');
shouldBe('numberWidth(0, 100000, 1)', 'textWidthPlusSpinButtonWidth(6)');
shouldBe('numberWidth(0, 1000000, 1)', 'textWidthPlusSpinButtonWidth(7)');
shouldBe('numberWidth(0, 10000000, 1)', 'textWidthPlusSpinButtonWidth(8)');
shouldBe('numberWidth(0, 100000000, 1)', 'textWidthPlusSpinButtonWidth(9)');
shouldBe('numberWidth(0, 1000000000, 1)', 'textWidthPlusSpinButtonWidth(10)');
shouldBe('numberWidth(-1, 0, 1)', 'textWidthPlusSpinButtonWidth(2)');
shouldBe('numberWidth(-10, 0, 1)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(-100, 0, 1)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(-1000, 0, 1)', 'textWidthPlusSpinButtonWidth(5)');
shouldBe('numberWidth(-10000, 0, 1)', 'textWidthPlusSpinButtonWidth(6)');
shouldBe('numberWidth(-100000, 0, 1)', 'textWidthPlusSpinButtonWidth(7)');
shouldBe('numberWidth(-1000000, 0, 1)', 'textWidthPlusSpinButtonWidth(8)');
shouldBe('numberWidth(-10000000, 0, 1)', 'textWidthPlusSpinButtonWidth(9)');
shouldBe('numberWidth(-100000000, 0, 1)', 'textWidthPlusSpinButtonWidth(10)');
shouldBe('numberWidth(-1000000000, 0, 1)', 'textWidthPlusSpinButtonWidth(11)');
shouldBe('numberWidth(0, 1, 0.5)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(0, 1, 0.05)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(0, 1, 0.005)', 'textWidthPlusSpinButtonWidth(5)');
shouldBe('numberWidth(0, 1, 0.0005)', 'textWidthPlusSpinButtonWidth(6)');
shouldBe('numberWidth(0, 1, 0.00005)', 'textWidthPlusSpinButtonWidth(7)');
shouldBe('numberWidth(0, 1, 0.000005)', 'textWidthPlusSpinButtonWidth(8)');
shouldBe('numberWidth(0, 1, 0.0000005)', 'textWidthPlusSpinButtonWidth(9)');
shouldBe('numberWidth(0.5, 1, 1)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(0.05, 1, 1)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(0.005, 1, 1)', 'textWidthPlusSpinButtonWidth(5)');
shouldBe('numberWidth(1.5, 2, 1)', 'textWidthPlusSpinButtonWidth(3)');
shouldBe('numberWidth(1.05, 2, 1)', 'textWidthPlusSpinButtonWidth(4)');
shouldBe('numberWidth(1.005, 2, 1)', 'textWidthPlusSpinButtonWidth(5)');
shouldBe('numberWidth(123456, 123456, 0.0000005)', 'textWidthPlusSpinButtonWidth(14)');
debug('')
</script>
</body>
</html>