xref: /aosp_15_r20/external/fonttools/Tests/pens/areaPen_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1from fontTools.pens.areaPen import AreaPen
2import unittest
3
4precision = 6
5
6
7def draw1_(pen):
8    pen.moveTo((254, 360))
9    pen.lineTo((771, 367))
10    pen.curveTo((800, 393), (808, 399), (819, 412))
11    pen.curveTo((818, 388), (774, 138), (489, 145))
12    pen.curveTo((188, 145), (200, 398), (200, 421))
13    pen.curveTo((209, 409), (220, 394), (254, 360))
14    pen.closePath()
15
16
17def draw2_(pen):
18    pen.moveTo((254, 360))
19    pen.curveTo((220, 394), (209, 409), (200, 421))
20    pen.curveTo((200, 398), (188, 145), (489, 145))
21    pen.curveTo((774, 138), (818, 388), (819, 412))
22    pen.curveTo((808, 399), (800, 393), (771, 367))
23    pen.closePath()
24
25
26def draw3_(pen):
27    pen.moveTo((771, 367))
28    pen.curveTo((800, 393), (808, 399), (819, 412))
29    pen.curveTo((818, 388), (774, 138), (489, 145))
30    pen.curveTo((188, 145), (200, 398), (200, 421))
31    pen.curveTo((209, 409), (220, 394), (254, 360))
32    pen.closePath()
33
34
35def draw4_(pen):
36    pen.moveTo((771, 367))
37    pen.lineTo((254, 360))
38    pen.curveTo((220, 394), (209, 409), (200, 421))
39    pen.curveTo((200, 398), (188, 145), (489, 145))
40    pen.curveTo((774, 138), (818, 388), (819, 412))
41    pen.curveTo((808, 399), (800, 393), (771, 367))
42    pen.closePath()
43
44
45def draw5_(pen):
46    pen.moveTo((254, 360))
47    pen.lineTo((771, 367))
48    pen.qCurveTo((793, 386), (802, 394))
49    pen.qCurveTo((811, 402), (819, 412))
50    pen.qCurveTo((819, 406), (814, 383.5))
51    pen.qCurveTo((809, 361), (796, 330.5))
52    pen.qCurveTo((783, 300), (760.5, 266.5))
53    pen.qCurveTo((738, 233), (701, 205.5))
54    pen.qCurveTo((664, 178), (612, 160.5))
55    pen.qCurveTo((560, 143), (489, 145))
56    pen.qCurveTo((414, 145), (363, 164))
57    pen.qCurveTo((312, 183), (280, 211.5))
58    pen.qCurveTo((248, 240), (231.5, 274.5))
59    pen.qCurveTo((215, 309), (208, 339.5))
60    pen.qCurveTo((201, 370), (200.5, 392.5))
61    pen.qCurveTo((200, 415), (200, 421))
62    pen.qCurveTo((207, 412), (217.5, 399))
63    pen.qCurveTo((228, 386), (254, 360))
64    pen.closePath()
65
66
67def draw6_(pen):
68    pen.moveTo((254, 360))
69    pen.qCurveTo((228, 386), (217.5, 399))
70    pen.qCurveTo((207, 412), (200, 421))
71    pen.qCurveTo((200, 415), (200.5, 392.5))
72    pen.qCurveTo((201, 370), (208, 339.5))
73    pen.qCurveTo((215, 309), (231.5, 274.5))
74    pen.qCurveTo((248, 240), (280, 211.5))
75    pen.qCurveTo((312, 183), (363, 164))
76    pen.qCurveTo((414, 145), (489, 145))
77    pen.qCurveTo((560, 143), (612, 160.5))
78    pen.qCurveTo((664, 178), (701, 205.5))
79    pen.qCurveTo((738, 233), (760.5, 266.5))
80    pen.qCurveTo((783, 300), (796, 330.5))
81    pen.qCurveTo((809, 361), (814, 383.5))
82    pen.qCurveTo((819, 406), (819, 412))
83    pen.qCurveTo((811, 402), (802, 394))
84    pen.qCurveTo((793, 386), (771, 367))
85    pen.closePath()
86
87
88def draw7_(pen):
89    pen.moveTo((771, 367))
90    pen.qCurveTo((793, 386), (802, 394))
91    pen.qCurveTo((811, 402), (819, 412))
92    pen.qCurveTo((819, 406), (814, 383.5))
93    pen.qCurveTo((809, 361), (796, 330.5))
94    pen.qCurveTo((783, 300), (760.5, 266.5))
95    pen.qCurveTo((738, 233), (701, 205.5))
96    pen.qCurveTo((664, 178), (612, 160.5))
97    pen.qCurveTo((560, 143), (489, 145))
98    pen.qCurveTo((414, 145), (363, 164))
99    pen.qCurveTo((312, 183), (280, 211.5))
100    pen.qCurveTo((248, 240), (231.5, 274.5))
101    pen.qCurveTo((215, 309), (208, 339.5))
102    pen.qCurveTo((201, 370), (200.5, 392.5))
103    pen.qCurveTo((200, 415), (200, 421))
104    pen.qCurveTo((207, 412), (217.5, 399))
105    pen.qCurveTo((228, 386), (254, 360))
106    pen.closePath()
107
108
109def draw8_(pen):
110    pen.moveTo((771, 367))
111    pen.lineTo((254, 360))
112    pen.qCurveTo((228, 386), (217.5, 399))
113    pen.qCurveTo((207, 412), (200, 421))
114    pen.qCurveTo((200, 415), (200.5, 392.5))
115    pen.qCurveTo((201, 370), (208, 339.5))
116    pen.qCurveTo((215, 309), (231.5, 274.5))
117    pen.qCurveTo((248, 240), (280, 211.5))
118    pen.qCurveTo((312, 183), (363, 164))
119    pen.qCurveTo((414, 145), (489, 145))
120    pen.qCurveTo((560, 143), (612, 160.5))
121    pen.qCurveTo((664, 178), (701, 205.5))
122    pen.qCurveTo((738, 233), (760.5, 266.5))
123    pen.qCurveTo((783, 300), (796, 330.5))
124    pen.qCurveTo((809, 361), (814, 383.5))
125    pen.qCurveTo((819, 406), (819, 412))
126    pen.qCurveTo((811, 402), (802, 394))
127    pen.qCurveTo((793, 386), (771, 367))
128    pen.closePath()
129
130
131class AreaPenTest(unittest.TestCase):
132    def test_PScontour_clockwise_line_first(self):
133        pen = AreaPen(None)
134        draw1_(pen)
135        self.assertEqual(-104561.35, round(pen.value, precision))
136
137    def test_PScontour_counterclockwise_line_last(self):
138        pen = AreaPen(None)
139        draw2_(pen)
140        self.assertEqual(104561.35, round(pen.value, precision))
141
142    def test_PScontour_clockwise_line_last(self):
143        pen = AreaPen(None)
144        draw3_(pen)
145        self.assertEqual(-104561.35, round(pen.value, precision))
146
147    def test_PScontour_counterclockwise_line_first(self):
148        pen = AreaPen(None)
149        draw4_(pen)
150        self.assertEqual(104561.35, round(pen.value, precision))
151
152    def test_TTcontour_clockwise_line_first(self):
153        pen = AreaPen(None)
154        draw5_(pen)
155        self.assertEqual(-104602.791667, round(pen.value, precision))
156
157    def test_TTcontour_counterclockwise_line_last(self):
158        pen = AreaPen(None)
159        draw6_(pen)
160        self.assertEqual(104602.791667, round(pen.value, precision))
161
162    def test_TTcontour_clockwise_line_last(self):
163        pen = AreaPen(None)
164        draw7_(pen)
165        self.assertEqual(-104602.791667, round(pen.value, precision))
166
167    def test_TTcontour_counterclockwise_line_first(self):
168        pen = AreaPen(None)
169        draw8_(pen)
170        self.assertEqual(104602.791667, round(pen.value, precision))
171
172    def test_openPaths(self):
173        pen = AreaPen()
174        pen.moveTo((0, 0))
175        pen.endPath()
176        self.assertEqual(0, pen.value)
177
178        pen.moveTo((0, 0))
179        pen.lineTo((1, 0))
180        with self.assertRaises(NotImplementedError):
181            pen.endPath()
182
183
184if __name__ == "__main__":
185    import sys
186
187    sys.exit(unittest.main())
188