from fontTools.pens.boundsPen import BoundsPen, ControlBoundsPen import unittest def draw_(pen): pen.moveTo((0, 0)) pen.lineTo((0, 100)) pen.qCurveTo((50, 75), (60, 50), (50, 25), (0, 0)) pen.curveTo((-50, 25), (-60, 50), (-50, 75), (0, 100)) pen.closePath() def bounds_(pen): return " ".join(["%.0f" % c for c in pen.bounds]) class BoundsPenTest(unittest.TestCase): def test_draw(self): pen = BoundsPen(None) draw_(pen) self.assertEqual("-55 0 58 100", bounds_(pen)) def test_empty(self): pen = BoundsPen(None) self.assertEqual(None, pen.bounds) def test_curve(self): pen = BoundsPen(None) pen.moveTo((0, 0)) pen.curveTo((20, 10), (90, 40), (0, 0)) self.assertEqual("0 0 45 20", bounds_(pen)) def test_quadraticCurve(self): pen = BoundsPen(None) pen.moveTo((0, 0)) pen.qCurveTo((6, 6), (10, 0)) self.assertEqual("0 0 10 3", bounds_(pen)) class ControlBoundsPenTest(unittest.TestCase): def test_draw(self): pen = ControlBoundsPen(None) draw_(pen) self.assertEqual("-55 0 60 100", bounds_(pen)) def test_empty(self): pen = ControlBoundsPen(None) self.assertEqual(None, pen.bounds) def test_curve(self): pen = ControlBoundsPen(None) pen.moveTo((0, 0)) pen.curveTo((20, 10), (90, 40), (0, 0)) self.assertEqual("0 0 90 40", bounds_(pen)) def test_quadraticCurve(self): pen = ControlBoundsPen(None) pen.moveTo((0, 0)) pen.qCurveTo((6, 6), (10, 0)) self.assertEqual("0 0 10 6", bounds_(pen)) def test_singlePoint(self): pen = ControlBoundsPen(None) pen.moveTo((-5, 10)) self.assertEqual("-5 10 -5 10", bounds_(pen)) def test_ignoreSinglePoint(self): pen = ControlBoundsPen(None, ignoreSinglePoints=True) pen.moveTo((0, 10)) self.assertEqual(None, pen.bounds) if __name__ == '__main__': import sys sys.exit(unittest.main())