| OLD | NEW |
| (Empty) |
| 1 description("This tests the SVG path parser by parsing and then re-serializing v
arious paths."); | |
| 2 | |
| 3 var pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path")
; | |
| 4 | |
| 5 var pathProperties = { | |
| 6 "M": [ "x", "y" ], | |
| 7 "m": [ "x", "y" ], | |
| 8 "L": [ "x", "y" ], | |
| 9 "l": [ "x", "y" ], | |
| 10 "H": [ "x" ], | |
| 11 "h": [ "x" ], | |
| 12 "V": [ "y" ], | |
| 13 "v": [ "y" ], | |
| 14 "Z": [ ], | |
| 15 "z": [ ], | |
| 16 "C": [ "x1", "y1", "x2", "y2", "x", "y" ], | |
| 17 "c": [ "x1", "y1", "x2", "y2", "x", "y" ], | |
| 18 "S": [ "x2", "y2", "x", "y" ], | |
| 19 "s": [ "x2", "y2", "x", "y" ], | |
| 20 "Q": [ "x1", "y1", "x", "y" ], | |
| 21 "q": [ "x1", "y1", "x", "y" ], | |
| 22 "T": [ "x", "y" ], | |
| 23 "t": [ "x", "y" ], | |
| 24 "A": [ "r1", "r2", "angle", "largeArcFlag", "sweepFlag", "x", "y" ], | |
| 25 "a": [ "r1", "r2", "angle", "largeArcFlag", "sweepFlag", "x", "y" ] | |
| 26 }; | |
| 27 | |
| 28 function printSegment(segment) | |
| 29 { | |
| 30 var letter = segment.pathSegTypeAsLetter; | |
| 31 var names = pathProperties[letter]; | |
| 32 if (!names) | |
| 33 return letter + "?"; | |
| 34 var string = letter; | |
| 35 for (var i = 0; i < names.length; ++i) { | |
| 36 if (i) | |
| 37 string += ","; | |
| 38 var value = segment[names[i]]; | |
| 39 if (value == undefined) { | |
| 40 string += "?"; | |
| 41 continue; | |
| 42 } | |
| 43 if (typeof(value) === "boolean") { | |
| 44 string += value ? 1 : 0; | |
| 45 continue; | |
| 46 } | |
| 47 string += value.toFixed(1).replace(/\.0$/, ""); | |
| 48 } | |
| 49 return string; | |
| 50 } | |
| 51 | |
| 52 function parsePath(string) | |
| 53 { | |
| 54 pathElement.setAttributeNS(null, "d", string); | |
| 55 | |
| 56 var pathSegList = pathElement.pathSegList; | |
| 57 var numberOfItems = pathSegList.numberOfItems; | |
| 58 | |
| 59 var pathCommands = ""; | |
| 60 for (var i = 0; i < numberOfItems; i++) { | |
| 61 if (i) | |
| 62 pathCommands += " "; | |
| 63 pathCommands += printSegment(pathSegList.getItem(i)); | |
| 64 } | |
| 65 | |
| 66 return pathCommands; | |
| 67 } | |
| 68 | |
| 69 shouldBe("parsePath('M1,2')", "'M1,2'"); | |
| 70 shouldBe("parsePath('m1,2')", "'m1,2'"); | |
| 71 shouldBe("parsePath('M100,200 m3,4')", "'M100,200 m3,4'"); | |
| 72 shouldBe("parsePath('M100,200 L3,4')", "'M100,200 L3,4'"); | |
| 73 shouldBe("parsePath('M100,200 l3,4')", "'M100,200 l3,4'"); | |
| 74 shouldBe("parsePath('M100,200 H3')", "'M100,200 H3'"); | |
| 75 shouldBe("parsePath('M100,200 h3')", "'M100,200 h3'"); | |
| 76 shouldBe("parsePath('M100,200 V3')", "'M100,200 V3'"); | |
| 77 shouldBe("parsePath('M100,200 v3')", "'M100,200 v3'"); | |
| 78 shouldBe("parsePath('M100,200 Z')", "'M100,200 Z'"); | |
| 79 shouldBe("parsePath('M100,200 z')", "'M100,200 Z'"); | |
| 80 shouldBe("parsePath('M100,200 C3,4,5,6,7,8')", "'M100,200 C3,4,5,6,7,8'"); | |
| 81 shouldBe("parsePath('M100,200 c3,4,5,6,7,8')", "'M100,200 c3,4,5,6,7,8'"); | |
| 82 shouldBe("parsePath('M100,200 S3,4,5,6')", "'M100,200 S3,4,5,6'"); | |
| 83 shouldBe("parsePath('M100,200 s3,4,5,6')", "'M100,200 s3,4,5,6'"); | |
| 84 shouldBe("parsePath('M100,200 Q3,4,5,6')", "'M100,200 Q3,4,5,6'"); | |
| 85 shouldBe("parsePath('M100,200 q3,4,5,6')", "'M100,200 q3,4,5,6'"); | |
| 86 shouldBe("parsePath('M100,200 T3,4')", "'M100,200 T3,4'"); | |
| 87 shouldBe("parsePath('M100,200 t3,4')", "'M100,200 t3,4'"); | |
| 88 shouldBe("parsePath('M100,200 A3,4,5,0,0,6,7')", "'M100,200 A3,4,5,0,0,6,7'"); | |
| 89 shouldBe("parsePath('M100,200 A3,4,5,1,0,6,7')", "'M100,200 A3,4,5,1,0,6,7'"); | |
| 90 shouldBe("parsePath('M100,200 A3,4,5,0,1,6,7')", "'M100,200 A3,4,5,0,1,6,7'"); | |
| 91 shouldBe("parsePath('M100,200 A3,4,5,1,1,6,7')", "'M100,200 A3,4,5,1,1,6,7'"); | |
| 92 shouldBe("parsePath('M100,200 a3,4,5,0,0,6,7')", "'M100,200 a3,4,5,0,0,6,7'"); | |
| 93 shouldBe("parsePath('M100,200 a3,4,5,0,1,6,7')", "'M100,200 a3,4,5,0,1,6,7'"); | |
| 94 shouldBe("parsePath('M100,200 a3,4,5,1,0,6,7')", "'M100,200 a3,4,5,1,0,6,7'"); | |
| 95 shouldBe("parsePath('M100,200 a3,4,5,1,1,6,7')", "'M100,200 a3,4,5,1,1,6,7'"); | |
| 96 shouldBe("parsePath('M100,200 a3,4,5,006,7')", "'M100,200 a3,4,5,0,0,6,7'"); | |
| 97 shouldBe("parsePath('M100,200 a3,4,5,016,7')", "'M100,200 a3,4,5,0,1,6,7'"); | |
| 98 shouldBe("parsePath('M100,200 a3,4,5,106,7')", "'M100,200 a3,4,5,1,0,6,7'"); | |
| 99 shouldBe("parsePath('M100,200 a3,4,5,116,7')", "'M100,200 a3,4,5,1,1,6,7'"); | |
| 100 shouldBe("parsePath('M100,200 a3,4,5,2,1,6,7')", "'M100,200'"); | |
| 101 shouldBe("parsePath('M100,200 a3,4,5,1,2,6,7')", "'M100,200'"); | |
| 102 | |
| 103 shouldBe("parsePath('M100,200 a0,4,5,0,0,10,0 a4,0,5,0,0,0,10 a0,0,5,0,0,-10,0 z
')", "'M100,200 a0,4,5,0,0,10,0 a4,0,5,0,0,0,10 a0,0,5,0,0,-10,0 Z'"); | |
| 104 | |
| 105 shouldBe("parsePath('M1,2,3,4')", "'M1,2 L3,4'"); | |
| 106 shouldBe("parsePath('m100,200,3,4')", "'m100,200 l3,4'"); | |
| 107 | |
| 108 shouldBe("parsePath('M 100-200')", "'M100,-200'"); | |
| 109 shouldBe("parsePath('M 0.6.5')", "'M0.6,0.5'"); | |
| 110 | |
| 111 shouldBe("parsePath(' M1,2')", "'M1,2'"); | |
| 112 shouldBe("parsePath(' M1,2')", "'M1,2'"); | |
| 113 shouldBe("parsePath('\\tM1,2')", "'M1,2'"); | |
| 114 shouldBe("parsePath('\\nM1,2')", "'M1,2'"); | |
| 115 shouldBe("parsePath('\\rM1,2')", "'M1,2'"); | |
| 116 shouldBe("parsePath('\\vM1,2')", "''"); | |
| 117 shouldBe("parsePath('xM1,2')", "''"); | |
| 118 shouldBe("parsePath('M1,2 ')", "'M1,2'"); | |
| 119 shouldBe("parsePath('M1,2\\t')", "'M1,2'"); | |
| 120 shouldBe("parsePath('M1,2\\n')", "'M1,2'"); | |
| 121 shouldBe("parsePath('M1,2\\r')", "'M1,2'"); | |
| 122 shouldBe("parsePath('M1,2\\v')", "'M1,2'"); | |
| 123 shouldBe("parsePath('M1,2x')", "'M1,2'"); | |
| 124 shouldBe("parsePath('M1,2 L40,0#90')", "'M1,2 L40,0'"); | |
| 125 | |
| 126 shouldBe("parsePath('')", "''"); | |
| 127 shouldBe("parsePath(' ')", "''"); | |
| 128 shouldBe("parsePath('x')", "''"); | |
| 129 shouldBe("parsePath('L1,2')", "''"); | |
| 130 shouldBe("parsePath('M.1 .2 L.3 .4 .5 .6')", "'M0.1,0.2 L0.3,0.4 L0.5,0.6'"); | |
| 131 | |
| 132 successfullyParsed = true; | |
| OLD | NEW |