OLD | NEW |
1 <html> | 1 <!DOCTYPE html> |
2 <head> | 2 <title>Transform parser fuzzer (matrix, rotate, scale)</title> |
3 <script src="../../resources/js-test.js"></script> | |
4 <script src="resources/scripted-random.js"></script> | 3 <script src="resources/scripted-random.js"></script> |
5 </head> | 4 <script src="resources/transform-parser-fuzzer.js"></script> |
6 <body> | |
7 <p id="description"></p> | |
8 <div id="console"></div> | |
9 <script> | 5 <script> |
10 description("This test fuzzes the transform parser with semi-random attribut
e values and dumps the results of any values that parse successfully."); | 6 fuzzTransforms({ matrix: 6, rotate: 1, scale: 1 }); |
11 | |
12 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): " + s
tring); | |
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(charact
ers.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)"); | |
85 parseTransform(transform.substring(0, transform.length - 1) + "(0, 0
)"); | |
86 | |
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 | |
96 </script> | 7 </script> |
97 </html> | 8 <p>DONE</p> |
OLD | NEW |