xref: /aosp_15_r20/external/fonttools/Tests/pens/boundsPen_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
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