forked from GoodStartLabs/AI_Diplomacy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_svg_optimizer.py
More file actions
165 lines (143 loc) · 7.52 KB
/
test_svg_optimizer.py
File metadata and controls
165 lines (143 loc) · 7.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env python3
"""
Test script for the SVG optimizer
This script tests the SVG optimizer by:
1. Running the optimizer on a sample SVG file
2. Verifying that unnecessary elements are removed
3. Checking that essential elements are preserved
4. Measuring the size reduction achieved
"""
import sys
from svg_optimizer import simplify_svg
def run_test():
"""Run the SVG optimizer test and display results"""
print("=== SVG OPTIMIZER TEST ===")
# Original SVG content from the user's request
original_svg_content = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "svg.dtd">
<!-- ========================================================================================== -->
<!-- Detailed Standard Map -->
<!-- background (and quite nice) map bitmap by J. Fatula III -->
<!-- SVG by Zach DelProposto -->
<!-- Copyright jDip - GPL License -->
<!-- ========================================================================================== -->
<svg color-rendering="optimizeQuality" height="680px" preserveAspectRatio="xMinYMin" version="1.0" viewBox="0 0 1835 1360" width="918px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:jdipNS="svg.dtd">
<jdipNS:DISPLAY>
<jdipNS:ZOOM min="5" max="2200" factor="1.2"/>
<jdipNS:LABELS brief="true" full="true"/>
</jdipNS:DISPLAY>
<jdipNS:ORDERDRAWING>
<jdipNS:POWERCOLORS>
<jdipNS:POWERCOLOR power="austria" color="#c48f85"/>
<jdipNS:POWERCOLOR power="england" color="darkviolet"/>
<jdipNS:POWERCOLOR power="france" color="royalblue"/>
<jdipNS:POWERCOLOR power="germany" color="#a08a75"/>
<jdipNS:POWERCOLOR power="italy" color="forestgreen"/>
<jdipNS:POWERCOLOR power="russia" color="#757d91"/>
<jdipNS:POWERCOLOR power="turkey" color="#b9a61c"/>
</jdipNS:POWERCOLORS>
<jdipNS:SYMBOLSIZE name="Fleet" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="Army" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="Wing" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="DislodgedFleet" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="DislodgedArmy" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="DislodgedWing" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="FailedOrder" width="30" height="30"/>
<jdipNS:SYMBOLSIZE name="SupplyCenter" width="20" height="20"/>
<jdipNS:SYMBOLSIZE name="BuildUnit" width="60" height="60"/>
<jdipNS:SYMBOLSIZE name="RemoveUnit" width="50" height="50"/>
<jdipNS:SYMBOLSIZE name="WaivedBuild" width="40" height="40"/>
<jdipNS:SYMBOLSIZE name="HoldUnit" width="66.6" height="66.6"/>
<jdipNS:SYMBOLSIZE name="SupportHoldUnit" width="76.6" height="76.6"/>
<jdipNS:SYMBOLSIZE name="ConvoyTriangle" width="66.4" height="57.4"/>
<!-- Special symbol size to contain stroke width for plain (in "height") and power-colored lines (in "width") -->
<jdipNS:SYMBOLSIZE name="Stroke" width="6" height="10"/>
</jdipNS:ORDERDRAWING>
<jdipNS:PROVINCE_DATA>
<jdipNS:PROVINCE name="adr">
<jdipNS:UNIT x="793.5" y="1048.0"/>
<jdipNS:DISLODGED_UNIT x="782.0" y="1038.0"/>
</jdipNS:PROVINCE>
</jdipNS:PROVINCE_DATA>
<defs>
<style type="text/css"><![CDATA[
/* text */
svg { font-size: 100% }
.labeltext24 {font-size:1.4em;}
]]></style>
</defs>
<g id="MapLayer" transform="translate(-195 -170)">
<rect fill="black" height="1360" width="1835" x="195" y="170"/>
<path class="nopower" d="M 1424 1364 C 1437 1361 1448 1353 1459 1346 C 1464 1343 1470 1337 1475 1336 C 1482 1334 1492 1338 1499 1340 C 1510 1342 1518 1341 1528 1336 C 1544 1328 1555 1307 1575 1297 C 1587 1291 1598 1293 1611 1293 C 1614 1293 1621 1292 1624 1292 C 1646 1286 1638 1257 1637 1241 C 1618 1244 1604 1253 1583 1253 C 1566 1253 1565 1248 1554 1246 C 1553 1247 1553 1248 1551 1248 C 1548 1249 1541 1242 1538 1240 C 1535 1242 1529 1247 1526 1246 C 1521 1245 1517 1235 1511 1235 C 1507 1236 1507 1239 1497 1241 C 1483 1243 1471 1243 1457 1249 C 1450 1253 1440 1261 1435 1266 C 1433 1268 1421 1282 1420 1284 C 1419 1286 1419 1290 1419 1292 C1419 1300 1423 1305 1425 1312 1428 1318 1430 1326 1431 1333 C 1432 1342 1427 1355 1424 1364 z" id="_ank"/>
</g>
</svg>
"""
# Test the optimizer
print("\nRunning SVG optimizer...")
optimized_svg = simplify_svg(original_svg_content)
# Print the optimized SVG (first 500 chars for brevity)
print("\n=== OPTIMIZED SVG (PREVIEW) ===")
preview_length = min(500, len(optimized_svg))
print(f"{optimized_svg[:preview_length]}...")
print(f"[Total length: {len(optimized_svg)} characters]")
# Print some stats
original_size = len(original_svg_content)
optimized_size = len(optimized_svg)
reduction = (1 - optimized_size / original_size) * 100
print("\n=== OPTIMIZATION STATS ===")
print(f"Original size: {original_size:,} bytes")
print(f"Optimized size: {optimized_size:,} bytes")
print(f"Size reduction: {reduction:.2f}%")
# Check if key elements were removed/preserved
print("\n=== VERIFICATION ===")
# Elements that should be removed
removed_elements = [
("DOCTYPE declaration", "<!DOCTYPE", True),
("Comments", "<!--", True),
("jdipNS namespace", "jdipNS:", True),
("DISPLAY element", "<jdipNS:DISPLAY>", True),
("ORDERDRAWING element", "<jdipNS:ORDERDRAWING>", True),
("PROVINCE_DATA element", "<jdipNS:PROVINCE_DATA>", True),
("Style definitions", "<style", True),
]
# Elements that should be preserved
preserved_elements = [
("SVG root element", "<svg", True),
("MapLayer group", "MapLayer", True),
("Path element", "<path", True),
("Rectangle element", "<rect", True),
("viewBox attribute", "viewBox=", True),
]
# Check removed elements
print("\nElements that should be removed:")
all_removed = True
for name, pattern, should_be_removed in removed_elements:
is_removed = pattern not in optimized_svg
status = "✓ REMOVED" if is_removed else "✗ STILL PRESENT"
if not is_removed:
all_removed = False
print(f" {name}: {status}")
# Check preserved elements
print("\nElements that should be preserved:")
all_preserved = True
for name, pattern, should_be_preserved in preserved_elements:
is_preserved = pattern in optimized_svg
status = "✓ PRESERVED" if is_preserved else "✗ MISSING"
if not is_preserved:
all_preserved = False
print(f" {name}: {status}")
# Overall test result
print("\n=== TEST RESULT ===")
if all_removed and all_preserved:
print("✅ SUCCESS: All tests passed!")
else:
print("❌ FAILURE: Some tests failed!")
if not all_removed:
print(" - Some elements that should be removed are still present")
if not all_preserved:
print(" - Some elements that should be preserved are missing")
# Return success status for potential CI/CD integration
return all_removed and all_preserved
if __name__ == "__main__":
success = run_test()
sys.exit(0 if success else 1)