OLD | NEW |
---|---|
(Empty) | |
1 <!doctype html> | |
2 <title>SVGlength tests</title> | |
3 <script src=../../resources/testharness.js></script> | |
4 <script src=../../resources/testharnessreport.js></script> | |
5 <div id="testcontainer"> | |
6 <svg width="1" height="1" visibility="hidden"> | |
7 </svg> | |
8 </div> | |
9 <div id=log></div> | |
10 <script> | |
11 var svg = document.querySelector("svg"); | |
12 var EPSILON = Math.pow(2, -8); | |
13 var lengths = [ 10, 0, 360, 500, 90, 180, 45, 25.9]; | |
14 | |
15 var units = { | |
16 "" : 1, | |
Erik Dahlström (inactive)
2015/03/31 09:20:49
indentation seems a bit off here (and below)
Shanmuga Pandi
2015/04/01 15:01:37
Done.
| |
17 "%": 2, | |
18 "em": 3, | |
19 "ex": 4, | |
20 "px": 5, | |
21 "cm": 6, | |
22 "mm": 7, | |
23 "in": 8, | |
24 "pt": 9, | |
25 "pc": 10, | |
26 "rem": 11 | |
27 }; | |
28 var highestExposedUnit = 10; // SVG_LENGTHTYPE_PC | |
29 var unitconstants = { | |
30 "UNKNOWN" : 0, | |
31 "NUMBER": 1, | |
32 "PERCENTAGE": 2, | |
33 "EMS": 3, | |
34 "EXS": 4, | |
35 "PX": 5, | |
36 "CM": 6, | |
37 "MM": 7, | |
38 "IN": 8, | |
39 "PT": 9, | |
40 "PC": 10, | |
41 }; | |
42 var nonexposedunitconstants = { | |
43 "REMS": 11 | |
44 }; | |
45 | |
46 function convertTo(value, unit, outunit) { | |
47 var userUnits; | |
48 var cssPixelsPerInch = 96; | |
49 var cssPixelsPerCentimeter = cssPixelsPerInch / 2.54; //2.54 cm/in | |
50 var cssPixelsPerMillimeter = cssPixelsPerCentimeter / 10; | |
51 var cssPixelsPerPoint = cssPixelsPerInch / 72; | |
52 var cssPixelsPerPica = cssPixelsPerInch / 6; | |
53 | |
54 switch(unit) { | |
55 case "": | |
56 case "px": | |
57 userUnits = value; | |
58 break; | |
59 case "%": | |
60 case "em": | |
61 case "ex": | |
62 case "rem": | |
63 return value; | |
64 case "cm": | |
65 userUnits = value * cssPixelsPerCentimeter; | |
66 break; | |
67 case "mm": | |
68 userUnits = value * cssPixelsPerMillimeter; | |
69 break; | |
70 case "in": | |
71 userUnits = value * cssPixelsPerInch; | |
72 break; | |
73 case "pt": | |
74 userUnits = value * cssPixelsPerPoint; | |
75 break; | |
76 case "pc": | |
77 userUnits = value * cssPixelsPerPica; | |
78 break; | |
79 } | |
80 | |
81 switch(outunit) { | |
82 case "": | |
83 case "px": | |
84 return userUnits; | |
85 case "%": | |
86 case "em": | |
87 case "ex": | |
88 case "rem": | |
89 return value; | |
90 case "cm": | |
91 return userUnits / cssPixelsPerCentimeter; | |
92 case "mm": | |
93 return userUnits / cssPixelsPerMillimeter; | |
94 case "in": | |
95 return userUnits / cssPixelsPerInch; | |
96 case "pt": | |
97 return userUnits / cssPixelsPerPoint; | |
98 case "pc": | |
99 return userUnits / cssPixelsPerPica; | |
100 } | |
101 } | |
102 | |
103 function createLength(valuestr) { | |
104 var length = svg.createSVGLength(); | |
105 length.valueAsString = valuestr; | |
106 return length; | |
107 } | |
108 | |
109 for(var unit in units) { | |
110 test(function() { | |
111 var result = undefined; | |
112 try { | |
113 var a = createLength(10 + unit); | |
114 result = a.unitType; | |
115 } | |
116 catch(e) {} | |
117 if (units[unit] > highestExposedUnit) | |
118 assert_equals(result, undefined); | |
119 else | |
120 assert_equals(result, units[unit]); | |
121 }, "SVGLength(10" + unit + ").unitType"); | |
122 } | |
123 | |
124 for(var constant in unitconstants) { | |
125 var str = "SVG_LENGTHTYPE_" + constant; | |
126 test(function() { | |
127 assert_exists(SVGLength, str, ""); | |
128 }, "SVGLength." + str); | |
129 } | |
130 for(var constant in nonexposedunitconstants) { | |
131 var str = "SVG_LENGTHTYPE_" + constant; | |
132 test(function() { | |
133 assert_not_exists(SVGLength, str, ""); | |
134 }, "SVGLength." + str); | |
135 } | |
136 | |
137 lengths.forEach(function(length) { | |
138 for(var unit in units) { | |
139 var lengthstr = length + unit; | |
140 var ref; | |
141 try { | |
142 ref = createLength(lengthstr); | |
143 } | |
144 catch(e) { | |
145 continue; | |
146 } | |
147 | |
148 test(function() { | |
149 assert_approx_equals(length, ref.valueInSpecifiedUnits, EPSILON); | |
150 }, "SVGLength(" + lengthstr + ").valueInSpecifiedUnits"); | |
151 | |
152 for (var otherunit in units) { | |
153 test(function() { | |
154 var a = createLength(lengthstr); | |
155 try { | |
156 a.convertToSpecifiedUnits(units[otheruni t]); | |
157 } | |
158 catch(e) {} | |
159 | |
160 // unknown unit | |
161 if (units[otherunit] > highestExposedUnit) | |
162 assert_approx_equals(a.valueInSpecifiedU nits, length, EPSILON); | |
163 else | |
164 assert_approx_equals(a.valueInSpecifiedU nits, convertTo(length, unit, otherunit), EPSILON); | |
165 }, "SVGLength(" + lengthstr + ").convertToSpecifiedUnits (" + units[otherunit] + " /*" + (otherunit ? otherunit : "unspecified") + "*/)") ; | |
166 | |
167 test(function() { | |
168 var result = ""; | |
169 try { | |
170 var a = createLength(47 + otherunit); | |
171 a.newValueSpecifiedUnits(units[unit], le ngth); | |
172 result = a.valueAsString; | |
173 } | |
174 catch(e) { | |
175 } | |
176 | |
177 // unknown unit | |
178 if (units[unit] > highestExposedUnit || units[ot herunit] > highestExposedUnit) | |
179 assert_equals(result, ""); | |
180 else | |
181 assert_equals(result, ref.valueAsString) ; | |
182 }, "newValueSpecifiedUnits(" + units[unit] + ", " + leng th + ")" ); | |
183 }; | |
184 | |
185 } | |
186 }); | |
187 | |
188 | |
189 </script> | |
OLD | NEW |