<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="resources/SVGTestCase.js"></script>
<script src="../../resources/js-test-pre.js"></script>
<script src="../../fast/repaint/resources/repaint.js"></script>
</head>
<body onload="runRepaintTest()">
<h1>SVG 1.1 dynamic update tests</h1>
<p id="description"></p>
<div id="console"></div>
<script>
// [Name] SVGMarkerElement-dom-orient-attr.js
// [Expected rendering result] start & end markers are visible (and not rotated, compared to the other SVGMarkerElement* tests) - and a series of PASS messages

description("Tests dynamic updates of the 'orient' attribute of the SVGMarkerElement object")
createSVGTestCase();

var markerElement = createSVGElement("marker");
markerElement.setAttribute("id", "marker");
markerElement.setAttribute("viewBox", "0 0 10 10");
markerElement.setAttribute("markerWidth", "2");
markerElement.setAttribute("markerHeight", "2");
markerElement.setAttribute("refX", "5");
markerElement.setAttribute("refY", "5");
markerElement.setAttribute("markerUnits", "strokeWidth");
markerElement.setAttribute("orient", "45");

var markerPathElement = createSVGElement("path");
markerPathElement.setAttribute("fill", "blue");
markerPathElement.setAttribute("d", "M 5 0 L 10 10 L 0 10 Z");
markerElement.appendChild(markerPathElement);

var defsElement = createSVGElement("defs");
defsElement.appendChild(markerElement);
rootSVGElement.appendChild(defsElement);

var pathElement = createSVGElement("path");
pathElement.setAttribute("fill", "none");
pathElement.setAttribute("stroke", "green");
pathElement.setAttribute("stroke-width", "10");
pathElement.setAttribute("marker-start", "url(#marker)");
pathElement.setAttribute("marker-end", "url(#marker)");
pathElement.setAttribute("d", "M 130 135 L 180 135 L 180 185");
rootSVGElement.appendChild(pathElement);

var angle = createSVGElement("svg").createSVGAngle();
angle.newValueSpecifiedUnits(SVGAngle.SVG_ANGLETYPE_RAD, (Math.PI / 2).toFixed(2));

debug("");
debug("Test initial state");
shouldBeEqualToString("markerElement.orient", "45");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_UNSPECIFIED");
shouldBe("markerElement.orientAngle.baseVal.value", "45");
shouldBeEqualToString("markerElement.getAttribute('orient')", "45");

debug("");
debug("Test the 'orient' property");
shouldBeEqualToString("markerElement.orient = 'auto'", "auto");
shouldBeEqualToString("markerElement.orient", "auto");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO");
shouldBe("markerElement.orientAngle.baseVal.value", "0");
shouldBeEqualToString("markerElement.getAttribute('orient')", "auto");

debug("");
shouldBeEqualToString("markerElement.orient = 'auto-start-reverse'", "auto-start-reverse");
shouldBeEqualToString("markerElement.orient", "auto-start-reverse");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_UNKNOWN");
shouldBe("markerElement.orientAngle.baseVal.value", "0");
shouldBeEqualToString("markerElement.getAttribute('orient')", "auto-start-reverse");

debug("");
shouldBeEqualToString("markerElement.orient = '45deg'", "45deg");
shouldBeEqualToString("markerElement.orient", "45deg");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_DEG");
shouldBe("markerElement.orientAngle.baseVal.value", "45");
shouldBeEqualToString("markerElement.getAttribute('orient')", "45deg");

debug("");
debug("Test the method setOrientToAngle()");
shouldBeUndefined("markerElement.setOrientToAngle(angle)");
shouldBeEqualToString("markerElement.orient", (Math.PI / 2).toFixed(2) + "rad");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_RAD");
shouldBeEqualToString("markerElement.orientAngle.baseVal.value.toFixed(1)", "90.0");
shouldBeEqualToString("markerElement.getAttribute('orient')", (Math.PI / 2).toFixed(2) + "rad");

debug("");
debug("Test the method setOrientToAuto()");
shouldBeUndefined("markerElement.setOrientToAuto()");
shouldBeEqualToString("markerElement.orient", "auto");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO");
shouldBe("markerElement.orientAngle.baseVal.value", "0");
shouldBeEqualToString("markerElement.getAttribute('orient')", "auto");

debug("");
debug("Test the animated property 'orientAngle'");
shouldBe("markerElement.orientAngle.baseVal.value = 45", "45");
shouldBeEqualToString("markerElement.orient", "45");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_UNSPECIFIED");
shouldBe("markerElement.orientAngle.baseVal.value", "45");
shouldBeEqualToString("markerElement.getAttribute('orient')", "45");

debug("");
debug("Test the animated property 'orientType'");
shouldBe("markerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_AUTO", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO");
shouldBeEqualToString("markerElement.orient", "auto");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_AUTO");
shouldBe("markerElement.orientAngle.baseVal.value", "0");
shouldBeEqualToString("markerElement.getAttribute('orient')", "auto");

debug("");
shouldBe("markerElement.orientType.baseVal = SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
shouldBe("markerElement.orientAngle.baseVal.value = -45", "-45");
shouldBeEqualToString("markerElement.orient", "-45");
shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
shouldBe("markerElement.orientAngle.baseVal.unitType", "SVGAngle.SVG_ANGLETYPE_UNSPECIFIED");
shouldBe("markerElement.orientAngle.baseVal.value", "-45");
shouldBeEqualToString("markerElement.getAttribute('orient')", "-45");

function repaintTest() {
	debug("");
	debug("Test the 'orient' attribute");
    shouldBeUndefined("markerElement.setAttribute('orient', '0')");
    shouldBeEqualToString("markerElement.orient", "0");
    shouldBe("markerElement.orientType.baseVal", "SVGMarkerElement.SVG_MARKER_ORIENT_ANGLE");
    shouldBe("markerElement.orientAngle.baseVal.value", "0");
    shouldBeEqualToString("markerElement.getAttribute('orient')", "0");

    completeTest();
}

var successfullyParsed = true;
</script>
</body>
</html>
