You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.0 KiB
76 lines
2.0 KiB
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())
|