1*e1fe3e4aSElliott Hughesfrom fontTools.misc.textTools import tobytes 2*e1fe3e4aSElliott Hughesfrom fontTools.pens.recordingPen import RecordingPen 3*e1fe3e4aSElliott Hughesfrom fontTools.svgLib import SVGPath 4*e1fe3e4aSElliott Hughes 5*e1fe3e4aSElliott Hughesimport os 6*e1fe3e4aSElliott Hughesfrom tempfile import NamedTemporaryFile 7*e1fe3e4aSElliott Hughes 8*e1fe3e4aSElliott Hughes 9*e1fe3e4aSElliott HughesSVG_DATA = """\ 10*e1fe3e4aSElliott Hughes<?xml version="1.0" encoding="UTF-8" standalone="no"?> 11*e1fe3e4aSElliott Hughes<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" 12*e1fe3e4aSElliott Hughes "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> 13*e1fe3e4aSElliott Hughes<svg version="1.0" xmlns="http://www.w3.org/2000/svg" 14*e1fe3e4aSElliott Hughes width="1000.0" height="1000.0"> 15*e1fe3e4aSElliott Hughes<path d="M 100 100 L 300 100 L 200 300 z"/> 16*e1fe3e4aSElliott Hughes<path d="M100,200 C100,100 250,100 250,200 S400,300 400,200"/> 17*e1fe3e4aSElliott Hughes</svg> 18*e1fe3e4aSElliott Hughes""".encode( 19*e1fe3e4aSElliott Hughes "utf-8" 20*e1fe3e4aSElliott Hughes) 21*e1fe3e4aSElliott Hughes 22*e1fe3e4aSElliott HughesEXPECTED_PEN_COMMANDS = [ 23*e1fe3e4aSElliott Hughes ("moveTo", ((100.0, 100.0),)), 24*e1fe3e4aSElliott Hughes ("lineTo", ((300.0, 100.0),)), 25*e1fe3e4aSElliott Hughes ("lineTo", ((200.0, 300.0),)), 26*e1fe3e4aSElliott Hughes ("lineTo", ((100.0, 100.0),)), 27*e1fe3e4aSElliott Hughes ("closePath", ()), 28*e1fe3e4aSElliott Hughes ("moveTo", ((100.0, 200.0),)), 29*e1fe3e4aSElliott Hughes ("curveTo", ((100.0, 100.0), (250.0, 100.0), (250.0, 200.0))), 30*e1fe3e4aSElliott Hughes ("curveTo", ((250.0, 300.0), (400.0, 300.0), (400.0, 200.0))), 31*e1fe3e4aSElliott Hughes ("endPath", ()), 32*e1fe3e4aSElliott Hughes] 33*e1fe3e4aSElliott Hughes 34*e1fe3e4aSElliott Hughes 35*e1fe3e4aSElliott Hughesclass SVGPathTest(object): 36*e1fe3e4aSElliott Hughes def test_from_svg_file(self): 37*e1fe3e4aSElliott Hughes pen = RecordingPen() 38*e1fe3e4aSElliott Hughes with NamedTemporaryFile(delete=False) as tmp: 39*e1fe3e4aSElliott Hughes tmp.write(tobytes(SVG_DATA)) 40*e1fe3e4aSElliott Hughes try: 41*e1fe3e4aSElliott Hughes svg = SVGPath(tmp.name) 42*e1fe3e4aSElliott Hughes svg.draw(pen) 43*e1fe3e4aSElliott Hughes finally: 44*e1fe3e4aSElliott Hughes os.remove(tmp.name) 45*e1fe3e4aSElliott Hughes 46*e1fe3e4aSElliott Hughes assert pen.value == EXPECTED_PEN_COMMANDS 47*e1fe3e4aSElliott Hughes 48*e1fe3e4aSElliott Hughes def test_fromstring(self): 49*e1fe3e4aSElliott Hughes pen = RecordingPen() 50*e1fe3e4aSElliott Hughes svg = SVGPath.fromstring(SVG_DATA) 51*e1fe3e4aSElliott Hughes svg.draw(pen) 52*e1fe3e4aSElliott Hughes 53*e1fe3e4aSElliott Hughes assert pen.value == EXPECTED_PEN_COMMANDS 54*e1fe3e4aSElliott Hughes 55*e1fe3e4aSElliott Hughes def test_transform(self): 56*e1fe3e4aSElliott Hughes pen = RecordingPen() 57*e1fe3e4aSElliott Hughes svg = SVGPath.fromstring(SVG_DATA, transform=(1.0, 0, 0, -1.0, 0, 1000)) 58*e1fe3e4aSElliott Hughes svg.draw(pen) 59*e1fe3e4aSElliott Hughes 60*e1fe3e4aSElliott Hughes assert pen.value == [ 61*e1fe3e4aSElliott Hughes ("moveTo", ((100.0, 900.0),)), 62*e1fe3e4aSElliott Hughes ("lineTo", ((300.0, 900.0),)), 63*e1fe3e4aSElliott Hughes ("lineTo", ((200.0, 700.0),)), 64*e1fe3e4aSElliott Hughes ("lineTo", ((100.0, 900.0),)), 65*e1fe3e4aSElliott Hughes ("closePath", ()), 66*e1fe3e4aSElliott Hughes ("moveTo", ((100.0, 800.0),)), 67*e1fe3e4aSElliott Hughes ("curveTo", ((100.0, 900.0), (250.0, 900.0), (250.0, 800.0))), 68*e1fe3e4aSElliott Hughes ("curveTo", ((250.0, 700.0), (400.0, 700.0), (400.0, 800.0))), 69*e1fe3e4aSElliott Hughes ("endPath", ()), 70*e1fe3e4aSElliott Hughes ] 71