Index: third_party/WebKit/LayoutTests/typedcssom/inlinestyle/calcLength.html |
diff --git a/third_party/WebKit/LayoutTests/typedcssom/inlinestyle/calcLength.html b/third_party/WebKit/LayoutTests/typedcssom/inlinestyle/calcLength.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..df4a34f99cff690df3e72d1f84dc3906da992336 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/typedcssom/inlinestyle/calcLength.html |
@@ -0,0 +1,101 @@ |
+<!DOCTYPE html> |
+<script src='../../resources/testharness.js'></script> |
+<script src='../../resources/testharnessreport.js'></script> |
+ |
+<div id='testElement'></div> |
+ |
+<script> |
+ |
+var units = [ |
+ 'px', |
+ 'percent', |
+ 'em', |
+ 'ex', |
+ 'ch', |
+ 'rem', |
+ 'vw', |
+ 'vh', |
+ 'vmin', |
+ 'vmax', |
+ 'cm', |
+ 'mm', |
+ 'in', |
+ 'pc', |
+ 'pt' |
+]; |
+ |
+function assertCalcLengthEquals(calcLength, calcDict) { |
+ for (var i = 0; i < units.length; i++) { |
+ var unit = units[i]; |
+ if (calcDict[unit] !== undefined) { |
+ assert_equals(calcLength[unit], calcDict[unit], 'Mismatch for unit ' + unit + ': '); |
+ } else { |
+ assert_equals(calcLength[unit], null, 'Expected null for unit ' + unit + ': '); |
+ } |
+ } |
+} |
+ |
+test(function() { |
+ testElement.style.width = 'calc(1.2px - 2.3% + 4.5em - 6.7ex + 8.9ch - 10rem + 1.1vw - 1.2vh + 1.3vmin - 1.4vmax + 1.56cm - 1.7mm + 1.8in - 1.9pc + 2.1pt)'; |
+ |
+ var result = testElement.styleMap.get('width'); |
+ assert_true(result instanceof CSSCalcLength); |
+ assert_equals(result.px, 1.2); |
+ assert_equals(result.percent, -2.3); |
+ assert_equals(result.em, 4.5); |
+ assert_equals(result.ex, -6.7); |
+ assert_equals(result.ch, 8.9); |
+ assert_equals(result.rem, -10); |
+ assert_equals(result.vw, 1.1); |
+ assert_equals(result.vh, -1.2); |
+ assert_equals(result.vmin, 1.3); |
+ assert_equals(result.vmax, -1.4); |
+ assert_equals(result.cm, 1.56); |
+ assert_equals(result.mm, -1.7); |
+ assert_equals(result.in, 1.8); |
+ assert_equals(result.pc, -1.9); |
+ assert_equals(result.pt, 2.1); |
+}, 'Getting with fully populated simple calc works'); |
+ |
+test(function() { |
+ testElement.style.width = 'calc(3 * (5px - 2%) - (5vmin + 1mm) / 2)'; |
+ |
+ var result = testElement.styleMap.get('width'); |
+ assert_true(result instanceof CSSCalcLength); |
+ assertCalcLengthEquals(result, {px: 15, percent: -6, vmin: -2.5, mm: -0.5}); |
+}, 'Getting when calc contains multiplication and division works'); |
+ |
+test(function() { |
+ testElement.style.width = 'calc(10px)'; |
+ |
+ var result = testElement.styleMap.get('width'); |
+ assert_true(result instanceof CSSCalcLength); |
+ assertCalcLengthEquals(result, {px: 10}); |
+}, 'Getting with only px works'); |
+ |
+test(function() { |
+ testElement.style.width = 'calc(10%)'; |
+ |
+ var result = testElement.styleMap.get('width'); |
+ assert_true(result instanceof CSSCalcLength); |
+ assertCalcLengthEquals(result, {percent: 10}); |
+}, 'Getting with only % works'); |
+ |
+test(function() { |
+ testElement.style.width = 'calc(6px + 10%)'; |
+ |
+ var result = testElement.styleMap.get('width'); |
+ assert_true(result instanceof CSSCalcLength); |
+ assertCalcLengthEquals(result, {px:6, percent: 10}); |
+}, 'Getting with a px and % works'); |
+ |
+test(function() { |
+ testElement.styleMap.set('width', new CSSCalcLength({vmin: 5, px: 10})); |
+ |
+ assert_equals(testElement.style.width, 'calc(10px + 5vmin)'); |
+ var result = testElement.styleMap.get('width'); |
+ assert_true(result instanceof CSSCalcLength); |
+ assertCalcLengthEquals(result, {px: 10, vmin: 5}); |
+}, 'Setting round trips'); |
+ |
+</script> |