| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../../resources/js-test-pre.js"></script> |
| <script src="../../../resources/platform-helper.js"></script> |
| <script src="../resources/common.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-with-width { |
| width: 100px; |
| } |
| |
| </style> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| |
| <script> |
| |
| function widthSpecified(size) { |
| // GTK+ port overrides the style width and always increments it with the spinbuttons size. |
| if (isGtk()) |
| size += spinButtonWidth; |
| return size; |
| } |
| |
| 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-with-width">' |
| var number = document.getElementById('number'); |
| 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 = getElementByPseudoId(internals.shadowRoot(number), "-webkit-inner-spin-button").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', 'widthSpecified(100)'); |
| shouldBe('numberWithWidth.min = 0; numberWithWidth.max = 100; numberWithWidth.offsetWidth', 'widthSpecified(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'); |
| shouldThrowErrorName('number.size = null', 'IndexSizeError'); |
| 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> |
| |
| |
| <script src="../../../resources/js-test-post.js"></script> |
| </body> |
| </html> |