OLD | NEW |
(Empty) | |
| 1 <!doctype html> |
| 2 <title>SVGAngle 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 <defs><marker/></defs> |
| 8 </svg> |
| 9 </div> |
| 10 <div id=log></div> |
| 11 <script> |
| 12 var svg = document.querySelector("svg"); |
| 13 var marker = document.querySelector("marker"); |
| 14 var EPSILON = Math.pow(2, -8); |
| 15 var angles = [ 10, 0, 360, 500, 90, 180, 45, 25.9, 145, 270, 0.5, 0.2, 1.37, 3.1
4159 /* Math.PI */, 0.523599 /* Math.PI/6 */ ]; |
| 16 var units = { |
| 17 "" : 1, |
| 18 "deg": 2, |
| 19 "rad": 3, |
| 20 "grad": 4, |
| 21 "turn": 5 |
| 22 }; |
| 23 var highestExposedUnit = 4; // SVG_ANGLETYPE_GRAD |
| 24 var unitconstants = { |
| 25 "UNKNOWN" : 0, |
| 26 "UNSPECIFIED": 1, |
| 27 "DEG": 2, |
| 28 "RAD": 3, |
| 29 "GRAD": 4, |
| 30 }; |
| 31 var nonexposedunitconstants = { |
| 32 "TURN": 5 |
| 33 }; |
| 34 |
| 35 function convertTo(value, unit, outunit) { |
| 36 switch(unit) { |
| 37 case "": |
| 38 case "deg": |
| 39 switch(outunit) { |
| 40 case "": |
| 41 case "deg": |
| 42 return value; |
| 43 case "rad": |
| 44 return value*(Math.PI/180); |
| 45 case "grad": |
| 46 return value*(400/360); |
| 47 case "turn": |
| 48 return value/360; |
| 49 } |
| 50 case "rad": |
| 51 switch(outunit) { |
| 52 case "": |
| 53 case "deg": |
| 54 return value * 180 / Math.PI; |
| 55 case "rad": |
| 56 return value; |
| 57 case "grad": |
| 58 return value * 180 / Math.PI * 400 / 360
; |
| 59 case "turn": |
| 60 return value / (2 * Math.PI); |
| 61 } |
| 62 case "grad": |
| 63 switch(outunit) { |
| 64 case "": |
| 65 case "deg": |
| 66 return value * 360 / 400; |
| 67 case "rad": |
| 68 return value * Math.PI * 2 / 400; |
| 69 case "grad": |
| 70 return value; |
| 71 case "turn": |
| 72 return value / 400; |
| 73 } |
| 74 case "turn": |
| 75 switch(outunit) { |
| 76 case "": |
| 77 case "deg": |
| 78 return value * 360; |
| 79 case "rad": |
| 80 return value * Math.PI * 2; |
| 81 case "grad": |
| 82 return value * 400; |
| 83 case "turn": |
| 84 return value; |
| 85 } |
| 86 } |
| 87 } |
| 88 |
| 89 function createAngle(valuestr) { |
| 90 var angle = svg.createSVGAngle(); |
| 91 angle.valueAsString = valuestr; |
| 92 return angle; |
| 93 } |
| 94 |
| 95 for(var unit in units) { |
| 96 test(function() { |
| 97 var result = undefined; |
| 98 try { |
| 99 var a = createAngle(47 + unit); |
| 100 result = a.unitType; |
| 101 } |
| 102 catch(e) {} |
| 103 if (units[unit] > highestExposedUnit) |
| 104 assert_equals(result, undefined); |
| 105 else |
| 106 assert_equals(result, units[unit]); |
| 107 }, "SVGAngle(47" + unit + ").unitType"); |
| 108 } |
| 109 |
| 110 for(var constant in unitconstants) { |
| 111 var str = "SVG_ANGLETYPE_" + constant; |
| 112 test(function() { |
| 113 assert_exists(SVGAngle, str, ""); |
| 114 }, "SVGAngle." + str); |
| 115 } |
| 116 for(var constant in nonexposedunitconstants) { |
| 117 var str = "SVG_ANGLETYPE_" + constant; |
| 118 test(function() { |
| 119 assert_not_exists(SVGAngle, str, ""); |
| 120 }, "SVGAngle." + str); |
| 121 } |
| 122 |
| 123 angles.forEach(function(angle) { |
| 124 for(var unit in units) { |
| 125 var anglestr = angle + unit; |
| 126 var ref; |
| 127 try { |
| 128 ref = createAngle(anglestr); |
| 129 } |
| 130 catch(e) { |
| 131 continue; |
| 132 } |
| 133 |
| 134 test(function() { |
| 135 assert_approx_equals(angle, ref.valueInSpecifiedUnits, E
PSILON); |
| 136 }, "SVGAngle(" + anglestr + ").valueInSpecifiedUnits"); |
| 137 |
| 138 try { |
| 139 marker.setAttribute("orient", anglestr); |
| 140 |
| 141 test(function() { |
| 142 assert_equals(marker.orientAngle.baseVal.valueAs
String, anglestr); |
| 143 }, "orient=\"" + anglestr + "\".valueAsString"); |
| 144 |
| 145 test(function() { |
| 146 assert_approx_equals(marker.orientAngle.baseVal.
value, convertTo(angle, unit, "deg"), EPSILON); |
| 147 }, "orient=\"" + anglestr + "\".value"); |
| 148 } |
| 149 finally { |
| 150 marker.removeAttribute("orient"); |
| 151 } |
| 152 |
| 153 for (var otherunit in units) { |
| 154 test(function() { |
| 155 var a = createAngle(anglestr); |
| 156 try { |
| 157 a.convertToSpecifiedUnits(units[otheruni
t]); |
| 158 } |
| 159 catch(e) {} |
| 160 |
| 161 // unknown unit |
| 162 if (units[otherunit] > highestExposedUnit) |
| 163 assert_approx_equals(a.valueInSpecifiedU
nits, angle, EPSILON); |
| 164 else |
| 165 assert_approx_equals(a.valueInSpecifiedU
nits, convertTo(angle, unit, otherunit), EPSILON); |
| 166 }, "SVGAngle(" + anglestr + ").convertToSpecifiedUnits("
+ units[otherunit] + " /*" + (otherunit ? otherunit : "unspecified") + "*/)"); |
| 167 |
| 168 test(function() { |
| 169 var result = ""; |
| 170 try { |
| 171 var a = createAngle(47 + otherunit); |
| 172 a.newValueSpecifiedUnits(units[unit], an
gle); |
| 173 result = a.valueAsString; |
| 174 } |
| 175 catch(e) { |
| 176 } |
| 177 |
| 178 // unknown unit |
| 179 if (units[unit] > highestExposedUnit || units[ot
herunit] > highestExposedUnit) |
| 180 assert_equals(result, ""); |
| 181 else |
| 182 assert_equals(result, ref.valueAsString)
; |
| 183 }, "newValueSpecifiedUnits(" + units[unit] + ", " + angl
e + ")" ); |
| 184 }; |
| 185 } |
| 186 }); |
| 187 |
| 188 </script> |
OLD | NEW |