| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| description("This test checks the use of SVGAnimatedEnumeration within SVGMarkerElement"); |
| |
| var markerElement = document.createElementNS("http://www.w3.org/2000/svg", "marker"); |
| markerElement.setAttribute("markerUnits", "userSpaceOnUse"); |
| markerElement.setAttribute("orient", "auto"); |
| |
| var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg"); |
| |
| // markerUnits |
| debug(""); |
| debug("Check initial 'markerUnits' value"); |
| shouldBeEqualToString("markerElement.markerUnits.toString()", "[object SVGAnimatedEnumeration]"); |
| shouldBeEqualToString("typeof(markerElement.markerUnits.baseVal)", "number"); |
| shouldBe("markerElement.markerUnits.baseVal", "SVGMarkerElement.SVG_MARKERUNITS_USERSPACEONUSE"); |
| |
| debug(""); |
| debug("Switch to 'strokeWidth'"); |
| shouldBe("markerElement.markerUnits.baseVal = SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH", "SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH"); |
| shouldBe("markerElement.markerUnits.baseVal", "SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH"); |
| shouldBeEqualToString("markerElement.getAttribute('markerUnits')", "strokeWidth"); |
| |
| debug(""); |
| debug("Try setting invalid values"); |
| shouldThrow("markerElement.markerUnits.baseVal = 3"); |
| shouldBe("markerElement.markerUnits.baseVal", "SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH"); |
| shouldBeEqualToString("markerElement.getAttribute('markerUnits')", "strokeWidth"); |
| |
| shouldThrow("markerElement.markerUnits.baseVal = -1"); |
| shouldBe("markerElement.markerUnits.baseVal", "SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH"); |
| shouldBeEqualToString("markerElement.getAttribute('markerUnits')", "strokeWidth"); |
| |
| shouldThrow("markerElement.markerUnits.baseVal = 0"); |
| shouldBe("markerElement.markerUnits.baseVal", "SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH"); |
| shouldBeEqualToString("markerElement.getAttribute('markerUnits')", "strokeWidth"); |
| |
| debug(""); |
| debug("Switch to 'userSpaceOnUse'"); |
| shouldBe("markerElement.markerUnits.baseVal = SVGMarkerElement.SVG_MARKERUNITS_USERSPACEONUSE", "SVGMarkerElement.SVG_MARKERUNITS_USERSPACEONUSE"); |
| shouldBe("markerElement.markerUnits.baseVal", "SVGMarkerElement.SVG_MARKERUNITS_USERSPACEONUSE"); |
| shouldBeEqualToString("markerElement.getAttribute('markerUnits')", "userSpaceOnUse"); |
| |
| // orientType |
| debug(""); |
| debug("Check initial 'orient' value"); |
| shouldBeEqualToString("markerElement.orientType.toString()", "[object SVGAnimatedEnumeration]"); |
| shouldBeEqualToString("typeof(markerElement.orientType.baseVal)", "number"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "0"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_UNSPECIFIED"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| |
| debug(""); |
| debug("Switch to 'auto-start-reverse' value - by modifying the orient attribute."); |
| shouldNotThrow("markerElement.setAttribute('orient', 'auto-start-reverse')"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "0"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_UNSPECIFIED"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_UNKNOWN"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "auto-start-reverse"); |
| |
| debug(""); |
| debug("Switch to 'Pi/2 rad' value - via setOrientToAngle()"); |
| shouldBeUndefined("anglePiHalfRad = svgElement.createSVGAngle(); anglePiHalfRad.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_RAD, (Math.PI / 2).toFixed(2))"); |
| shouldBeUndefined("markerElement.setOrientToAngle(anglePiHalfRad)"); |
| shouldBeEqualToString("markerElement.orientAngle.baseVal.value.toFixed(1)", "90.0"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_RAD"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", (Math.PI / 2).toFixed(2) + "rad"); |
| |
| debug(""); |
| debug("Switch to 'auto' value - via setOrientToAuto()"); |
| shouldBeUndefined("markerElement.setOrientToAuto()"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "0"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_UNSPECIFIED"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "auto"); |
| |
| debug(""); |
| debug("Switch to '20deg' value - via setOrientToAngle()"); |
| shouldBeUndefined("angle20deg = svgElement.createSVGAngle(); angle20deg.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_DEG, 20)"); |
| shouldBeUndefined("markerElement.setOrientToAngle(angle20deg)"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "20"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_DEG"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "20deg"); |
| |
| debug(""); |
| debug("Switch to '10deg' value"); |
| shouldBe("markerElement.orientAngle.baseVal.value = 10", "10"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "10"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_DEG"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "10deg"); |
| |
| debug(""); |
| debug("Switch to 'auto' value - by modifying orientType, this shouldn't change the orientAngle, but change the 'orient' attribute"); |
| shouldBe("markerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_AUTO", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "10"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_DEG"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "auto"); |
| |
| debug(""); |
| debug("Switch to '10deg' value - by modifying orientType to be angle again, the 10deg should be preserved in the orientAngle, and the 'orient' attribute should change"); |
| shouldBe("markerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "10"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_DEG"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "10deg"); |
| |
| debug(""); |
| debug("Try setting invalid values"); |
| shouldThrow("markerElement.orientType.baseVal = 3"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "10deg"); |
| |
| shouldThrow("markerElement.orientType.baseVal = -1"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "10deg"); |
| |
| shouldThrow("markerElement.orientType.baseVal = 0"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "10deg"); |
| |
| debug(""); |
| debug("Test case sensitivity of attributes - try setting invalid values"); |
| shouldNotThrow("markerElement.setAttribute('orient', 'AUTO-START-REVERSE')"); |
| // The line below fails as a result of https://bugs.webkit.org/show_bug.cgi?id=154141 |
| // The attribute value is not updated to the invalid value. |
| // The expected result recognises this and should be updated when the above bug |
| // is resolved. |
| // What's important here though is that the DOM values are unchanged, and this |
| // is demonstrated correctly. |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "AUTO-START-REVERSE"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| |
| shouldNotThrow("markerElement.setAttribute('orient', 'AUTO')"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "AUTO"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| |
| debug(""); |
| debug("Switch back to 'auto' value"); |
| shouldBe("markerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_AUTO", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "10"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_DEG"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "auto"); |
| |
| debug(""); |
| debug("Switch to '100grad' value - only touch orientAngle, shouldn't change orientType nor the 'orient' attribute"); |
| shouldBeUndefined("markerElement.orientAngle.baseVal.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_GRAD, 100)"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "90"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_GRAD"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "auto"); |
| |
| debug(""); |
| debug("Finish switching to '100grad' value - by modifying the orientType to angle"); |
| shouldBe("markerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBe("markerElement.orientAngle.baseVal.value", "90"); |
| shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_GRAD"); |
| shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE"); |
| shouldBeEqualToString("markerElement.getAttribute('orient')", "100grad"); |
| |
| successfullyParsed = true; |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |