1 description("Test path animation where coordinate modes of start and end differ. You should see PASS messages");
5 var path
= createSVGElement("path");
6 path
.setAttribute("id", "path");
7 path
.setAttribute("d", "M -30 -30 L 30 0 V 30 H 0 Z");
8 path
.setAttribute("fill", "green");
9 path
.setAttribute("onclick", "executeTest()");
10 path
.setAttribute("transform", "translate(50, 50)");
12 var animate
= createSVGElement("animate");
13 animate
.setAttribute("id", "animation");
14 animate
.setAttribute("attributeName", "d");
15 animate
.setAttribute("from", "M -30 -30 L 30 0 V 30 H 0 Z");
16 animate
.setAttribute("to", "M 30 30 l -60 -30 v -30 h 30 Z");
17 animate
.setAttribute("begin", "click");
18 animate
.setAttribute("dur", "4s");
19 path
.appendChild(animate
);
20 rootSVGElement
.appendChild(path
);
22 // Setup animation test
23 function checkBaseVal() {
24 shouldBe("path.pathSegList.numberOfItems", "5");
25 shouldBeEqualToString("path.pathSegList.getItem(0).pathSegTypeAsLetter", "M");
26 shouldBe("path.pathSegList.getItem(0).x", "-30");
27 shouldBe("path.pathSegList.getItem(0).y", "-30");
28 shouldBeEqualToString("path.pathSegList.getItem(1).pathSegTypeAsLetter", "L");
29 shouldBe("path.pathSegList.getItem(1).x", "30");
30 shouldBe("path.pathSegList.getItem(1).y", "0");
31 shouldBeEqualToString("path.pathSegList.getItem(2).pathSegTypeAsLetter", "V");
32 shouldBe("path.pathSegList.getItem(2).y", "30");
33 shouldBeEqualToString("path.pathSegList.getItem(3).pathSegTypeAsLetter", "H");
34 shouldBe("path.pathSegList.getItem(3).x", "0");
35 shouldBeEqualToString("path.pathSegList.getItem(4).pathSegTypeAsLetter", "Z");
39 // Check initial/end conditions
40 shouldBe("path.animatedPathSegList.numberOfItems", "5");
41 shouldBeEqualToString("path.animatedPathSegList.getItem(0).pathSegTypeAsLetter", "M");
42 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).x", "-30");
43 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).y", "-30");
44 shouldBeEqualToString("path.animatedPathSegList.getItem(1).pathSegTypeAsLetter", "L");
45 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).x", "30");
46 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).y", "0");
47 shouldBeEqualToString("path.animatedPathSegList.getItem(2).pathSegTypeAsLetter", "V");
48 shouldBeCloseEnough("path.animatedPathSegList.getItem(2).y", "30");
49 shouldBeEqualToString("path.animatedPathSegList.getItem(3).pathSegTypeAsLetter", "H");
50 shouldBeCloseEnough("path.animatedPathSegList.getItem(3).x", "0");
51 shouldBeEqualToString("path.animatedPathSegList.getItem(4).pathSegTypeAsLetter", "Z");
56 shouldBe("path.animatedPathSegList.numberOfItems", "5");
57 shouldBeEqualToString("path.animatedPathSegList.getItem(0).pathSegTypeAsLetter", "M");
58 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).x", "-15");
59 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).y", "-15");
60 shouldBeEqualToString("path.animatedPathSegList.getItem(1).pathSegTypeAsLetter", "L");
61 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).x", "15");
62 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).y", "0");
63 shouldBeEqualToString("path.animatedPathSegList.getItem(2).pathSegTypeAsLetter", "V");
64 shouldBeCloseEnough("path.animatedPathSegList.getItem(2).y", "15");
65 shouldBeEqualToString("path.animatedPathSegList.getItem(3).pathSegTypeAsLetter", "H");
66 shouldBeCloseEnough("path.animatedPathSegList.getItem(3).x", "0");
67 shouldBeEqualToString("path.animatedPathSegList.getItem(4).pathSegTypeAsLetter", "Z");
72 shouldBe("path.animatedPathSegList.numberOfItems", "5");
73 shouldBeEqualToString("path.animatedPathSegList.getItem(0).pathSegTypeAsLetter", "M");
74 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).x", "15");
75 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).y", "15");
76 shouldBeEqualToString("path.animatedPathSegList.getItem(1).pathSegTypeAsLetter", "l");
77 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).x", "-30");
78 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).y", "-15");
79 shouldBeEqualToString("path.animatedPathSegList.getItem(2).pathSegTypeAsLetter", "v");
80 shouldBeCloseEnough("path.animatedPathSegList.getItem(2).y", "-15");
81 shouldBeEqualToString("path.animatedPathSegList.getItem(3).pathSegTypeAsLetter", "h");
82 shouldBeCloseEnough("path.animatedPathSegList.getItem(3).x", "15");
83 shouldBeEqualToString("path.animatedPathSegList.getItem(4).pathSegTypeAsLetter", "Z");
88 shouldBe("path.animatedPathSegList.numberOfItems", "5");
89 shouldBeEqualToString("path.animatedPathSegList.getItem(0).pathSegTypeAsLetter", "M");
90 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).x", "30");
91 shouldBeCloseEnough("path.animatedPathSegList.getItem(0).y", "30");
92 shouldBeEqualToString("path.animatedPathSegList.getItem(1).pathSegTypeAsLetter", "l");
93 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).x", "-60");
94 shouldBeCloseEnough("path.animatedPathSegList.getItem(1).y", "-30");
95 shouldBeEqualToString("path.animatedPathSegList.getItem(2).pathSegTypeAsLetter", "v");
96 shouldBeCloseEnough("path.animatedPathSegList.getItem(2).y", "-30");
97 shouldBeEqualToString("path.animatedPathSegList.getItem(3).pathSegTypeAsLetter", "h");
98 shouldBeCloseEnough("path.animatedPathSegList.getItem(3).x", "30");
99 shouldBeEqualToString("path.animatedPathSegList.getItem(4).pathSegTypeAsLetter", "Z");
103 function executeTest() {
104 const expectedValues
= [
105 // [animationId, time, sampleCallback]
106 ["animation", 0.0, sample1
],
107 ["animation", 1.0, sample2
],
108 ["animation", 3.0, sample3
],
109 ["animation", 3.999, sample4
],
110 ["animation", 4.001, sample1
]
113 runAnimationTest(expectedValues
);
116 var successfullyParsed
= true;