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 |