1from fontTools.pens.boundsPen import BoundsPen, ControlBoundsPen 2import unittest 3 4 5def draw_(pen): 6 pen.moveTo((0, 0)) 7 pen.lineTo((0, 100)) 8 pen.qCurveTo((50, 75), (60, 50), (50, 25), (0, 0)) 9 pen.curveTo((-50, 25), (-60, 50), (-50, 75), (0, 100)) 10 pen.closePath() 11 12 13def bounds_(pen): 14 return " ".join(["%.0f" % c for c in pen.bounds]) 15 16 17class BoundsPenTest(unittest.TestCase): 18 def test_draw(self): 19 pen = BoundsPen(None) 20 draw_(pen) 21 self.assertEqual("-55 0 58 100", bounds_(pen)) 22 23 def test_empty(self): 24 pen = BoundsPen(None) 25 self.assertEqual(None, pen.bounds) 26 27 def test_curve(self): 28 pen = BoundsPen(None) 29 pen.moveTo((0, 0)) 30 pen.curveTo((20, 10), (90, 40), (0, 0)) 31 self.assertEqual("0 0 45 20", bounds_(pen)) 32 33 def test_quadraticCurve(self): 34 pen = BoundsPen(None) 35 pen.moveTo((0, 0)) 36 pen.qCurveTo((6, 6), (10, 0)) 37 self.assertEqual("0 0 10 3", bounds_(pen)) 38 39 40class ControlBoundsPenTest(unittest.TestCase): 41 def test_draw(self): 42 pen = ControlBoundsPen(None) 43 draw_(pen) 44 self.assertEqual("-55 0 60 100", bounds_(pen)) 45 46 def test_empty(self): 47 pen = ControlBoundsPen(None) 48 self.assertEqual(None, pen.bounds) 49 50 def test_curve(self): 51 pen = ControlBoundsPen(None) 52 pen.moveTo((0, 0)) 53 pen.curveTo((20, 10), (90, 40), (0, 0)) 54 self.assertEqual("0 0 90 40", bounds_(pen)) 55 56 def test_quadraticCurve(self): 57 pen = ControlBoundsPen(None) 58 pen.moveTo((0, 0)) 59 pen.qCurveTo((6, 6), (10, 0)) 60 self.assertEqual("0 0 10 6", bounds_(pen)) 61 62 def test_singlePoint(self): 63 pen = ControlBoundsPen(None) 64 pen.moveTo((-5, 10)) 65 self.assertEqual("-5 10 -5 10", bounds_(pen)) 66 67 def test_ignoreSinglePoint(self): 68 pen = ControlBoundsPen(None, ignoreSinglePoints=True) 69 pen.moveTo((0, 10)) 70 self.assertEqual(None, pen.bounds) 71 72 73if __name__ == "__main__": 74 import sys 75 76 sys.exit(unittest.main()) 77