add pytest tests

This commit is contained in:
jaseg 2022-06-21 13:55:31 +02:00
parent bb8b28f86a
commit e73b577178
3 changed files with 983 additions and 0 deletions

View file

@ -0,0 +1,918 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="100.0mm"
height="100.0mm"
viewBox="0 0 100.0 100.0"
id="svg166"
sodipodi:docname="svg_feature_test.svg"
inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs150">
<pattern
inkscape:collect="always"
xlink:href="#Polkadots-large"
id="pattern6704"
patternTransform="matrix(0.72748034,0,0,0.72748034,24.377412,83.823381)" />
<pattern
inkscape:collect="always"
patternUnits="userSpaceOnUse"
width="10"
height="10"
patternTransform="translate(0,0) scale(10,10)"
id="Polkadots-large"
inkscape:stockid="Polka dots, large">
<circle
style="fill:black;stroke:none"
cx="2.567"
cy="0.810"
r="0.45"
id="circle5968" />
<circle
style="fill:black;stroke:none"
cx="3.048"
cy="2.33"
r="0.45"
id="circle5970" />
<circle
style="fill:black;stroke:none"
cx="4.418"
cy="2.415"
r="0.45"
id="circle5972" />
<circle
style="fill:black;stroke:none"
cx="1.844"
cy="3.029"
r="0.45"
id="circle5974" />
<circle
style="fill:black;stroke:none"
cx="6.08"
cy="1.363"
r="0.45"
id="circle5976" />
<circle
style="fill:black;stroke:none"
cx="5.819"
cy="4.413"
r="0.45"
id="circle5978" />
<circle
style="fill:black;stroke:none"
cx="4.305"
cy="4.048"
r="0.45"
id="circle5980" />
<circle
style="fill:black;stroke:none"
cx="5.541"
cy="3.045"
r="0.45"
id="circle5982" />
<circle
style="fill:black;stroke:none"
cx="4.785"
cy="5.527"
r="0.45"
id="circle5984" />
<circle
style="fill:black;stroke:none"
cx="2.667"
cy="5.184"
r="0.45"
id="circle5986" />
<circle
style="fill:black;stroke:none"
cx="7.965"
cy="1.448"
r="0.45"
id="circle5988" />
<circle
style="fill:black;stroke:none"
cx="7.047"
cy="5.049"
r="0.45"
id="circle5990" />
<circle
style="fill:black;stroke:none"
cx="4.340"
cy="0.895"
r="0.45"
id="circle5992" />
<circle
style="fill:black;stroke:none"
cx="7.125"
cy="0.340"
r="0.45"
id="circle5994" />
<circle
style="fill:black;stroke:none"
cx="7.125"
cy="10.340"
r="0.45"
id="circle5996" />
<circle
style="fill:black;stroke:none"
cx="9.550"
cy="1.049"
r="0.45"
id="circle5998" />
<circle
style="fill:black;stroke:none"
cx="7.006"
cy="2.689"
r="0.45"
id="circle6000" />
<circle
style="fill:black;stroke:none"
cx="8.909"
cy="2.689"
r="0.45"
id="circle6002" />
<circle
style="fill:black;stroke:none"
cx="9.315"
cy="4.407"
r="0.45"
id="circle6004" />
<circle
style="fill:black;stroke:none"
cx="7.820"
cy="3.870"
r="0.45"
id="circle6006" />
<circle
style="fill:black;stroke:none"
cx="8.270"
cy="5.948"
r="0.45"
id="circle6008" />
<circle
style="fill:black;stroke:none"
cx="7.973"
cy="7.428"
r="0.45"
id="circle6010" />
<circle
style="fill:black;stroke:none"
cx="9.342"
cy="8.072"
r="0.45"
id="circle6012" />
<circle
style="fill:black;stroke:none"
cx="8.206"
cy="9.315"
r="0.45"
id="circle6014" />
<circle
style="fill:black;stroke:none"
cx="9.682"
cy="9.475"
r="0.45"
id="circle6016" />
<circle
style="fill:black;stroke:none"
cx="-0.318"
cy="9.475"
r="0.45"
id="circle6018" />
<circle
style="fill:black;stroke:none"
cx="9.688"
cy="6.186"
r="0.45"
id="circle6020" />
<circle
style="fill:black;stroke:none"
cx="-0.312"
cy="6.186"
r="0.45"
id="circle6022" />
<circle
style="fill:black;stroke:none"
cx="3.379"
cy="6.296"
r="0.45"
id="circle6024" />
<circle
style="fill:black;stroke:none"
cx="2.871"
cy="8.204"
r="0.45"
id="circle6026" />
<circle
style="fill:black;stroke:none"
cx="4.59"
cy="8.719"
r="0.45"
id="circle6028" />
<circle
style="fill:black;stroke:none"
cx="3.181"
cy="9.671"
r="0.45"
id="circle6030" />
<circle
style="fill:black;stroke:none"
cx="3.181"
cy="-0.329"
r="0.45"
id="circle6032" />
<circle
style="fill:black;stroke:none"
cx="5.734"
cy="7.315"
r="0.45"
id="circle6034" />
<circle
style="fill:black;stroke:none"
cx="6.707"
cy="6.513"
r="0.45"
id="circle6036" />
<circle
style="fill:black;stroke:none"
cx="5.730"
cy="9.670"
r="0.45"
id="circle6038" />
<circle
style="fill:black;stroke:none"
cx="5.730"
cy="-0.330"
r="0.45"
id="circle6040" />
<circle
style="fill:black;stroke:none"
cx="6.535"
cy="8.373"
r="0.45"
id="circle6042" />
<circle
style="fill:black;stroke:none"
cx="4.37"
cy="7.154"
r="0.45"
id="circle6044" />
<circle
style="fill:black;stroke:none"
cx="0.622"
cy="7.25"
r="0.45"
id="circle6046" />
<circle
style="fill:black;stroke:none"
cx="0.831"
cy="5.679"
r="0.45"
id="circle6048" />
<circle
style="fill:black;stroke:none"
cx="1.257"
cy="8.519"
r="0.45"
id="circle6050" />
<circle
style="fill:black;stroke:none"
cx="1.989"
cy="6.877"
r="0.45"
id="circle6052" />
<circle
style="fill:black;stroke:none"
cx="0.374"
cy="3.181"
r="0.45"
id="circle6054" />
<circle
style="fill:black;stroke:none"
cx="10.374"
cy="3.181"
r="0.45"
id="circle6056" />
<circle
style="fill:black;stroke:none"
cx="1.166"
cy="1.664"
r="0.45"
id="circle6058" />
<circle
style="fill:black;stroke:none"
cx="1.151"
cy="0.093"
r="0.45"
id="circle6060" />
<circle
style="fill:black;stroke:none"
cx="1.151"
cy="10.093"
r="0.45"
id="circle6062" />
<circle
style="fill:black;stroke:none"
cx="1.302"
cy="4.451"
r="0.45"
id="circle6064" />
<circle
style="fill:black;stroke:none"
cx="3.047"
cy="3.763"
r="0.45"
id="circle6066" />
</pattern>
<rect
x="16.595081"
y="14.2862"
width="247.74823"
height="77.94172"
id="rect935" />
<rect
x="16.595081"
y="14.2862"
width="247.74823"
height="77.94172"
id="rect1051" />
<rect
x="16.595081"
y="14.2862"
width="247.74823"
height="77.94172"
id="rect1205" />
<rect
x="16.595081"
y="14.2862"
width="270.88816"
height="79.870047"
id="rect1935" />
<rect
x="16.595081"
y="14.2862"
width="270.88816"
height="79.870047"
id="rect1987" />
<rect
x="16.595081"
y="14.2862"
width="270.88816"
height="79.870047"
id="rect1995" />
<rect
x="16.595081"
y="14.2862"
width="270.88816"
height="79.870047"
id="rect2003" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect2794" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3050" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3113">
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.647597;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="circle3115"
cx="24.514038"
cy="50.877434"
r="3.8201945" />
</clipPath>
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3119" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3206">
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="circle3208"
cx="27.645788"
cy="54.697628"
r="2.6457884" />
</clipPath>
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3295" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3386" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3627">
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.550532;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="circle3629"
cx="28.023756"
cy="61.331257"
r="2.7942765" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3835">
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="circle3837"
cx="29.400648"
cy="67.710587"
r="1.8898487" />
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath3845">
<rect
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="rect3847"
width="9.8002157"
height="2.5377996"
x="22.570196"
y="66.441681" />
</clipPath>
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3952" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3956" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect3960" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect4082" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297806"
id="rect3956-2" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297806"
id="rect3960-4" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect4528" />
<rect
x="16.595081"
y="14.2862"
width="240.6777"
height="86.297804"
id="rect6890" />
</defs>
<sodipodi:namedview
inkscape:current-layer="g-outline"
id="namedview152"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="2.4500417"
inkscape:cx="105.30433"
inkscape:cy="192.24163"
inkscape:window-width="1953"
inkscape:window-height="1647"
inkscape:window-x="1371"
inkscape:window-y="441"
inkscape:window-maximized="0" />
<g
id="g-top-paste"
inkscape:label="top paste"
inkscape:groupmode="layer" />
<g
id="g-top-silk"
inkscape:label="top silk"
inkscape:groupmode="layer" />
<g
id="g-top-mask"
inkscape:label="top mask"
inkscape:groupmode="layer" />
<g
id="g-top-copper"
inkscape:label="top copper"
inkscape:groupmode="layer" />
<g
id="g-bottom-copper"
inkscape:label="bottom copper"
inkscape:groupmode="layer" />
<g
id="g-bottom-mask"
inkscape:label="bottom mask"
inkscape:groupmode="layer" />
<g
id="g-bottom-silk"
inkscape:label="bottom silk"
inkscape:groupmode="layer" />
<g
id="g-bottom-paste"
inkscape:label="bottom paste"
inkscape:groupmode="layer" />
<g
id="g-outline"
inkscape:label="outline"
inkscape:groupmode="layer">
<rect
style="fill:none;fill-rule:evenodd;stroke-width:0.1;paint-order:fill markers stroke;stop-color:#000000;stroke:#000000;stroke-dasharray:none"
id="rect270"
width="100"
height="100"
x="-4.4408921e-16"
y="0" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,6.8667425,2.8656611)"
id="text933"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect935);display:inline"><tspan
x="58.45161"
y="41.306035"
id="tspan7049">simple path</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 22.705533,4.6733961 H 33.167047"
id="path1047" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,6.8808531,7.3328044)"
id="text1049"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect1051);display:inline"><tspan
x="58.689154"
y="41.306035"
id="tspan7051">corner path</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 22.705839,10.005595 5.192577,-2.0617595 5.268937,2.0617595"
id="path1103"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,6.7882496,12.44902)"
id="text1201"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect1205);display:inline"><tspan
x="57.130163"
y="41.306035"
id="tspan7053">curved path</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 22.692461,14.581853 c 0,0 4.638508,2.548328 5.230758,-0.763615 0.55918,-3.127016 3.617687,2.256085 5.230756,0.763615"
id="path1203"
sodipodi:nodetypes="csc" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,2.9425817,17.16331)"
id="text1933"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect1935);display:inline"
x="124.18531"
y="0"><tspan
x="187.29086"
y="41.306035"
id="tspan7055">group;
</tspan><tspan
x="36.142285"
y="78.425034"
id="tspan7057">endcaps and joins</tspan></text>
<g
id="g2734"
transform="translate(5.2953574,-1.8358531)">
<path
style="fill:none;stroke:#000000;stroke-width:0.9;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 18.574916,20.541223 5.192577,-2.061759 c -0.599962,4.290659 3.333486,-0.418399 5.268937,2.061759"
id="path1937"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.9;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="m 17.505856,22.469349 5.192577,-2.061759 c -0.599962,4.290659 3.333486,-0.418399 5.268937,2.061759"
id="path1939"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.9;stroke-linecap:square;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
d="m 16.474977,24.512017 5.192577,-2.061759 c -0.599962,4.290659 3.333486,-0.418399 5.268937,2.061759"
id="path1945"
sodipodi:nodetypes="ccc" />
</g>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,7.8058302,29.501323)"
id="text1985"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect1987);display:inline"><tspan
x="97.281146"
y="41.306035"
id="tspan7059">plain fill</tspan></text>
<path
style="fill:#000000;stroke:none;stroke-width:0.176389px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 24.037881,30.609551 7.37041,-0.37197 0.426408,0.953658 -4.746062,1.638134 z"
id="path1991"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3822489,33.308018)"
id="text1993"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect1995);display:inline"><tspan
x="57.489574"
y="41.306035"
id="tspan7061">fill and stroke</tspan></text>
<path
style="fill:#000000;stroke:#000000;stroke-width:0.176389px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 24.104798,34.389249 7.37041,-0.37197 0.426408,0.953658 -4.746062,1.638134 z"
id="path1997"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,6.2747768,25.397651)"
id="text1999"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect2003);display:inline"><tspan
x="71.624484"
y="41.306035"
id="tspan7063">closed path</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
d="m 24.037862,26.478882 7.37041,-0.37197 0.426408,0.953658 -4.746062,1.638134 z"
id="path2001"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3822489,38.462414)"
id="text2792"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect2794);display:inline"
x="76.212669"
y="0"><tspan
x="104.34328"
y="41.306035"
id="tspan7065">predefined </tspan><tspan
x="158.80415"
y="78.425034"
id="tspan7067">shapes</tspan></text>
<g
id="g2916"
transform="translate(5.4287604,-1.5315419)">
<circle
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="path2910"
cx="20.102144"
cy="43.086933"
r="1.2790539" />
<rect
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="rect2912"
width="2.7871919"
height="2.7871919"
x="23.404778"
y="41.693336" />
</g>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3822489,44.647688)"
id="text3048"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3050);display:inline"
x="76.212669"
y="0"><tspan
x="130.38594"
y="41.306035"
id="tspan7069">open clip</tspan></text>
<g
id="g3111"
clip-path="url(#clipPath3113)"
transform="translate(3.4222519,-4.1579965)">
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 29.622354,51.276401 c 0,0 -1.750305,1.946645 -3.375581,1.93653 -1.321482,-0.0082 -1.448632,-1.370721 -3.058728,-1.420138 -2.153629,-0.0661 -3.782176,1.136027 -3.782176,1.136027"
id="path3052"
sodipodi:nodetypes="cssc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 29.622354,50.439468 c 0,0 -1.750305,1.946645 -3.375581,1.93653 -1.321482,-0.0082 -1.448632,-1.370721 -3.058728,-1.420138 -2.153629,-0.0661 -3.782176,1.136027 -3.782176,1.136027"
id="path3054"
sodipodi:nodetypes="cssc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 29.622354,49.508043 c 0,0 -1.750305,1.946645 -3.375581,1.93653 -1.321482,-0.0082 -1.448632,-1.370721 -3.058728,-1.420138 -2.153629,-0.0661 -3.782176,1.136027 -3.782176,1.136027"
id="path3056"
sodipodi:nodetypes="cssc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 29.622354,48.54962 c 0,0 -1.750305,1.946645 -3.375581,1.93653 -1.321482,-0.0082 -1.448632,-1.370721 -3.058728,-1.420138 -2.153629,-0.0661 -3.782176,1.136027 -3.782176,1.136027"
id="path3058"
sodipodi:nodetypes="cssc" />
</g>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3822489,50.641538)"
id="text3117"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3119);display:inline"
x="76.212669"
y="0"><tspan
x="112.59854"
y="41.306035"
id="tspan7071">closed clip</tspan></text>
<path
id="rect3201"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.349326;stroke-linecap:square;stroke-linejoin:round;paint-order:fill markers stroke;stop-color:#000000"
d="m 25.410625,52.462463 h 4.470328 v 4.470328 h -4.470328 z"
clip-path="url(#clipPath3206)"
transform="translate(0.29050101,-2.0611323)" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3822489,55.98711)"
id="text3293"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3295);display:inline"
x="76.212669"
y="0"><tspan
x="133.50398"
y="41.306035"
id="tspan7073">filled clip</tspan></text>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3822489,64.518427)"
id="text3384"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3386);display:inline"
x="76.212669"
y="0"><tspan
x="106.65948"
y="41.306035"
id="tspan7075">nested clip</tspan></text>
<path
id="path3622"
style="fill-rule:evenodd;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;paint-order:fill markers stroke;stop-color:#000000"
inkscape:transform-center-y="-1.0053078"
d="m 31.506243,64.125533 h -3.482486 -3.482485 l 1.741242,-3.015921 1.741243,-3.015921 1.741243,3.015921 z"
clip-path="url(#clipPath3627)"
transform="translate(-0.08746602,-2.5107991)" />
<g
id="g3843"
clip-path="url(#clipPath3845)"
transform="translate(0.8149011,-1.2958963)">
<path
id="path3819"
style="fill-rule:evenodd;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;paint-order:fill markers stroke;stop-color:#000000"
inkscape:transform-center-x="0.70766436"
d="m 27.198265,70.162005 -2.122992,-1.22571 -2.122992,-1.225711 2.122992,-1.22571 2.122992,-1.22571 v 2.45142 z" />
<path
id="path3823"
style="fill-rule:evenodd;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;paint-order:fill markers stroke;stop-color:#000000"
inkscape:transform-center-x="-0.70766454"
d="m 28.039316,70.162005 2.122992,-1.22571 2.122992,-1.225711 -2.122992,-1.22571 -2.122992,-1.22571 v 2.45142 z"
clip-path="url(#clipPath3835)" />
</g>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3646103,72.230931)"
id="text3950"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3952);display:inline"
x="76.212669"
y="0"><tspan
x="185.7971"
y="41.306035"
id="tspan7077">fonts</tspan></text>
<g
id="g3964"
transform="translate(0.26725891,-1.2958963)">
<text
xml:space="preserve"
transform="matrix(0.19209956,0,0,0.19209956,-22.574531,69.324577)"
id="text3954"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3956);display:inline"
x="76.212669"
y="0"><tspan
x="238.29821"
y="41.306035"
id="tspan7079">A</tspan></text>
<text
xml:space="preserve"
transform="matrix(0.19209956,0,0,0.19209956,-17.286502,69.324577)"
id="text3958"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.6952px;line-height:1.25;font-family:serif;-inkscape-font-specification:serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3960);display:inline"
x="76.212669"
y="0"><tspan
x="236.33832"
y="41.318475"
id="tspan7081">A</tspan></text>
</g>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.3646103,78.568929)"
id="text4080"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect4082);display:inline"
x="76.212669"
y="0"><tspan
x="103.21475"
y="41.306035"
id="tspan7083">transforms</tspan></text>
<g
aria-label="A"
transform="matrix(0.19209956,0,0,0.19209956,-21.792044,75.044579)"
id="text3958-5"
style="font-size:29.6952px;line-height:1.25;font-family:serif;-inkscape-font-specification:serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3960-4);display:inline">
<g
id="g4399"
transform="translate(-4.1636239)">
<path
d="m 239.50049,14.635007 v 1.251332 h 0.32749 q 0.49984,0 0.74115,0.446904 0.25853,0.446904 0.56878,1.876998 l 3.82637,17.69741 h 1.3444 l 3.89531,-18.44225 q 0.1896,-0.923602 0.44814,-1.251333 0.27577,-0.327729 0.77561,-0.327729 h 0.22407 v -1.251332 h -4.73987 v 1.251332 h 0.39642 q 1.03416,0 1.03416,1.430094 0,0.238348 -0.0345,0.506491 -0.0345,0.268142 -0.10342,0.595873 l -0.68943,3.336885 h -4.53305 l -0.65496,-3.128329 q -0.15512,-0.715048 -0.15512,-1.281127 0,-1.459887 1.13756,-1.459887 h 0.39643 v -1.251332 z m 3.80914,8.610356 h 3.89532 l -1.06863,5.213884 q -0.27578,1.310918 -0.49984,2.472869 -0.22407,1.161951 -0.36195,2.234522 -0.12066,-1.072571 -0.31025,-2.05576 -0.1896,-0.983189 -0.4826,-2.38349 z"
id="path4264"
style="stroke-width:0.763121" />
<path
d="m 274.98158,14.564737 -0.71924,1.247198 h -0.56421 q -0.86116,0 -1.53377,0.445428 -0.70229,0.445428 -2.0588,1.870798 L 253.34114,35.76711 h -2.31623 l 3.8891,-18.381329 q 0.20422,-0.920551 -0.0528,-1.247199 -0.28675,-0.326647 -1.14791,-0.326647 h -0.38604 l 0.71924,-1.247198 h 8.16618 l -0.71924,1.247198 h -0.68299 q -1.78171,0 -2.6037,1.42537 -0.13699,0.237561 -0.23172,0.504818 -0.0947,0.267257 -0.16432,0.593904 l -0.73016,3.325863 h 7.80984 l 2.9265,-3.117996 q 0.67826,-0.712685 1.00363,-1.276894 0.83911,-1.455065 -1.12077,-1.455065 h -0.68299 l 0.71924,-1.247198 z m -11.51169,8.581913 h -6.71112 l -1.15573,5.19666 q -0.27835,1.306588 -0.56018,2.464701 -0.28183,1.158113 -0.66076,2.22714 0.82436,-1.069027 1.71612,-2.048969 0.89177,-0.979941 2.20144,-2.375616 z"
id="path4267" />
<path
d="m 286.56177,36.228458 -1.14338,0.4982 -0.22537,-0.517242 q -0.344,-0.789473 -0.91841,-0.992676 -0.58628,-0.230409 -2.1065,-0.151063 l -18.8039,1.002412 -0.92523,-2.123412 14.17037,-13.494927 q 0.71343,-0.667176 0.83496,-1.206008 0.10966,-0.566047 -0.23433,-1.355519 l -0.1542,-0.353901 1.14337,-0.4982 3.26201,7.486371 -1.14337,0.498199 -0.27282,-0.626133 q -0.71172,-1.633389 -2.01843,-1.064019 -0.21779,0.09489 -0.43907,0.256106 -0.22127,0.161214 -0.47329,0.400575 l -2.57452,2.417459 3.11967,7.159695 3.30919,-0.211021 q 0.76011,-0.03968 1.27735,-0.26505 1.33394,-0.581231 0.55106,-2.377957 l -0.27283,-0.626137 1.14338,-0.498194 z m -10.48897,-2.588239 -2.68079,-6.152441 -4.02862,3.76366 q -1.00802,0.957502 -1.91553,1.774016 -0.9075,0.816507 -1.79263,1.461322 1.06307,-0.236463 2.09191,-0.328449 1.02885,-0.09198 2.50998,-0.186707 z"
id="path4392" />
</g>
</g>
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.4281104,84.658753)"
id="text4526"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect4528);display:inline"
x="76.212669"
y="0"><tspan
x="153.5481"
y="41.306035"
id="tspan7085">pattern</tspan></text>
<path
id="path4530"
style="fill:url(#pattern6704);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
d="m 25.800794,83.999673 a 2.7012854,2.7012854 0 0 0 -2.701644,2.701644 2.7012854,2.7012854 0 0 0 2.701644,2.701127 2.7012854,2.7012854 0 0 0 2.138371,-1.052649 2.7012854,2.7012854 0 0 0 2.137854,1.052649 2.7012854,2.7012854 0 0 0 2.701127,-2.701127 2.7012854,2.7012854 0 0 0 -2.701127,-2.701644 2.7012854,2.7012854 0 0 0 -2.137854,1.051615 2.7012854,2.7012854 0 0 0 -2.138371,-1.051615 z" />
<text
xml:space="preserve"
transform="matrix(0.05939974,0,0,0.05939974,5.4281104,91.454919)"
id="text6888"
style="font-size:29.6952px;line-height:1.25;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect6890);display:inline"
x="76.212669"
y="0"><tspan
x="126.58495"
y="41.306035"
id="tspan7087">occlusion</tspan></text>
<g
id="g6898"
transform="translate(0.18127085,-1.2958963)">
<rect
style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="rect6892"
width="10.614238"
height="4.3144202"
x="22.450258"
y="92.206421" />
<circle
style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:0.499999;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;paint-order:fill markers stroke;stop-color:#000000"
id="path6894"
cx="27.757378"
cy="94.363632"
r="3.1689992" />
</g>
</g>
<g
id="g-plated-drill"
inkscape:label="plated drill"
inkscape:groupmode="layer" />
<g
id="g-nonplated-drill"
inkscape:label="nonplated drill"
inkscape:groupmode="layer" />
<g
id="g-comments"
inkscape:label="comments"
inkscape:groupmode="layer" />
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

View file

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
#
# Copyright 2022 Jan Götte <code@jaseg.de>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import sys
import subprocess
import tempfile
from pathlib import Path
import pytest
REFERENCE_GERBERS = ['test_gerber_8seg.zip']
REFERENCE_SVGS = ['svg_feature_test.svg']
reference_path = lambda reference: Path(__file__).parent / 'resources' / str(reference)
def run_command(*args):
try:
proc = subprocess.run(args, check=True, capture_output=True)
except subprocess.CalledProcessError as e:
print(e.stdout.decode())
print(e.stderr.decode(), file=sys.stderr)
raise
def test_template_round_trip():
with tempfile.NamedTemporaryFile(suffix='.svg') as out_svg,\
tempfile.TemporaryDirectory() as out_dir:
run_command('python', '-m', 'gerbolyze', 'empty-template', '--force', out_svg.name)
run_command('python', '-m', 'gerbolyze', 'convert', out_svg.name, out_dir)
def test_zip_write():
with tempfile.NamedTemporaryFile(suffix='.svg') as out_svg,\
tempfile.NamedTemporaryFile(suffix='.zip') as out_zip:
run_command('python', '-m', 'gerbolyze', 'empty-template', '--force', out_svg.name)
run_command('python', '-m', 'gerbolyze', 'convert', out_svg.name, out_zip.name)
@pytest.mark.parametrize('reference', REFERENCE_SVGS)
def test_complex_conversion(reference):
infile = reference_path(reference)
with tempfile.NamedTemporaryFile(suffix='.zip') as out_zip:
run_command('python', '-m', 'gerbolyze', 'convert', infile, out_zip.name)
run_command('python', '-m', 'gerbolyze', 'convert', '--pattern-complete-tiles-only', '--use-apertures-for-patterns', infile, out_zip.name)
@pytest.mark.parametrize('reference', REFERENCE_GERBERS)
def test_template(reference):
with tempfile.NamedTemporaryFile(suffix='.zip') as out_svg:
infile = reference_path(reference)
run_command('python', '-m', 'gerbolyze', 'template', '--top', '--force', infile, out_svg.name)
run_command('python', '-m', 'gerbolyze', 'template', '--bottom', '--force', '--vector', infile, out_svg.name)