from fontTools.pens.recordingPen import ( RecordingPen, DecomposingRecordingPen, RecordingPointPen, ) import pytest class _TestGlyph(object): def draw(self, pen): pen.moveTo((0.0, 0.0)) pen.lineTo((0.0, 100.0)) pen.curveTo((50.0, 75.0), (60.0, 50.0), (50.0, 0.0)) pen.closePath() def drawPoints(self, pen): pen.beginPath(identifier="abc") pen.addPoint((0.0, 0.0), "line", False, "start", identifier="0000") pen.addPoint((0.0, 100.0), "line", False, None, identifier="0001") pen.addPoint((50.0, 75.0), None, False, None, identifier="0002") pen.addPoint((60.0, 50.0), None, False, None, identifier="0003") pen.addPoint((50.0, 0.0), "curve", True, "last", identifier="0004") pen.endPath() class RecordingPenTest(object): def test_addComponent(self): pen = RecordingPen() pen.addComponent("a", (2, 0, 0, 3, -10, 5)) assert pen.value == [("addComponent", ("a", (2, 0, 0, 3, -10, 5)))] class DecomposingRecordingPenTest(object): def test_addComponent_decomposed(self): pen = DecomposingRecordingPen({"a": _TestGlyph()}) pen.addComponent("a", (2, 0, 0, 3, -10, 5)) assert pen.value == [ ("moveTo", ((-10.0, 5.0),)), ("lineTo", ((-10.0, 305.0),)), ("curveTo", ((90.0, 230.0), (110.0, 155.0), (90.0, 5.0))), ("closePath", ()), ] def test_addComponent_missing_raises(self): pen = DecomposingRecordingPen(dict()) with pytest.raises(KeyError) as excinfo: pen.addComponent("a", (1, 0, 0, 1, 0, 0)) assert excinfo.value.args[0] == "a" class RecordingPointPenTest: def test_record_and_replay(self): pen = RecordingPointPen() glyph = _TestGlyph() glyph.drawPoints(pen) pen.addComponent("a", (2, 0, 0, 2, -10, 5)) assert pen.value == [ ("beginPath", (), {"identifier": "abc"}), ("addPoint", ((0.0, 0.0), "line", False, "start"), {"identifier": "0000"}), ("addPoint", ((0.0, 100.0), "line", False, None), {"identifier": "0001"}), ("addPoint", ((50.0, 75.0), None, False, None), {"identifier": "0002"}), ("addPoint", ((60.0, 50.0), None, False, None), {"identifier": "0003"}), ("addPoint", ((50.0, 0.0), "curve", True, "last"), {"identifier": "0004"}), ("endPath", (), {}), ("addComponent", ("a", (2, 0, 0, 2, -10, 5)), {}), ] pen2 = RecordingPointPen() pen.replay(pen2) assert pen2.value == pen.value