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