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