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