| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| <style> |
| .test { position: absolute; width: 50px; left: 25px; } |
| </style> |
| </head> |
| <body> |
| <p> |
| Test handling of numbers outside of the supported range. |
| </p> |
| <p> |
| <q cite="http://www.w3.org/TR/css3-values/#numeric-types">Properties may restrict numeric values to some range. If the value is outside the allowed range, the declaration is invalid and must be ignored.</q> |
| As per the <a href="http://www.w3.org/TR/css3-values/#numeric-types">CSS3 specification</a>. |
| </p> |
| <script> |
| function testSize(width, opt_expectedWidth) |
| { |
| var expectedWidth = typeof opt_expectedWidth == 'number' ? opt_expectedWidth : width; |
| |
| el.style.width = width + 'px'; |
| |
| var style = window.getComputedStyle(el, null); |
| var rect = el.getBoundingClientRect(); |
| var computedWidth = Number(style.width.replace('px', '')); |
| if (el.offsetWidth == expectedWidth && rect.width == expectedWidth && computedWidth == expectedWidth) |
| testPassed('element.width = ' + width + 'px, returns offsetWidth, rect.width and computed width as expected.'); |
| else |
| testFailed('element.width = ' + width + 'px, returns offsetWidth ' + el.offsetWidth + ', rect.width ' + rect.width + ' and computed width ' + computedWidth + ', expected ' + expectedWidth + '.'); |
| } |
| |
| |
| function testLeft(left, opt_expectedLeft) |
| { |
| var expectedLeft = typeof opt_expectedLeft == 'number' ? opt_expectedLeft : left; |
| |
| el.style.left = left + 'px'; |
| |
| var style = window.getComputedStyle(el, null); |
| var rect = el.getBoundingClientRect(); |
| var computedLeft = Number(style.left.replace('px', '')); |
| if (el.offsetLeft == expectedLeft && rect.left == expectedLeft && computedLeft == expectedLeft) |
| testPassed('element.left = ' + left + 'px, returns offsetLeft, rect.left and computed left as expected.'); |
| else |
| testFailed('element.left = ' + left + 'px, returns offsetLeft ' + el.offsetLeft + ', rect.left ' + rect.left + ' and computed left ' + computedLeft + ', expected ' + expectedLeft + '.'); |
| } |
| |
| var el = document.createElement('div'); |
| el.className = 'test'; |
| document.body.appendChild(el); |
| |
| var MAX_VALUE = 33554428; |
| var MIN_VALUE = -33554430; |
| |
| // Test setting style.width, negative values are considered invalid. |
| testSize(0); |
| testSize(1); |
| testSize(10); |
| testSize(100); |
| testSize(10000); |
| testSize(100000); |
| testSize(1000000); |
| testSize(10000000); |
| testSize(100000000, MAX_VALUE); |
| testSize(1000000000, MAX_VALUE); |
| testSize(10000000000, MAX_VALUE); |
| testSize(100000000000, MAX_VALUE); |
| testSize(1000000000000, MAX_VALUE); |
| |
| testSize(0, 0); |
| testSize(-1, 0); |
| testSize(-10, 0); |
| testSize(-100, 0); |
| testSize(-10000, 0); |
| testSize(-100000, 0); |
| testSize(-1000000, 0); |
| testSize(-10000000, 0); |
| testSize(-100000000, 0); |
| testSize(-1000000000, 0); |
| testSize(-10000000000, 0); |
| testSize(-100000000000, 0); |
| |
| // Test setting style.left, negative values are considered valid. |
| testLeft(0); |
| testLeft(1); |
| testLeft(10); |
| testLeft(100); |
| testLeft(10000); |
| testLeft(100000); |
| testLeft(1000000); |
| testLeft(10000000); |
| testLeft(100000000, MAX_VALUE); |
| testLeft(1000000000, MAX_VALUE); |
| testLeft(10000000000, MAX_VALUE); |
| testLeft(100000000000, MAX_VALUE); |
| testLeft(1000000000000, MAX_VALUE); |
| |
| testLeft(-1); |
| testLeft(-10); |
| testLeft(-100); |
| testLeft(-10000); |
| testLeft(-100000); |
| testLeft(-1000000); |
| testLeft(-10000000); |
| testLeft(-100000000, MIN_VALUE); |
| testLeft(-1000000000, MIN_VALUE); |
| testLeft(-10000000000, MIN_VALUE); |
| testLeft(-100000000000, MIN_VALUE); |
| testLeft(-1000000000000, MIN_VALUE); |
| |
| document.body.removeChild(el); |
| </script> |
| </body> |
| </html> |