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