<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="resources/SVGTestCase.js"></script>
<script src="../../resources/js-test.js"></script>
<style type="text/css" media="screen">
.column {
margin: 10px;
display: inline-block;
vertical-align: top;
}
.container {
position: relative;
height: 200px;
width: 200px;
margin: 10px;
background-color: silver;
border: 1px solid black;
}
#wrapper {
position: relative;
top: 0;
left: 0;
height: 60px;
width: 60px;
-webkit-transform-origin: top left; /* to match SVG */
}
</style>
</head>
<body>
<div class="column">
<div class="container">
<svg id="svg1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
<rect id="rect1" x="0" y="0" height="60" width="60" fill="green"/>
</svg>
</div>
<div class="container">
<svg id="svg2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
<rect id="rect2" x="0" y="0" height="60" width="60" fill="green" transform="translate(1000, 1000) rotate(90)"/>
</svg>
</div>
</div>
<div class="column">
<div class="container">
<svg id="svg1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
<rect id="rect3" x="0" y="0" height="60" width="60" fill="green"/>
</svg>
</div>
<div class="container">
<svg id="svg2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
<rect id="rect4" x="0" y="0" height="60" width="60" fill="green" transform="translate(1000, 1000) rotate(90)"/>
</svg>
</div>
</div>
<div class="column">
<div class="container">
<div id="wrapper">
<svg id="svg3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" style="width:200px; height:200px;">
<rect id="rect5" x="0" y="0" height="60" width="60" fill="green"/>
</svg>
</div>
</div>
</div>
<h1>SVG 1.1 dynamic update tests</h1>
<p id="description"></p>
<p>Also, to pass the test, the rectangles should be rotated with 45deg</p>
<div id="console"></div>
<script>
// [Expected rendering result] 'Test passed' message - and a series of PASS messages
description("Tests dynamic updates of the '-webkit-transform' on SVG element");
//createSVGTestCase();
function dumpRect(r) {
return "[" + r.x
+ " " + r.y
+ " " + r.width
+ " " + r.height
+ "]";
}
function dumpMatrix(matrix) {
return "[" + matrix.a.toFixed(1)
+ " " + matrix.b.toFixed(1)
+ " " + matrix.c.toFixed(1)
+ " " + matrix.d.toFixed(1)
+ " " + matrix.e.toFixed(1)
+ " " + matrix.f.toFixed(1)
+ "]";
}
function dumpTransform(transform) {
var transformTypes = {
"0": "SVG_TRANSFORM_UNKNOWN",
"1": "SVG_TRANSFORM_MATRIX",
"2": "SVG_TRANSFORM_TRANSLATE",
"3": "SVG_TRANSFORM_SCALE",
"4": "SVG_TRANSFORM_ROTATE",
"5": "SVG_TRANSFORM_SKEWX",
"6": "SVG_TRANSFORM_SKEWY"
};
return "type=" + transformTypes[transform.type] + " matrix=" + dumpMatrix(transform.matrix);
}
var rect1 = document.getElementById("rect1");
var rect2 = document.getElementById("rect2");
var rect3 = document.getElementById("rect3");
var rect4 = document.getElementById("rect4");
var rect5 = document.getElementById("rect5");
var wrapper = document.getElementById("wrapper");
debug("");
debug("Transform via style attribute");
rect1.setAttribute("style", "transform: translate(100px, 25px) scale(2) rotate(45deg)");
shouldBeEqualToString("rect1.style.transform", "translate(100px, 25px) scale(2) rotate(45deg)");
shouldBeEqualToString("dumpMatrix(rect1.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect1.style.transform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBe("dumpMatrix(new WebKitCSSMatrix(rect1.style.transform))", "dumpMatrix(rect1.getCTM())");
shouldBe("rect1.transform.baseVal.numberOfItems", "0");
shouldBeNull("rect1.getAttribute('transform')");
shouldBeEqualToString("dumpMatrix(rect2.getCTM())", "[0.0 1.0 -1.0 0.0 1000.0 1000.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect2.style.transform))", "[1.0 0.0 0.0 1.0 0.0 0.0]");
rect2.setAttribute("style", "transform: translate(100px, 25px) scale(2) rotate(45deg)");
shouldBeEqualToString("rect2.style.transform", "translate(100px, 25px) scale(2) rotate(45deg)");
shouldBeEqualToString("dumpMatrix(rect2.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect2.style.transform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBe("dumpMatrix(new WebKitCSSMatrix(rect2.style.transform))", "dumpMatrix(rect2.getCTM())");
shouldBe("rect2.transform.baseVal.numberOfItems", "2");
shouldBeEqualToString("rect2.getAttribute('transform')", "translate(1000, 1000) rotate(90)");
shouldBeEqualToString("dumpTransform(rect2.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]");
shouldBeEqualToString("dumpTransform(rect2.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
debug("");
debug("Transform via CSS");
rect3.style.transform = "translate(100px, 25px) scale(2) rotate(45deg)";
shouldBeEqualToString("rect3.style.transform", "translate(100px, 25px) scale(2) rotate(45deg)");
shouldBeEqualToString("dumpMatrix(rect3.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect3.style.transform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBe("dumpMatrix(new WebKitCSSMatrix(rect3.style.transform))", "dumpMatrix(rect3.getCTM())");
shouldBe("rect3.transform.baseVal.numberOfItems", "0");
shouldBeNull("rect3.getAttribute('transform')");
shouldBeEqualToString("dumpMatrix(rect2.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect2.style.transform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
rect4.style.transform = "translate(100px, 25px) scale(2) rotate(45deg)";
shouldBeEqualToString("rect4.style.transform", "translate(100px, 25px) scale(2) rotate(45deg)");
shouldBeEqualToString("dumpMatrix(rect4.getCTM())", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect4.style.transform))", "[1.4 1.4 -1.4 1.4 100.0 25.0]");
shouldBe("dumpMatrix(new WebKitCSSMatrix(rect4.style.transform))", "dumpMatrix(rect4.getCTM())");
shouldBe("rect4.transform.baseVal.numberOfItems", "2");
shouldBeEqualToString("rect4.getAttribute('transform')", "translate(1000, 1000) rotate(90)");
shouldBeEqualToString("dumpTransform(rect4.transform.baseVal.getItem(0))", "type=SVG_TRANSFORM_TRANSLATE matrix=[1.0 0.0 0.0 1.0 1000.0 1000.0]");
shouldBeEqualToString("dumpTransform(rect4.transform.baseVal.getItem(1))", "type=SVG_TRANSFORM_ROTATE matrix=[0.0 1.0 -1.0 0.0 0.0 0.0]");
debug("");
debug("Transform on wrapper div");
wrapper.style.transform = "translate(100px, 25px) scale(2) rotate(45deg)";
shouldBeEqualToString("rect5.style.transform", "");
shouldBeEqualToString("dumpMatrix(rect5.getCTM())", "[1.0 0.0 0.0 1.0 0.0 0.0]");
shouldBeEqualToString("dumpMatrix(new WebKitCSSMatrix(rect5.style.transform))", "[1.0 0.0 0.0 1.0 0.0 0.0]");
shouldBe("dumpMatrix(new WebKitCSSMatrix(rect5.style.transform))", "dumpMatrix(rect5.getCTM())");
shouldBe("rect5.transform.baseVal.numberOfItems", "0");
shouldBeNull("rect5.getAttribute('transform')");
debug("");
var successfullyParsed = true;
afterTest();
</script>
</body>
</html>