| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <script src='../resources/testharness.js'></script> | |
| 3 <script src='../resources/testharnessreport.js'></script> | |
| 4 | |
| 5 <script> | |
| 6 | |
| 7 test(function() { | |
| 8 var simpleLength = new CSSSimpleLength(1, 'px'); | |
| 9 assert_equals(simpleLength.value, 1); | |
| 10 assert_equals(simpleLength.type, 'px'); | |
| 11 | |
| 12 simpleLength.value = 2; | |
| 13 simpleLength.type = 'em'; | |
| 14 | |
| 15 assert_equals(simpleLength.value, 1); | |
| 16 assert_equals(simpleLength.type, 'px'); | |
| 17 }, 'CSSSimpleLengths are immutable'); | |
| 18 | |
| 19 test(function() { | |
| 20 var units = ['px', 'percent', 'em', 'ex', 'ch', 'rem', 'vw', 'vh', 'vmin', 'vm
ax', 'cm', 'mm', 'in', 'pc', 'pt']; | |
| 21 for (var i = 0; i < units.length; ++i) { | |
| 22 var simpleLength = new CSSSimpleLength(i, units[i]); | |
| 23 assert_equals(simpleLength.type, units[i]); | |
| 24 } | |
| 25 }, 'Each unit type is returned according to the spec'); | |
| 26 | |
| 27 test(function() { | |
| 28 var simpleLength1 = new CSSSimpleLength(5.1, 'px'); | |
| 29 var simpleLength2 = new CSSSimpleLength(10, 'px'); | |
| 30 | |
| 31 var result = simpleLength1.add(simpleLength2); | |
| 32 | |
| 33 assert_not_equals(simpleLength1, result); | |
| 34 assert_not_equals(simpleLength2, result); | |
| 35 assert_equals(result.constructor.name, CSSSimpleLength.name); | |
| 36 assert_equals(result.value, 15.1); | |
| 37 assert_equals(result.type, 'px'); | |
| 38 }, 'Adding CSSSimpleLengths with the same unit produces a new CSSSimpleLength wi
th the correct value.'); | |
| 39 | |
| 40 test(function() { | |
| 41 var simpleLength1 = new CSSSimpleLength(5.1, 'px'); | |
| 42 var simpleLength2 = new CSSSimpleLength(10, 'percent'); | |
| 43 | |
| 44 var result = simpleLength1.add(simpleLength2); | |
| 45 | |
| 46 assert_equals(result.constructor.name, CSSCalcLength.name); | |
| 47 assert_equals(result.px, 5.1); | |
| 48 assert_equals(result.percent, 10); | |
| 49 }, 'Adding CSSSimpleLengths with different units produces a calc length with the
correct values.'); | |
| 50 | |
| 51 test(function() { | |
| 52 var simpleLength1 = new CSSSimpleLength(5.1, 'px'); | |
| 53 var simpleLength2 = new CSSSimpleLength(10, 'px'); | |
| 54 | |
| 55 var result = simpleLength1.subtract(simpleLength2); | |
| 56 | |
| 57 assert_not_equals(simpleLength1, result); | |
| 58 assert_not_equals(simpleLength2, result); | |
| 59 assert_equals(result.constructor.name, CSSSimpleLength.name); | |
| 60 assert_equals(result.value, -4.9); | |
| 61 assert_equals(result.type, 'px'); | |
| 62 }, 'Subtracting CSSSimpleLengths with the same unit produces a new CSSSimpleLeng
th with the correct value.'); | |
| 63 | |
| 64 test(function() { | |
| 65 var simpleLength1 = new CSSSimpleLength(5.1, 'px'); | |
| 66 var simpleLength2 = new CSSSimpleLength(10, 'percent'); | |
| 67 | |
| 68 var result = simpleLength1.subtract(simpleLength2); | |
| 69 | |
| 70 assert_equals(result.constructor.name, CSSCalcLength.name); | |
| 71 assert_equals(result.px, 5.1); | |
| 72 assert_equals(result.percent, -10); | |
| 73 }, 'Subtracting CSSSimpleLengths with different units produces a calc length wit
h the correct values.'); | |
| 74 | |
| 75 test(function() { | |
| 76 var simpleLength = new CSSSimpleLength(5.2, 'px'); | |
| 77 var result = simpleLength.multiply(4); | |
| 78 | |
| 79 assert_not_equals(simpleLength, result); | |
| 80 assert_equals(result.constructor.name, CSSSimpleLength.name); | |
| 81 assert_approx_equals(result.value, 20.8, 0.00000001); | |
| 82 assert_equals(result.type, 'px'); | |
| 83 }, 'Multiplying a CSSSimpleLength produces a new CSSSimpleLength with the correc
t value.'); | |
| 84 | |
| 85 test(function() { | |
| 86 var simpleLength = new CSSSimpleLength(25, 'px'); | |
| 87 var result = simpleLength.divide(2); | |
| 88 | |
| 89 assert_not_equals(simpleLength, result); | |
| 90 assert_equals(result.constructor.name, CSSSimpleLength.name); | |
| 91 assert_equals(result.value, 12.5); | |
| 92 assert_equals(result.type, 'px'); | |
| 93 }, 'Dividing a CSSSimpleLength produces a new CSSSimpleLength with the correct v
alue.'); | |
| 94 | |
| 95 test(function() { | |
| 96 var simpleLength = new CSSSimpleLength(1, 'px'); | |
| 97 assert_throws(new RangeError(), function() { simpleLength.divide(0); }); | |
| 98 }, 'Dividing by zero throws a RangeError'); | |
| 99 | |
| 100 test(function() { | |
| 101 var values = [ | |
| 102 {input: new CSSSimpleLength(1, 'px'), cssText: '1px' }, | |
| 103 {input: new CSSSimpleLength(2, 'percent'), cssText: '2%' }, | |
| 104 {input: new CSSSimpleLength(3, '%'), cssText: '3%' }, | |
| 105 {input: new CSSSimpleLength(4, 'em'), cssText: '4em' }, | |
| 106 {input: new CSSSimpleLength(5, 'ex'), cssText: '5ex' }, | |
| 107 {input: new CSSSimpleLength(6, 'ch'), cssText: '6ch' }, | |
| 108 {input: new CSSSimpleLength(7, 'rem'), cssText: '7rem' }, | |
| 109 {input: new CSSSimpleLength(8, 'vw'), cssText: '8vw' }, | |
| 110 {input: new CSSSimpleLength(9, 'vh'), cssText: '9vh' }, | |
| 111 {input: new CSSSimpleLength(10, 'vmin'), cssText: '10vmin' }, | |
| 112 {input: new CSSSimpleLength(11, 'vmax'), cssText: '11vmax' }, | |
| 113 {input: new CSSSimpleLength(12, 'cm'), cssText: '12cm' }, | |
| 114 {input: new CSSSimpleLength(13, 'mm'), cssText: '13mm' }, | |
| 115 {input: new CSSSimpleLength(14, 'in'), cssText: '14in' }, | |
| 116 {input: new CSSSimpleLength(15, 'pc'), cssText: '15pc' }, | |
| 117 {input: new CSSSimpleLength(16, 'pt'), cssText: '16pt' }, | |
| 118 // Same again to double check that it's case insensitive. | |
| 119 {input: new CSSSimpleLength(1, 'PX'), cssText: '1px' }, | |
| 120 {input: new CSSSimpleLength(2, 'PERCENT'), cssText: '2%' }, | |
| 121 {input: new CSSSimpleLength(3, '%'), cssText: '3%' }, | |
| 122 {input: new CSSSimpleLength(4, 'EM'), cssText: '4em' }, | |
| 123 {input: new CSSSimpleLength(5, 'EX'), cssText: '5ex' }, | |
| 124 {input: new CSSSimpleLength(6, 'CH'), cssText: '6ch' }, | |
| 125 {input: new CSSSimpleLength(7, 'REM'), cssText: '7rem' }, | |
| 126 {input: new CSSSimpleLength(8, 'VW'), cssText: '8vw' }, | |
| 127 {input: new CSSSimpleLength(9, 'VH'), cssText: '9vh' }, | |
| 128 {input: new CSSSimpleLength(10, 'VMIN'), cssText: '10vmin' }, | |
| 129 {input: new CSSSimpleLength(11, 'VMAX'), cssText: '11vmax' }, | |
| 130 {input: new CSSSimpleLength(12, 'CM'), cssText: '12cm' }, | |
| 131 {input: new CSSSimpleLength(13, 'MM'), cssText: '13mm' }, | |
| 132 {input: new CSSSimpleLength(14, 'IN'), cssText: '14in' }, | |
| 133 {input: new CSSSimpleLength(15, 'PC'), cssText: '15pc' }, | |
| 134 {input: new CSSSimpleLength(16, 'PT'), cssText: '16pt' }, | |
| 135 ]; | |
| 136 | |
| 137 for (var i = 0; i < values.length; ++i) { | |
| 138 assert_equals(values[i].input.cssText, values[i].cssText); | |
| 139 } | |
| 140 }, 'cssText is generated correctly for each unit type.'); | |
| 141 | |
| 142 test(function() { | |
| 143 var values = [ | |
| 144 {value: NaN, unit: 'px'}, | |
| 145 {value: Infinity, unit: 'px'}, | |
| 146 {value: -Infinity, unit: 'px'}, | |
| 147 {value: 5, unit: 'puppies'} | |
| 148 ]; | |
| 149 | |
| 150 for (var i = 0; i < values.length; ++i) { | |
| 151 assert_throws(null, function() { new CSSSimpleLength(values[i].value, values
[i].unit); }); | |
| 152 } | |
| 153 }, 'Invalid input throws an exception.'); | |
| 154 | |
| 155 </script> | |
| 156 | |
| 157 <body> | |
| 158 </body> | |
| OLD | NEW |