| Index: LayoutTests/fast/svg/svgangle.html
|
| diff --git a/LayoutTests/fast/svg/svgangle.html b/LayoutTests/fast/svg/svgangle.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e56cd696a9d4be7d424e930b90629149c6fd860c
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/svg/svgangle.html
|
| @@ -0,0 +1,188 @@
|
| +<!doctype html>
|
| +<title>SVGAngle tests</title>
|
| +<script src=../../resources/testharness.js></script>
|
| +<script src=../../resources/testharnessreport.js></script>
|
| +<div id="testcontainer">
|
| +<svg width="1" height="1" visibility="hidden">
|
| +<defs><marker/></defs>
|
| +</svg>
|
| +</div>
|
| +<div id=log></div>
|
| +<script>
|
| +var svg = document.querySelector("svg");
|
| +var marker = document.querySelector("marker");
|
| +var EPSILON = Math.pow(2, -8);
|
| +var angles = [ 10, 0, 360, 500, 90, 180, 45, 25.9, 145, 270, 0.5, 0.2, 1.37, 3.14159 /* Math.PI */, 0.523599 /* Math.PI/6 */ ];
|
| +var units = {
|
| + "" : 1,
|
| + "deg": 2,
|
| + "rad": 3,
|
| + "grad": 4,
|
| + "turn": 5
|
| +};
|
| +var highestExposedUnit = 4; // SVG_ANGLETYPE_GRAD
|
| +var unitconstants = {
|
| + "UNKNOWN" : 0,
|
| + "UNSPECIFIED": 1,
|
| + "DEG": 2,
|
| + "RAD": 3,
|
| + "GRAD": 4,
|
| +};
|
| +var nonexposedunitconstants = {
|
| + "TURN": 5
|
| +};
|
| +
|
| +function convertTo(value, unit, outunit) {
|
| + switch(unit) {
|
| + case "":
|
| + case "deg":
|
| + switch(outunit) {
|
| + case "":
|
| + case "deg":
|
| + return value;
|
| + case "rad":
|
| + return value*(Math.PI/180);
|
| + case "grad":
|
| + return value*(400/360);
|
| + case "turn":
|
| + return value/360;
|
| + }
|
| + case "rad":
|
| + switch(outunit) {
|
| + case "":
|
| + case "deg":
|
| + return value * 180 / Math.PI;
|
| + case "rad":
|
| + return value;
|
| + case "grad":
|
| + return value * 180 / Math.PI * 400 / 360;
|
| + case "turn":
|
| + return value / (2 * Math.PI);
|
| + }
|
| + case "grad":
|
| + switch(outunit) {
|
| + case "":
|
| + case "deg":
|
| + return value * 360 / 400;
|
| + case "rad":
|
| + return value * Math.PI * 2 / 400;
|
| + case "grad":
|
| + return value;
|
| + case "turn":
|
| + return value / 400;
|
| + }
|
| + case "turn":
|
| + switch(outunit) {
|
| + case "":
|
| + case "deg":
|
| + return value * 360;
|
| + case "rad":
|
| + return value * Math.PI * 2;
|
| + case "grad":
|
| + return value * 400;
|
| + case "turn":
|
| + return value;
|
| + }
|
| + }
|
| +}
|
| +
|
| +function createAngle(valuestr) {
|
| + var angle = svg.createSVGAngle();
|
| + angle.valueAsString = valuestr;
|
| + return angle;
|
| +}
|
| +
|
| +for(var unit in units) {
|
| + test(function() {
|
| + var result = undefined;
|
| + try {
|
| + var a = createAngle(47 + unit);
|
| + result = a.unitType;
|
| + }
|
| + catch(e) {}
|
| + if (units[unit] > highestExposedUnit)
|
| + assert_equals(result, undefined);
|
| + else
|
| + assert_equals(result, units[unit]);
|
| + }, "SVGAngle(47" + unit + ").unitType");
|
| +}
|
| +
|
| +for(var constant in unitconstants) {
|
| + var str = "SVG_ANGLETYPE_" + constant;
|
| + test(function() {
|
| + assert_exists(SVGAngle, str, "");
|
| + }, "SVGAngle." + str);
|
| +}
|
| +for(var constant in nonexposedunitconstants) {
|
| + var str = "SVG_ANGLETYPE_" + constant;
|
| + test(function() {
|
| + assert_not_exists(SVGAngle, str, "");
|
| + }, "SVGAngle." + str);
|
| +}
|
| +
|
| +angles.forEach(function(angle) {
|
| + for(var unit in units) {
|
| + var anglestr = angle + unit;
|
| + var ref;
|
| + try {
|
| + ref = createAngle(anglestr);
|
| + }
|
| + catch(e) {
|
| + continue;
|
| + }
|
| +
|
| + test(function() {
|
| + assert_approx_equals(angle, ref.valueInSpecifiedUnits, EPSILON);
|
| + }, "SVGAngle(" + anglestr + ").valueInSpecifiedUnits");
|
| +
|
| + try {
|
| + marker.setAttribute("orient", anglestr);
|
| +
|
| + test(function() {
|
| + assert_equals(marker.orientAngle.baseVal.valueAsString, anglestr);
|
| + }, "orient=\"" + anglestr + "\".valueAsString");
|
| +
|
| + test(function() {
|
| + assert_approx_equals(marker.orientAngle.baseVal.value, convertTo(angle, unit, "deg"), EPSILON);
|
| + }, "orient=\"" + anglestr + "\".value");
|
| + }
|
| + finally {
|
| + marker.removeAttribute("orient");
|
| + }
|
| +
|
| + for (var otherunit in units) {
|
| + test(function() {
|
| + var a = createAngle(anglestr);
|
| + try {
|
| + a.convertToSpecifiedUnits(units[otherunit]);
|
| + }
|
| + catch(e) {}
|
| +
|
| + // unknown unit
|
| + if (units[otherunit] > highestExposedUnit)
|
| + assert_approx_equals(a.valueInSpecifiedUnits, angle, EPSILON);
|
| + else
|
| + assert_approx_equals(a.valueInSpecifiedUnits, convertTo(angle, unit, otherunit), EPSILON);
|
| + }, "SVGAngle(" + anglestr + ").convertToSpecifiedUnits(" + units[otherunit] + " /*" + (otherunit ? otherunit : "unspecified") + "*/)");
|
| +
|
| + test(function() {
|
| + var result = "";
|
| + try {
|
| + var a = createAngle(47 + otherunit);
|
| + a.newValueSpecifiedUnits(units[unit], angle);
|
| + result = a.valueAsString;
|
| + }
|
| + catch(e) {
|
| + }
|
| +
|
| + // unknown unit
|
| + if (units[unit] > highestExposedUnit || units[otherunit] > highestExposedUnit)
|
| + assert_equals(result, "");
|
| + else
|
| + assert_equals(result, ref.valueAsString);
|
| + }, "newValueSpecifiedUnits(" + units[unit] + ", " + angle + ")" );
|
| + };
|
| + }
|
| +});
|
| +
|
| +</script>
|
|
|