fonttools/Tests/svgLib/path/path_test.py
Cosimo Lupo b8b1bc4341
path_test: fix parsing xml declaration
the latest lxml.etree.fromstring complains with syntax error when the xml declaration contain 'standalone' but does not contain encoding, apparently the xml declaration attributes have predefined order
2024-01-15 17:21:17 +00:00

71 lines
2.1 KiB
Python

from fontTools.misc.textTools import tobytes
from fontTools.pens.recordingPen import RecordingPen
from fontTools.svgLib import SVGPath
import os
from tempfile import NamedTemporaryFile
SVG_DATA = """\
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1000.0" height="1000.0">
<path d="M 100 100 L 300 100 L 200 300 z"/>
<path d="M100,200 C100,100 250,100 250,200 S400,300 400,200"/>
</svg>
""".encode(
"utf-8"
)
EXPECTED_PEN_COMMANDS = [
("moveTo", ((100.0, 100.0),)),
("lineTo", ((300.0, 100.0),)),
("lineTo", ((200.0, 300.0),)),
("lineTo", ((100.0, 100.0),)),
("closePath", ()),
("moveTo", ((100.0, 200.0),)),
("curveTo", ((100.0, 100.0), (250.0, 100.0), (250.0, 200.0))),
("curveTo", ((250.0, 300.0), (400.0, 300.0), (400.0, 200.0))),
("endPath", ()),
]
class SVGPathTest(object):
def test_from_svg_file(self):
pen = RecordingPen()
with NamedTemporaryFile(delete=False) as tmp:
tmp.write(tobytes(SVG_DATA))
try:
svg = SVGPath(tmp.name)
svg.draw(pen)
finally:
os.remove(tmp.name)
assert pen.value == EXPECTED_PEN_COMMANDS
def test_fromstring(self):
pen = RecordingPen()
svg = SVGPath.fromstring(SVG_DATA)
svg.draw(pen)
assert pen.value == EXPECTED_PEN_COMMANDS
def test_transform(self):
pen = RecordingPen()
svg = SVGPath.fromstring(SVG_DATA, transform=(1.0, 0, 0, -1.0, 0, 1000))
svg.draw(pen)
assert pen.value == [
("moveTo", ((100.0, 900.0),)),
("lineTo", ((300.0, 900.0),)),
("lineTo", ((200.0, 700.0),)),
("lineTo", ((100.0, 900.0),)),
("closePath", ()),
("moveTo", ((100.0, 800.0),)),
("curveTo", ((100.0, 900.0), (250.0, 900.0), (250.0, 800.0))),
("curveTo", ((250.0, 700.0), (400.0, 700.0), (400.0, 800.0))),
("endPath", ()),
]