blob: afb9b2a12699dd5ba85254b3dcc847ea6aa4c207 [file] [log] [blame]
oliver06a574c2007-03-21 21:59:06 +00001<html>
2<head>
mark.lam@apple.com1ca737d2013-09-08 05:29:22 +00003<script src="../../resources/js-test-pre.js"></script>
ggarenaf7aca72007-03-22 03:21:01 +00004<script src="resources/scripted-random.js"></script>
oliver06a574c2007-03-21 21:59:06 +00005</head>
6<body>
7<p id="description"></p>
8<div id="console"></div>
9<script>
oliver06a574c2007-03-21 21:59:06 +000010 description("This test fuzzes the transform parser with semi-random attribute values and dumps the results of any values that parse successfully.");
11
oliver06a574c2007-03-21 21:59:06 +000012 var transforms = { // maps a transform name to its minimum argument count
13 matrix: 6,
14 rotate: 1,
15 scale: 1,
16 skewX: 1,
17 skewY: 1,
18 translate: 1
19 };
20
21 var characters = [
22 "0",
23 "1",
24 "2",
25 "3",
26 "4",
27 "5",
28 "6",
29 "7",
30 "8",
31 "9",
32 ".",
33 "e",
34 "+",
35 "-",
36 "e",
37 "(",
38 ")",
39 " ",
40 "\t",
41 ","
42 ];
43
44 var gElement = document.createElementNS("http://www.w3.org/2000/svg", "g");
45 function parseTransform(string)
46 {
47 gElement.setAttributeNS(null, "transform", string);
48
49 var transformList = gElement.transform.baseVal;
50 if (!transformList.numberOfItems)
51 return;
52
53 debug("Parsed as " + transformList.numberOfItems + " transform(s): " + string);
54 }
55
56 function fuzz()
57 {
58 for (var transform in transforms) {
59
60 // Too few / too many arguments
61 for (var i = 0; i < 50; i++) { //>
62 var transformString = transform + "(";
63 for (var j = 0; j < i; j++) { //>
64 transformString += "0";
65 if (j < i - 1) //>
66 transformString += ",";
67 }
68 transformString += ")";
69 parseTransform(transformString);
70 }
71
72 // Random assortments of valid characters
73 for (var i = 0; i < 100; i++) { //>
74 var transformString = transform + "(";
75 var count = Math.scriptedRandomInt(20);
76 for (var j = 0; j < count; j++) { //>
77 transformString += characters[Math.scriptedRandomInt(characters.length)];
78 }
79 parseTransform(transformString);
80 }
81
82 // Transform names that are "off by one"
83 var extraChar = transform.charAt(transform.length - 1);
84 parseTransform(transform + extraChar + "(0, 0)");
ggarenaf7aca72007-03-22 03:21:01 +000085 parseTransform(transform.substring(0, transform.length - 1) + "(0, 0)");
oliver06a574c2007-03-21 21:59:06 +000086
87 // Empty-ish transforms
88 parseTransform(transform);
89 parseTransform(transform + String.fromCharCode(0));
90 parseTransform(transform + "(" + String.fromCharCode(0) + ")");
91 }
92 }
93
94 fuzz();
95
oliver06a574c2007-03-21 21:59:06 +000096</script>
mark.lam@apple.com1ca737d2013-09-08 05:29:22 +000097<script src="../../resources/js-test-post.js"></script>
oliver06a574c2007-03-21 21:59:06 +000098</html>