| OLD | NEW |
| (Empty) |
| 1 <html> | |
| 2 <head> | |
| 3 <script src="../../resources/js-test.js"></script> | |
| 4 <script src="resources/scripted-random.js"></script> | |
| 5 </head> | |
| 6 <body> | |
| 7 <p id="description"></p> | |
| 8 <div id="console"></div> | |
| 9 <script> | |
| 10 description("This test fuzzes the path parser with semi-random attribute val
ues and dumps the results."); | |
| 11 | |
| 12 var characters = [ | |
| 13 [ "m", 2 ], // maps a character to the number of arguments it requires | |
| 14 [ "M", 2 ], | |
| 15 [ "l", 2 ], | |
| 16 [ "L", 2 ], | |
| 17 [ "h", 1 ], | |
| 18 [ "H", 1 ], | |
| 19 [ "v", 1 ], | |
| 20 [ "V", 1 ], | |
| 21 [ "z", 0 ], | |
| 22 [ "Z", 0 ], | |
| 23 [ "c", 6 ], | |
| 24 [ "C", 6 ], | |
| 25 [ "s", 4 ], | |
| 26 [ "S", 4 ], | |
| 27 [ "q", 4 ], | |
| 28 [ "Q", 4 ], | |
| 29 [ "t", 2 ], | |
| 30 [ "T", 2 ], | |
| 31 [ "a", 7 ], | |
| 32 [ "A", 7 ] | |
| 33 ]; | |
| 34 | |
| 35 var separators = [ | |
| 36 " ", | |
| 37 "," | |
| 38 ]; | |
| 39 | |
| 40 var pathElement = document.createElementNS("http://www.w3.org/2000/svg", "pa
th"); | |
| 41 function parsePath(string) | |
| 42 { | |
| 43 pathElement.setAttributeNS(null, "d", string); | |
| 44 | |
| 45 var pathSegList = pathElement.pathSegList; | |
| 46 var numberOfItems = pathSegList.numberOfItems; | |
| 47 | |
| 48 if (!numberOfItems) { | |
| 49 debug("Could not parse: " + string); | |
| 50 return; | |
| 51 } | |
| 52 | |
| 53 var pathCommands = ""; | |
| 54 for (var i = 0; i < numberOfItems; i++) { //> | |
| 55 pathCommands += pathSegList.getItem(i).pathSegTypeAsLetter; | |
| 56 } | |
| 57 debug("Parsed as " + numberOfItems + " command(s) [" + pathCommands + "]
: " + string); | |
| 58 } | |
| 59 | |
| 60 function fuzz() | |
| 61 { | |
| 62 // Random assortments of valid characters with semi-valid argument count
s | |
| 63 for (var i = 0; i < 250; i++) { //> | |
| 64 var pathString = "M1,1"; // path must start with moveto | |
| 65 | |
| 66 var numPathCommands = Math.scriptedRandomInt(20); | |
| 67 for (var j = 0; j < numPathCommands; j++) { //> | |
| 68 var characterIndex = Math.scriptedRandomInt(characters.length); | |
| 69 pathString += characters[characterIndex][0]; | |
| 70 | |
| 71 var numArguments; | |
| 72 var argumentRandomizer = Math.scriptedRandomInt(10); | |
| 73 if (argumentRandomizer < 8) //> | |
| 74 numArguments = characters[characterIndex][1]; | |
| 75 else if (argumentRandomizer < 9) //> | |
| 76 numArguments = characters[characterIndex][1] + 1; | |
| 77 else | |
| 78 numArguments = Math.max(characters[characterIndex][1] - 1, 0
); | |
| 79 | |
| 80 for (var k = 0; k < numArguments; k++) { //> | |
| 81 pathString += String(Math.scriptedRandomInt(10)); | |
| 82 pathString += separators[Math.scriptedRandomInt(separators.l
ength)]; | |
| 83 } | |
| 84 } | |
| 85 parsePath(pathString); | |
| 86 } | |
| 87 } | |
| 88 fuzz(); | |
| 89 | |
| 90 </script> | |
| 91 </html> | |
| OLD | NEW |