1*e1fe3e4aSElliott Hughesimport unittest 2*e1fe3e4aSElliott Hughesfrom fontTools.ufoLib.glifLib import ( 3*e1fe3e4aSElliott Hughes GlifLibError, 4*e1fe3e4aSElliott Hughes readGlyphFromString, 5*e1fe3e4aSElliott Hughes writeGlyphToString, 6*e1fe3e4aSElliott Hughes) 7*e1fe3e4aSElliott Hughesfrom .testSupport import Glyph, stripText 8*e1fe3e4aSElliott Hughesfrom itertools import islice 9*e1fe3e4aSElliott Hughes 10*e1fe3e4aSElliott Hughes# ---------- 11*e1fe3e4aSElliott Hughes# Test Cases 12*e1fe3e4aSElliott Hughes# ---------- 13*e1fe3e4aSElliott Hughes 14*e1fe3e4aSElliott Hughes 15*e1fe3e4aSElliott Hughesclass TestGLIF1(unittest.TestCase): 16*e1fe3e4aSElliott Hughes def assertEqual(self, first, second, msg=None): 17*e1fe3e4aSElliott Hughes if isinstance(first, str): 18*e1fe3e4aSElliott Hughes first = stripText(first) 19*e1fe3e4aSElliott Hughes if isinstance(second, str): 20*e1fe3e4aSElliott Hughes second = stripText(second) 21*e1fe3e4aSElliott Hughes return super().assertEqual(first, second, msg=msg) 22*e1fe3e4aSElliott Hughes 23*e1fe3e4aSElliott Hughes def pyToGLIF(self, py): 24*e1fe3e4aSElliott Hughes py = stripText(py) 25*e1fe3e4aSElliott Hughes glyph = Glyph() 26*e1fe3e4aSElliott Hughes exec(py, {"glyph": glyph, "pointPen": glyph}) 27*e1fe3e4aSElliott Hughes glif = writeGlyphToString( 28*e1fe3e4aSElliott Hughes glyph.name, 29*e1fe3e4aSElliott Hughes glyphObject=glyph, 30*e1fe3e4aSElliott Hughes drawPointsFunc=glyph.drawPoints, 31*e1fe3e4aSElliott Hughes formatVersion=1, 32*e1fe3e4aSElliott Hughes validate=True, 33*e1fe3e4aSElliott Hughes ) 34*e1fe3e4aSElliott Hughes # discard the first line containing the xml declaration 35*e1fe3e4aSElliott Hughes return "\n".join(islice(glif.splitlines(), 1, None)) 36*e1fe3e4aSElliott Hughes 37*e1fe3e4aSElliott Hughes def glifToPy(self, glif): 38*e1fe3e4aSElliott Hughes glif = stripText(glif) 39*e1fe3e4aSElliott Hughes glif = '<?xml version="1.0"?>\n' + glif 40*e1fe3e4aSElliott Hughes glyph = Glyph() 41*e1fe3e4aSElliott Hughes readGlyphFromString(glif, glyphObject=glyph, pointPen=glyph, validate=True) 42*e1fe3e4aSElliott Hughes return glyph.py() 43*e1fe3e4aSElliott Hughes 44*e1fe3e4aSElliott Hughes def testTopElement(self): 45*e1fe3e4aSElliott Hughes # not glyph 46*e1fe3e4aSElliott Hughes glif = """ 47*e1fe3e4aSElliott Hughes <notglyph name="a" format="1"> 48*e1fe3e4aSElliott Hughes <outline> 49*e1fe3e4aSElliott Hughes </outline> 50*e1fe3e4aSElliott Hughes </notglyph> 51*e1fe3e4aSElliott Hughes """ 52*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 53*e1fe3e4aSElliott Hughes 54*e1fe3e4aSElliott Hughes def testName_legal(self): 55*e1fe3e4aSElliott Hughes # legal 56*e1fe3e4aSElliott Hughes glif = """ 57*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 58*e1fe3e4aSElliott Hughes <outline> 59*e1fe3e4aSElliott Hughes </outline> 60*e1fe3e4aSElliott Hughes </glyph> 61*e1fe3e4aSElliott Hughes """ 62*e1fe3e4aSElliott Hughes py = """ 63*e1fe3e4aSElliott Hughes glyph.name = "a" 64*e1fe3e4aSElliott Hughes """ 65*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 66*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 67*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 68*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 69*e1fe3e4aSElliott Hughes 70*e1fe3e4aSElliott Hughes def testName_empty(self): 71*e1fe3e4aSElliott Hughes # empty 72*e1fe3e4aSElliott Hughes glif = """ 73*e1fe3e4aSElliott Hughes <glyph name="" format="1"> 74*e1fe3e4aSElliott Hughes <outline> 75*e1fe3e4aSElliott Hughes </outline> 76*e1fe3e4aSElliott Hughes </glyph> 77*e1fe3e4aSElliott Hughes """ 78*e1fe3e4aSElliott Hughes py = """ 79*e1fe3e4aSElliott Hughes glyph.name = "" 80*e1fe3e4aSElliott Hughes """ 81*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 82*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 83*e1fe3e4aSElliott Hughes 84*e1fe3e4aSElliott Hughes def testName_not_a_string(self): 85*e1fe3e4aSElliott Hughes # not a string 86*e1fe3e4aSElliott Hughes py = """ 87*e1fe3e4aSElliott Hughes glyph.name = 1 88*e1fe3e4aSElliott Hughes """ 89*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 90*e1fe3e4aSElliott Hughes 91*e1fe3e4aSElliott Hughes def testFormat_legal(self): 92*e1fe3e4aSElliott Hughes # legal 93*e1fe3e4aSElliott Hughes glif = """ 94*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 95*e1fe3e4aSElliott Hughes <outline> 96*e1fe3e4aSElliott Hughes </outline> 97*e1fe3e4aSElliott Hughes </glyph> 98*e1fe3e4aSElliott Hughes """ 99*e1fe3e4aSElliott Hughes py = """ 100*e1fe3e4aSElliott Hughes glyph.name = "a" 101*e1fe3e4aSElliott Hughes """ 102*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 103*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 104*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 105*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 106*e1fe3e4aSElliott Hughes 107*e1fe3e4aSElliott Hughes def testFormat_wrong_number(self): 108*e1fe3e4aSElliott Hughes # wrong number 109*e1fe3e4aSElliott Hughes glif = """ 110*e1fe3e4aSElliott Hughes <glyph name="a" format="-1"> 111*e1fe3e4aSElliott Hughes <outline> 112*e1fe3e4aSElliott Hughes </outline> 113*e1fe3e4aSElliott Hughes </glyph> 114*e1fe3e4aSElliott Hughes """ 115*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 116*e1fe3e4aSElliott Hughes 117*e1fe3e4aSElliott Hughes def testFormat_not_an_int(self): 118*e1fe3e4aSElliott Hughes # not an int 119*e1fe3e4aSElliott Hughes glif = """ 120*e1fe3e4aSElliott Hughes <glyph name="a" format="A"> 121*e1fe3e4aSElliott Hughes <outline> 122*e1fe3e4aSElliott Hughes </outline> 123*e1fe3e4aSElliott Hughes </glyph> 124*e1fe3e4aSElliott Hughes """ 125*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 126*e1fe3e4aSElliott Hughes 127*e1fe3e4aSElliott Hughes def testBogusGlyphStructure_unknown_element(self): 128*e1fe3e4aSElliott Hughes # unknown element 129*e1fe3e4aSElliott Hughes glif = """ 130*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 131*e1fe3e4aSElliott Hughes <unknown /> 132*e1fe3e4aSElliott Hughes </glyph> 133*e1fe3e4aSElliott Hughes """ 134*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 135*e1fe3e4aSElliott Hughes 136*e1fe3e4aSElliott Hughes def testBogusGlyphStructure_content(self): 137*e1fe3e4aSElliott Hughes # content 138*e1fe3e4aSElliott Hughes glif = """ 139*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 140*e1fe3e4aSElliott Hughes Hello World. 141*e1fe3e4aSElliott Hughes </glyph> 142*e1fe3e4aSElliott Hughes """ 143*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 144*e1fe3e4aSElliott Hughes 145*e1fe3e4aSElliott Hughes def testAdvance_legal_width_and_height(self): 146*e1fe3e4aSElliott Hughes # legal: width and height 147*e1fe3e4aSElliott Hughes glif = """ 148*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 149*e1fe3e4aSElliott Hughes <advance height="200" width="100"/> 150*e1fe3e4aSElliott Hughes <outline> 151*e1fe3e4aSElliott Hughes </outline> 152*e1fe3e4aSElliott Hughes </glyph> 153*e1fe3e4aSElliott Hughes """ 154*e1fe3e4aSElliott Hughes py = """ 155*e1fe3e4aSElliott Hughes glyph.name = "a" 156*e1fe3e4aSElliott Hughes glyph.width = 100 157*e1fe3e4aSElliott Hughes glyph.height = 200 158*e1fe3e4aSElliott Hughes """ 159*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 160*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 161*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 162*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 163*e1fe3e4aSElliott Hughes 164*e1fe3e4aSElliott Hughes def testAdvance_legal_width_and_height_floats(self): 165*e1fe3e4aSElliott Hughes # legal: width and height floats 166*e1fe3e4aSElliott Hughes glif = """ 167*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 168*e1fe3e4aSElliott Hughes <advance height="200.1" width="100.1"/> 169*e1fe3e4aSElliott Hughes <outline> 170*e1fe3e4aSElliott Hughes </outline> 171*e1fe3e4aSElliott Hughes </glyph> 172*e1fe3e4aSElliott Hughes """ 173*e1fe3e4aSElliott Hughes py = """ 174*e1fe3e4aSElliott Hughes glyph.name = "a" 175*e1fe3e4aSElliott Hughes glyph.width = 100.1 176*e1fe3e4aSElliott Hughes glyph.height = 200.1 177*e1fe3e4aSElliott Hughes """ 178*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 179*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 180*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 181*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 182*e1fe3e4aSElliott Hughes 183*e1fe3e4aSElliott Hughes def testAdvance_legal_width(self): 184*e1fe3e4aSElliott Hughes # legal: width 185*e1fe3e4aSElliott Hughes glif = """ 186*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 187*e1fe3e4aSElliott Hughes <advance width="100"/> 188*e1fe3e4aSElliott Hughes <outline> 189*e1fe3e4aSElliott Hughes </outline> 190*e1fe3e4aSElliott Hughes </glyph> 191*e1fe3e4aSElliott Hughes """ 192*e1fe3e4aSElliott Hughes py = """ 193*e1fe3e4aSElliott Hughes glyph.name = "a" 194*e1fe3e4aSElliott Hughes glyph.width = 100 195*e1fe3e4aSElliott Hughes """ 196*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 197*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 198*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 199*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 200*e1fe3e4aSElliott Hughes 201*e1fe3e4aSElliott Hughes def testAdvance_legal_height(self): 202*e1fe3e4aSElliott Hughes # legal: height 203*e1fe3e4aSElliott Hughes glif = """ 204*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 205*e1fe3e4aSElliott Hughes <advance height="200"/> 206*e1fe3e4aSElliott Hughes <outline> 207*e1fe3e4aSElliott Hughes </outline> 208*e1fe3e4aSElliott Hughes </glyph> 209*e1fe3e4aSElliott Hughes """ 210*e1fe3e4aSElliott Hughes py = """ 211*e1fe3e4aSElliott Hughes glyph.name = "a" 212*e1fe3e4aSElliott Hughes glyph.height = 200 213*e1fe3e4aSElliott Hughes """ 214*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 215*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 216*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 217*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 218*e1fe3e4aSElliott Hughes 219*e1fe3e4aSElliott Hughes def testAdvance_illegal_width(self): 220*e1fe3e4aSElliott Hughes # illegal: not a number 221*e1fe3e4aSElliott Hughes glif = """ 222*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 223*e1fe3e4aSElliott Hughes <advance width="a"/> 224*e1fe3e4aSElliott Hughes <outline> 225*e1fe3e4aSElliott Hughes </outline> 226*e1fe3e4aSElliott Hughes </glyph> 227*e1fe3e4aSElliott Hughes """ 228*e1fe3e4aSElliott Hughes py = """ 229*e1fe3e4aSElliott Hughes glyph.name = "a" 230*e1fe3e4aSElliott Hughes glyph.width = "a" 231*e1fe3e4aSElliott Hughes """ 232*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 233*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 234*e1fe3e4aSElliott Hughes 235*e1fe3e4aSElliott Hughes def testAdvance_illegal_height(self): 236*e1fe3e4aSElliott Hughes glif = """ 237*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 238*e1fe3e4aSElliott Hughes <advance height="a"/> 239*e1fe3e4aSElliott Hughes <outline> 240*e1fe3e4aSElliott Hughes </outline> 241*e1fe3e4aSElliott Hughes </glyph> 242*e1fe3e4aSElliott Hughes """ 243*e1fe3e4aSElliott Hughes py = """ 244*e1fe3e4aSElliott Hughes glyph.name = "a" 245*e1fe3e4aSElliott Hughes glyph.height = "a" 246*e1fe3e4aSElliott Hughes """ 247*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 248*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 249*e1fe3e4aSElliott Hughes 250*e1fe3e4aSElliott Hughes def testUnicodes_legal(self): 251*e1fe3e4aSElliott Hughes # legal 252*e1fe3e4aSElliott Hughes glif = """ 253*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 254*e1fe3e4aSElliott Hughes <unicode hex="0061"/> 255*e1fe3e4aSElliott Hughes <outline> 256*e1fe3e4aSElliott Hughes </outline> 257*e1fe3e4aSElliott Hughes </glyph> 258*e1fe3e4aSElliott Hughes """ 259*e1fe3e4aSElliott Hughes py = """ 260*e1fe3e4aSElliott Hughes glyph.name = "a" 261*e1fe3e4aSElliott Hughes glyph.unicodes = [97] 262*e1fe3e4aSElliott Hughes """ 263*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 264*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 265*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 266*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 267*e1fe3e4aSElliott Hughes 268*e1fe3e4aSElliott Hughes def testUnicodes_legal_multiple(self): 269*e1fe3e4aSElliott Hughes glif = """ 270*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 271*e1fe3e4aSElliott Hughes <unicode hex="0062"/> 272*e1fe3e4aSElliott Hughes <unicode hex="0063"/> 273*e1fe3e4aSElliott Hughes <unicode hex="0061"/> 274*e1fe3e4aSElliott Hughes <outline> 275*e1fe3e4aSElliott Hughes </outline> 276*e1fe3e4aSElliott Hughes </glyph> 277*e1fe3e4aSElliott Hughes """ 278*e1fe3e4aSElliott Hughes py = """ 279*e1fe3e4aSElliott Hughes glyph.name = "a" 280*e1fe3e4aSElliott Hughes glyph.unicodes = [98, 99, 97] 281*e1fe3e4aSElliott Hughes """ 282*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 283*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 284*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 285*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 286*e1fe3e4aSElliott Hughes 287*e1fe3e4aSElliott Hughes def testUnicodes_illegal(self): 288*e1fe3e4aSElliott Hughes # illegal 289*e1fe3e4aSElliott Hughes glif = """ 290*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 291*e1fe3e4aSElliott Hughes <unicode hex="1.1"/> 292*e1fe3e4aSElliott Hughes <outline> 293*e1fe3e4aSElliott Hughes </outline> 294*e1fe3e4aSElliott Hughes </glyph> 295*e1fe3e4aSElliott Hughes """ 296*e1fe3e4aSElliott Hughes py = """ 297*e1fe3e4aSElliott Hughes glyph.name = "zzzzzz" 298*e1fe3e4aSElliott Hughes glyph.unicodes = ["1.1"] 299*e1fe3e4aSElliott Hughes """ 300*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 301*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 302*e1fe3e4aSElliott Hughes 303*e1fe3e4aSElliott Hughes def testNote(self): 304*e1fe3e4aSElliott Hughes glif = """ 305*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 306*e1fe3e4aSElliott Hughes <note> 307*e1fe3e4aSElliott Hughes \U0001F4A9 308*e1fe3e4aSElliott Hughes </note> 309*e1fe3e4aSElliott Hughes <outline> 310*e1fe3e4aSElliott Hughes </outline> 311*e1fe3e4aSElliott Hughes </glyph> 312*e1fe3e4aSElliott Hughes """ 313*e1fe3e4aSElliott Hughes py = """ 314*e1fe3e4aSElliott Hughes glyph.name = "a" 315*e1fe3e4aSElliott Hughes glyph.note = "" 316*e1fe3e4aSElliott Hughes """ 317*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 318*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 319*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 320*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 321*e1fe3e4aSElliott Hughes 322*e1fe3e4aSElliott Hughes def testLib_legal(self): 323*e1fe3e4aSElliott Hughes glif = """ 324*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 325*e1fe3e4aSElliott Hughes <outline> 326*e1fe3e4aSElliott Hughes </outline> 327*e1fe3e4aSElliott Hughes <lib> 328*e1fe3e4aSElliott Hughes <dict> 329*e1fe3e4aSElliott Hughes <key>dict</key> 330*e1fe3e4aSElliott Hughes <dict> 331*e1fe3e4aSElliott Hughes <key>hello</key> 332*e1fe3e4aSElliott Hughes <string>world</string> 333*e1fe3e4aSElliott Hughes </dict> 334*e1fe3e4aSElliott Hughes <key>float</key> 335*e1fe3e4aSElliott Hughes <real>2.5</real> 336*e1fe3e4aSElliott Hughes <key>int</key> 337*e1fe3e4aSElliott Hughes <integer>1</integer> 338*e1fe3e4aSElliott Hughes <key>list</key> 339*e1fe3e4aSElliott Hughes <array> 340*e1fe3e4aSElliott Hughes <string>a</string> 341*e1fe3e4aSElliott Hughes <string>b</string> 342*e1fe3e4aSElliott Hughes <integer>1</integer> 343*e1fe3e4aSElliott Hughes <real>2.5</real> 344*e1fe3e4aSElliott Hughes </array> 345*e1fe3e4aSElliott Hughes <key>string</key> 346*e1fe3e4aSElliott Hughes <string>a</string> 347*e1fe3e4aSElliott Hughes </dict> 348*e1fe3e4aSElliott Hughes </lib> 349*e1fe3e4aSElliott Hughes </glyph> 350*e1fe3e4aSElliott Hughes """ 351*e1fe3e4aSElliott Hughes py = """ 352*e1fe3e4aSElliott Hughes glyph.name = "a" 353*e1fe3e4aSElliott Hughes glyph.lib = {"dict" : {"hello" : "world"}, "float" : 2.5, "int" : 1, "list" : ["a", "b", 1, 2.5], "string" : "a"} 354*e1fe3e4aSElliott Hughes """ 355*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 356*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 357*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 358*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 359*e1fe3e4aSElliott Hughes 360*e1fe3e4aSElliott Hughes def testOutline_unknown_element(self): 361*e1fe3e4aSElliott Hughes # unknown element 362*e1fe3e4aSElliott Hughes glif = """ 363*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 364*e1fe3e4aSElliott Hughes <outline> 365*e1fe3e4aSElliott Hughes <unknown/> 366*e1fe3e4aSElliott Hughes </outline> 367*e1fe3e4aSElliott Hughes </glyph> 368*e1fe3e4aSElliott Hughes """ 369*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 370*e1fe3e4aSElliott Hughes 371*e1fe3e4aSElliott Hughes def testOutline_content(self): 372*e1fe3e4aSElliott Hughes # content 373*e1fe3e4aSElliott Hughes glif = """ 374*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 375*e1fe3e4aSElliott Hughes <outline> 376*e1fe3e4aSElliott Hughes hello 377*e1fe3e4aSElliott Hughes </outline> 378*e1fe3e4aSElliott Hughes </glyph> 379*e1fe3e4aSElliott Hughes """ 380*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 381*e1fe3e4aSElliott Hughes 382*e1fe3e4aSElliott Hughes def testComponent_legal(self): 383*e1fe3e4aSElliott Hughes # legal 384*e1fe3e4aSElliott Hughes glif = """ 385*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 386*e1fe3e4aSElliott Hughes <outline> 387*e1fe3e4aSElliott Hughes <component base="x" xScale="2" xyScale="3" yxScale="6" yScale="5" xOffset="1" yOffset="4"/> 388*e1fe3e4aSElliott Hughes </outline> 389*e1fe3e4aSElliott Hughes </glyph> 390*e1fe3e4aSElliott Hughes """ 391*e1fe3e4aSElliott Hughes py = """ 392*e1fe3e4aSElliott Hughes glyph.name = "a" 393*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", (2, 3, 6, 5, 1, 4)]) 394*e1fe3e4aSElliott Hughes """ 395*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 396*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 397*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 398*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 399*e1fe3e4aSElliott Hughes 400*e1fe3e4aSElliott Hughes def testComponent_illegal_no_base(self): 401*e1fe3e4aSElliott Hughes # no base 402*e1fe3e4aSElliott Hughes glif = """ 403*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 404*e1fe3e4aSElliott Hughes <outline> 405*e1fe3e4aSElliott Hughes <component xScale="2" xyScale="3" yxScale="6" yScale="5" xOffset="1" yOffset="4"/> 406*e1fe3e4aSElliott Hughes </outline> 407*e1fe3e4aSElliott Hughes </glyph> 408*e1fe3e4aSElliott Hughes """ 409*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 410*e1fe3e4aSElliott Hughes 411*e1fe3e4aSElliott Hughes def testComponent_bogus_transformation(self): 412*e1fe3e4aSElliott Hughes # bogus values in transformation 413*e1fe3e4aSElliott Hughes glif = """ 414*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 415*e1fe3e4aSElliott Hughes <outline> 416*e1fe3e4aSElliott Hughes <component base="x" xScale="a" xyScale="3" yxScale="6" yScale="5" xOffset="1" yOffset="4"/> 417*e1fe3e4aSElliott Hughes </outline> 418*e1fe3e4aSElliott Hughes </glyph> 419*e1fe3e4aSElliott Hughes """ 420*e1fe3e4aSElliott Hughes py = """ 421*e1fe3e4aSElliott Hughes glyph.name = "a" 422*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", ("a", 3, 6, 5, 1, 4)]) 423*e1fe3e4aSElliott Hughes """ 424*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 425*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 426*e1fe3e4aSElliott Hughes glif = """ 427*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 428*e1fe3e4aSElliott Hughes <outline> 429*e1fe3e4aSElliott Hughes <component base="x" xScale="a" xyScale="3" yxScale="6" yScale="5" xOffset="1" yOffset="4"/> 430*e1fe3e4aSElliott Hughes </outline> 431*e1fe3e4aSElliott Hughes </glyph> 432*e1fe3e4aSElliott Hughes """ 433*e1fe3e4aSElliott Hughes py = """ 434*e1fe3e4aSElliott Hughes glyph.name = "a" 435*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", (2, "a", 6, 5, 1, 4)]) 436*e1fe3e4aSElliott Hughes """ 437*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 438*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 439*e1fe3e4aSElliott Hughes glif = """ 440*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 441*e1fe3e4aSElliott Hughes <outline> 442*e1fe3e4aSElliott Hughes <component base="x" xScale="2" xyScale="3" yxScale="a" yScale="5" xOffset="1" yOffset="4"/> 443*e1fe3e4aSElliott Hughes </outline> 444*e1fe3e4aSElliott Hughes </glyph> 445*e1fe3e4aSElliott Hughes """ 446*e1fe3e4aSElliott Hughes py = """ 447*e1fe3e4aSElliott Hughes glyph.name = "a" 448*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", (2, 3, "a", 5, 1, 4)]) 449*e1fe3e4aSElliott Hughes """ 450*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 451*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 452*e1fe3e4aSElliott Hughes glif = """ 453*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 454*e1fe3e4aSElliott Hughes <outline> 455*e1fe3e4aSElliott Hughes <component base="x" xScale="2" xyScale="3" yxScale="6" yScale="a" xOffset="1" yOffset="4"/> 456*e1fe3e4aSElliott Hughes </outline> 457*e1fe3e4aSElliott Hughes </glyph> 458*e1fe3e4aSElliott Hughes """ 459*e1fe3e4aSElliott Hughes py = """ 460*e1fe3e4aSElliott Hughes glyph.name = "a" 461*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", (2, 3, 6, "a", 1, 4)]) 462*e1fe3e4aSElliott Hughes """ 463*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 464*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 465*e1fe3e4aSElliott Hughes glif = """ 466*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 467*e1fe3e4aSElliott Hughes <outline> 468*e1fe3e4aSElliott Hughes <component base="x" xScale="2" xyScale="3" yxScale="6" yScale="5" xOffset="a" yOffset="4"/> 469*e1fe3e4aSElliott Hughes </outline> 470*e1fe3e4aSElliott Hughes </glyph> 471*e1fe3e4aSElliott Hughes """ 472*e1fe3e4aSElliott Hughes py = """ 473*e1fe3e4aSElliott Hughes glyph.name = "a" 474*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", (2, 3, 6, 5, "a", 4)]) 475*e1fe3e4aSElliott Hughes """ 476*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 477*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 478*e1fe3e4aSElliott Hughes glif = """ 479*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 480*e1fe3e4aSElliott Hughes <outline> 481*e1fe3e4aSElliott Hughes <component base="x" xScale="2" xyScale="3" yxScale="6" yScale="5" xOffset="1" yOffset="a"/> 482*e1fe3e4aSElliott Hughes </outline> 483*e1fe3e4aSElliott Hughes </glyph> 484*e1fe3e4aSElliott Hughes """ 485*e1fe3e4aSElliott Hughes py = """ 486*e1fe3e4aSElliott Hughes glyph.name = "a" 487*e1fe3e4aSElliott Hughes pointPen.addComponent(*["x", (2, 3, 6, 5, 1, "a")]) 488*e1fe3e4aSElliott Hughes """ 489*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 490*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 491*e1fe3e4aSElliott Hughes 492*e1fe3e4aSElliott Hughes def testContour_legal_one_contour(self): 493*e1fe3e4aSElliott Hughes # legal: one contour 494*e1fe3e4aSElliott Hughes glif = """ 495*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 496*e1fe3e4aSElliott Hughes <outline> 497*e1fe3e4aSElliott Hughes <contour> 498*e1fe3e4aSElliott Hughes </contour> 499*e1fe3e4aSElliott Hughes </outline> 500*e1fe3e4aSElliott Hughes </glyph> 501*e1fe3e4aSElliott Hughes """ 502*e1fe3e4aSElliott Hughes py = """ 503*e1fe3e4aSElliott Hughes glyph.name = "a" 504*e1fe3e4aSElliott Hughes pointPen.beginPath() 505*e1fe3e4aSElliott Hughes pointPen.endPath() 506*e1fe3e4aSElliott Hughes """ 507*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 508*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 509*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 510*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 511*e1fe3e4aSElliott Hughes 512*e1fe3e4aSElliott Hughes def testContour_legal_two_contours(self): 513*e1fe3e4aSElliott Hughes # legal: two contours 514*e1fe3e4aSElliott Hughes glif = """ 515*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 516*e1fe3e4aSElliott Hughes <outline> 517*e1fe3e4aSElliott Hughes <contour> 518*e1fe3e4aSElliott Hughes <point x="1" y="2" type="move"/> 519*e1fe3e4aSElliott Hughes <point x="10" y="20" type="line"/> 520*e1fe3e4aSElliott Hughes </contour> 521*e1fe3e4aSElliott Hughes <contour> 522*e1fe3e4aSElliott Hughes <point x="1" y="2" type="move"/> 523*e1fe3e4aSElliott Hughes <point x="10" y="20" type="line"/> 524*e1fe3e4aSElliott Hughes </contour> 525*e1fe3e4aSElliott Hughes </outline> 526*e1fe3e4aSElliott Hughes </glyph> 527*e1fe3e4aSElliott Hughes """ 528*e1fe3e4aSElliott Hughes py = """ 529*e1fe3e4aSElliott Hughes glyph.name = "a" 530*e1fe3e4aSElliott Hughes pointPen.beginPath() 531*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "move", "smooth" : False}) 532*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(10, 20)], **{"segmentType" : "line", "smooth" : False}) 533*e1fe3e4aSElliott Hughes pointPen.endPath() 534*e1fe3e4aSElliott Hughes pointPen.beginPath() 535*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "move", "smooth" : False}) 536*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(10, 20)], **{"segmentType" : "line", "smooth" : False}) 537*e1fe3e4aSElliott Hughes pointPen.endPath() 538*e1fe3e4aSElliott Hughes """ 539*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 540*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 541*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 542*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 543*e1fe3e4aSElliott Hughes 544*e1fe3e4aSElliott Hughes def testContour_illegal_unkonwn_element(self): 545*e1fe3e4aSElliott Hughes # unknown element 546*e1fe3e4aSElliott Hughes glif = """ 547*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 548*e1fe3e4aSElliott Hughes <outline> 549*e1fe3e4aSElliott Hughes <contour> 550*e1fe3e4aSElliott Hughes <unknown/> 551*e1fe3e4aSElliott Hughes </contour> 552*e1fe3e4aSElliott Hughes </outline> 553*e1fe3e4aSElliott Hughes </glyph> 554*e1fe3e4aSElliott Hughes """ 555*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 556*e1fe3e4aSElliott Hughes 557*e1fe3e4aSElliott Hughes def testPointCoordinates_legal_int(self): 558*e1fe3e4aSElliott Hughes # legal: int 559*e1fe3e4aSElliott Hughes glif = """ 560*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 561*e1fe3e4aSElliott Hughes <outline> 562*e1fe3e4aSElliott Hughes <contour> 563*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="move"/> 564*e1fe3e4aSElliott Hughes <point x="0" y="0" type="line" name="this is here so that the contour isn't seen as an anchor"/> 565*e1fe3e4aSElliott Hughes </contour> 566*e1fe3e4aSElliott Hughes </outline> 567*e1fe3e4aSElliott Hughes </glyph> 568*e1fe3e4aSElliott Hughes """ 569*e1fe3e4aSElliott Hughes py = """ 570*e1fe3e4aSElliott Hughes glyph.name = "a" 571*e1fe3e4aSElliott Hughes pointPen.beginPath() 572*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "move", "smooth" : False}) 573*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"name" : "this is here so that the contour isn't seen as an anchor", "segmentType" : "line", "smooth" : False}) 574*e1fe3e4aSElliott Hughes pointPen.endPath() 575*e1fe3e4aSElliott Hughes """ 576*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 577*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 578*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 579*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 580*e1fe3e4aSElliott Hughes 581*e1fe3e4aSElliott Hughes def testPointCoordinates_legal_float(self): 582*e1fe3e4aSElliott Hughes # legal: float 583*e1fe3e4aSElliott Hughes glif = """ 584*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 585*e1fe3e4aSElliott Hughes <outline> 586*e1fe3e4aSElliott Hughes <contour> 587*e1fe3e4aSElliott Hughes <point x="1.1" y="-2.2" type="move"/> 588*e1fe3e4aSElliott Hughes <point x="0" y="0" type="line" name="this is here so that the contour isn't seen as an anchor"/> 589*e1fe3e4aSElliott Hughes </contour> 590*e1fe3e4aSElliott Hughes </outline> 591*e1fe3e4aSElliott Hughes </glyph> 592*e1fe3e4aSElliott Hughes """ 593*e1fe3e4aSElliott Hughes py = """ 594*e1fe3e4aSElliott Hughes glyph.name = "a" 595*e1fe3e4aSElliott Hughes pointPen.beginPath() 596*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1.1, -2.2)], **{"segmentType" : "move", "smooth" : False}) 597*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"name" : "this is here so that the contour isn't seen as an anchor", "segmentType" : "line", "smooth" : False}) 598*e1fe3e4aSElliott Hughes pointPen.endPath() 599*e1fe3e4aSElliott Hughes """ 600*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 601*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 602*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 603*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 604*e1fe3e4aSElliott Hughes 605*e1fe3e4aSElliott Hughes def testPointCoordinates_illegal_x(self): 606*e1fe3e4aSElliott Hughes # illegal: string 607*e1fe3e4aSElliott Hughes glif = """ 608*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 609*e1fe3e4aSElliott Hughes <outline> 610*e1fe3e4aSElliott Hughes <contour> 611*e1fe3e4aSElliott Hughes <point x="a" y="2" type="move"/> 612*e1fe3e4aSElliott Hughes <point x="0" y="0" type="line" name="this is here so that the contour isn't seen as an anchor"/> 613*e1fe3e4aSElliott Hughes </contour> 614*e1fe3e4aSElliott Hughes </outline> 615*e1fe3e4aSElliott Hughes </glyph> 616*e1fe3e4aSElliott Hughes """ 617*e1fe3e4aSElliott Hughes py = """ 618*e1fe3e4aSElliott Hughes glyph.name = "a" 619*e1fe3e4aSElliott Hughes pointPen.beginPath() 620*e1fe3e4aSElliott Hughes pointPen.addPoint(*[("a", 2)], **{"segmentType" : "move", "smooth" : False}) 621*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"name" : "this is here so that the contour isn't seen as an anchor", "segmentType" : "line", "smooth" : False}) 622*e1fe3e4aSElliott Hughes pointPen.endPath() 623*e1fe3e4aSElliott Hughes """ 624*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 625*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 626*e1fe3e4aSElliott Hughes 627*e1fe3e4aSElliott Hughes def testPointCoordinates_illegal_y(self): 628*e1fe3e4aSElliott Hughes # legal: int 629*e1fe3e4aSElliott Hughes glif = """ 630*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 631*e1fe3e4aSElliott Hughes <outline> 632*e1fe3e4aSElliott Hughes <contour> 633*e1fe3e4aSElliott Hughes <point x="1" y="a" type="move"/> 634*e1fe3e4aSElliott Hughes <point x="0" y="0" type="line" name="this is here so that the contour isn't seen as an anchor"/> 635*e1fe3e4aSElliott Hughes </contour> 636*e1fe3e4aSElliott Hughes </outline> 637*e1fe3e4aSElliott Hughes </glyph> 638*e1fe3e4aSElliott Hughes """ 639*e1fe3e4aSElliott Hughes py = """ 640*e1fe3e4aSElliott Hughes glyph.name = "a" 641*e1fe3e4aSElliott Hughes pointPen.beginPath() 642*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, "a")], **{"segmentType" : "move", "smooth" : False}) 643*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"name" : "this is here so that the contour isn't seen as an anchor", "segmentType" : "line", "smooth" : False}) 644*e1fe3e4aSElliott Hughes pointPen.endPath() 645*e1fe3e4aSElliott Hughes """ 646*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 647*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 648*e1fe3e4aSElliott Hughes 649*e1fe3e4aSElliott Hughes def testPointTypeMove_legal(self): 650*e1fe3e4aSElliott Hughes # legal 651*e1fe3e4aSElliott Hughes glif = """ 652*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 653*e1fe3e4aSElliott Hughes <outline> 654*e1fe3e4aSElliott Hughes <contour> 655*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="move"/> 656*e1fe3e4aSElliott Hughes <point x="3" y="-4" type="line"/> 657*e1fe3e4aSElliott Hughes </contour> 658*e1fe3e4aSElliott Hughes </outline> 659*e1fe3e4aSElliott Hughes </glyph> 660*e1fe3e4aSElliott Hughes """ 661*e1fe3e4aSElliott Hughes py = """ 662*e1fe3e4aSElliott Hughes glyph.name = "a" 663*e1fe3e4aSElliott Hughes pointPen.beginPath() 664*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "move", "smooth" : False}) 665*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(3, -4)], **{"segmentType" : "line", "smooth" : False}) 666*e1fe3e4aSElliott Hughes pointPen.endPath() 667*e1fe3e4aSElliott Hughes """ 668*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 669*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 670*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 671*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 672*e1fe3e4aSElliott Hughes 673*e1fe3e4aSElliott Hughes def testPointTypeMove_legal_smooth(self): 674*e1fe3e4aSElliott Hughes # legal: smooth=True 675*e1fe3e4aSElliott Hughes glif = """ 676*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 677*e1fe3e4aSElliott Hughes <outline> 678*e1fe3e4aSElliott Hughes <contour> 679*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="move" smooth="yes"/> 680*e1fe3e4aSElliott Hughes <point x="3" y="-4" type="line"/> 681*e1fe3e4aSElliott Hughes </contour> 682*e1fe3e4aSElliott Hughes </outline> 683*e1fe3e4aSElliott Hughes </glyph> 684*e1fe3e4aSElliott Hughes """ 685*e1fe3e4aSElliott Hughes py = """ 686*e1fe3e4aSElliott Hughes glyph.name = "a" 687*e1fe3e4aSElliott Hughes pointPen.beginPath() 688*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "move", "smooth" : True}) 689*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(3, -4)], **{"segmentType" : "line", "smooth" : False}) 690*e1fe3e4aSElliott Hughes pointPen.endPath() 691*e1fe3e4aSElliott Hughes """ 692*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 693*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 694*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 695*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 696*e1fe3e4aSElliott Hughes 697*e1fe3e4aSElliott Hughes def testPointTypeMove_illegal_not_at_start(self): 698*e1fe3e4aSElliott Hughes # illegal: not at start 699*e1fe3e4aSElliott Hughes glif = """ 700*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 701*e1fe3e4aSElliott Hughes <outline> 702*e1fe3e4aSElliott Hughes <contour> 703*e1fe3e4aSElliott Hughes <point x="3" y="-4" type="line"/> 704*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="move"/> 705*e1fe3e4aSElliott Hughes </contour> 706*e1fe3e4aSElliott Hughes </outline> 707*e1fe3e4aSElliott Hughes </glyph> 708*e1fe3e4aSElliott Hughes """ 709*e1fe3e4aSElliott Hughes py = """ 710*e1fe3e4aSElliott Hughes glyph.name = "a" 711*e1fe3e4aSElliott Hughes pointPen.beginPath() 712*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(3, -4)], **{"segmentType" : "line", "smooth" : False}) 713*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "move", "smooth" : False}) 714*e1fe3e4aSElliott Hughes pointPen.endPath() 715*e1fe3e4aSElliott Hughes """ 716*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 717*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 718*e1fe3e4aSElliott Hughes 719*e1fe3e4aSElliott Hughes def testPointTypeLine_legal(self): 720*e1fe3e4aSElliott Hughes # legal 721*e1fe3e4aSElliott Hughes glif = """ 722*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 723*e1fe3e4aSElliott Hughes <outline> 724*e1fe3e4aSElliott Hughes <contour> 725*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="move"/> 726*e1fe3e4aSElliott Hughes <point x="3" y="-4" type="line"/> 727*e1fe3e4aSElliott Hughes </contour> 728*e1fe3e4aSElliott Hughes </outline> 729*e1fe3e4aSElliott Hughes </glyph> 730*e1fe3e4aSElliott Hughes """ 731*e1fe3e4aSElliott Hughes py = """ 732*e1fe3e4aSElliott Hughes glyph.name = "a" 733*e1fe3e4aSElliott Hughes pointPen.beginPath() 734*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "move", "smooth" : False}) 735*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(3, -4)], **{"segmentType" : "line", "smooth" : False}) 736*e1fe3e4aSElliott Hughes pointPen.endPath() 737*e1fe3e4aSElliott Hughes """ 738*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 739*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 740*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 741*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 742*e1fe3e4aSElliott Hughes 743*e1fe3e4aSElliott Hughes def testPointTypeLine_legal_start_of_contour(self): 744*e1fe3e4aSElliott Hughes # legal: start of contour 745*e1fe3e4aSElliott Hughes glif = """ 746*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 747*e1fe3e4aSElliott Hughes <outline> 748*e1fe3e4aSElliott Hughes <contour> 749*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="line"/> 750*e1fe3e4aSElliott Hughes <point x="3" y="-4" type="line"/> 751*e1fe3e4aSElliott Hughes </contour> 752*e1fe3e4aSElliott Hughes </outline> 753*e1fe3e4aSElliott Hughes </glyph> 754*e1fe3e4aSElliott Hughes """ 755*e1fe3e4aSElliott Hughes py = """ 756*e1fe3e4aSElliott Hughes glyph.name = "a" 757*e1fe3e4aSElliott Hughes pointPen.beginPath() 758*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "line", "smooth" : False}) 759*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(3, -4)], **{"segmentType" : "line", "smooth" : False}) 760*e1fe3e4aSElliott Hughes pointPen.endPath() 761*e1fe3e4aSElliott Hughes """ 762*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 763*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 764*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 765*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 766*e1fe3e4aSElliott Hughes 767*e1fe3e4aSElliott Hughes def testPointTypeLine_legal_smooth(self): 768*e1fe3e4aSElliott Hughes # legal: smooth=True 769*e1fe3e4aSElliott Hughes glif = """ 770*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 771*e1fe3e4aSElliott Hughes <outline> 772*e1fe3e4aSElliott Hughes <contour> 773*e1fe3e4aSElliott Hughes <point x="1" y="-2" type="move"/> 774*e1fe3e4aSElliott Hughes <point x="3" y="-4" type="line" smooth="yes"/> 775*e1fe3e4aSElliott Hughes </contour> 776*e1fe3e4aSElliott Hughes </outline> 777*e1fe3e4aSElliott Hughes </glyph> 778*e1fe3e4aSElliott Hughes """ 779*e1fe3e4aSElliott Hughes py = """ 780*e1fe3e4aSElliott Hughes glyph.name = "a" 781*e1fe3e4aSElliott Hughes pointPen.beginPath() 782*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, -2)], **{"segmentType" : "move", "smooth" : False}) 783*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(3, -4)], **{"segmentType" : "line", "smooth" : True}) 784*e1fe3e4aSElliott Hughes pointPen.endPath() 785*e1fe3e4aSElliott Hughes """ 786*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 787*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 788*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 789*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 790*e1fe3e4aSElliott Hughes 791*e1fe3e4aSElliott Hughes def testPointTypeCurve_legal(self): 792*e1fe3e4aSElliott Hughes # legal 793*e1fe3e4aSElliott Hughes glif = """ 794*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 795*e1fe3e4aSElliott Hughes <outline> 796*e1fe3e4aSElliott Hughes <contour> 797*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 798*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 799*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 800*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 801*e1fe3e4aSElliott Hughes </contour> 802*e1fe3e4aSElliott Hughes </outline> 803*e1fe3e4aSElliott Hughes </glyph> 804*e1fe3e4aSElliott Hughes """ 805*e1fe3e4aSElliott Hughes py = """ 806*e1fe3e4aSElliott Hughes glyph.name = "a" 807*e1fe3e4aSElliott Hughes pointPen.beginPath() 808*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 809*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 810*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 811*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 812*e1fe3e4aSElliott Hughes pointPen.endPath() 813*e1fe3e4aSElliott Hughes """ 814*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 815*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 816*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 817*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 818*e1fe3e4aSElliott Hughes 819*e1fe3e4aSElliott Hughes def testPointTypeCurve_legal_start_of_contour(self): 820*e1fe3e4aSElliott Hughes # legal: start of contour 821*e1fe3e4aSElliott Hughes glif = """ 822*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 823*e1fe3e4aSElliott Hughes <outline> 824*e1fe3e4aSElliott Hughes <contour> 825*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 826*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 827*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 828*e1fe3e4aSElliott Hughes </contour> 829*e1fe3e4aSElliott Hughes </outline> 830*e1fe3e4aSElliott Hughes </glyph> 831*e1fe3e4aSElliott Hughes """ 832*e1fe3e4aSElliott Hughes py = """ 833*e1fe3e4aSElliott Hughes glyph.name = "a" 834*e1fe3e4aSElliott Hughes pointPen.beginPath() 835*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 836*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 837*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 838*e1fe3e4aSElliott Hughes pointPen.endPath() 839*e1fe3e4aSElliott Hughes """ 840*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 841*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 842*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 843*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 844*e1fe3e4aSElliott Hughes 845*e1fe3e4aSElliott Hughes def testPointTypeCurve_legal_smooth(self): 846*e1fe3e4aSElliott Hughes # legal: smooth=True 847*e1fe3e4aSElliott Hughes glif = """ 848*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 849*e1fe3e4aSElliott Hughes <outline> 850*e1fe3e4aSElliott Hughes <contour> 851*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 852*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 853*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 854*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve" smooth="yes"/> 855*e1fe3e4aSElliott Hughes </contour> 856*e1fe3e4aSElliott Hughes </outline> 857*e1fe3e4aSElliott Hughes </glyph> 858*e1fe3e4aSElliott Hughes """ 859*e1fe3e4aSElliott Hughes py = """ 860*e1fe3e4aSElliott Hughes glyph.name = "a" 861*e1fe3e4aSElliott Hughes pointPen.beginPath() 862*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 863*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 864*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 865*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : True}) 866*e1fe3e4aSElliott Hughes pointPen.endPath() 867*e1fe3e4aSElliott Hughes """ 868*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 869*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 870*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 871*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 872*e1fe3e4aSElliott Hughes 873*e1fe3e4aSElliott Hughes def testPointTypeCurve_legal_no_off_curves(self): 874*e1fe3e4aSElliott Hughes # legal: no off-curves 875*e1fe3e4aSElliott Hughes glif = """ 876*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 877*e1fe3e4aSElliott Hughes <outline> 878*e1fe3e4aSElliott Hughes <contour> 879*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 880*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 881*e1fe3e4aSElliott Hughes </contour> 882*e1fe3e4aSElliott Hughes </outline> 883*e1fe3e4aSElliott Hughes </glyph> 884*e1fe3e4aSElliott Hughes """ 885*e1fe3e4aSElliott Hughes py = """ 886*e1fe3e4aSElliott Hughes glyph.name = "a" 887*e1fe3e4aSElliott Hughes pointPen.beginPath() 888*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 889*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 890*e1fe3e4aSElliott Hughes pointPen.endPath() 891*e1fe3e4aSElliott Hughes """ 892*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 893*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 894*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 895*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 896*e1fe3e4aSElliott Hughes 897*e1fe3e4aSElliott Hughes def testPointTypeCurve_legal_1_off_curve(self): 898*e1fe3e4aSElliott Hughes # legal: 1 off-curve 899*e1fe3e4aSElliott Hughes glif = """ 900*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 901*e1fe3e4aSElliott Hughes <outline> 902*e1fe3e4aSElliott Hughes <contour> 903*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 904*e1fe3e4aSElliott Hughes <point x="50" y="100"/> 905*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 906*e1fe3e4aSElliott Hughes </contour> 907*e1fe3e4aSElliott Hughes </outline> 908*e1fe3e4aSElliott Hughes </glyph> 909*e1fe3e4aSElliott Hughes """ 910*e1fe3e4aSElliott Hughes py = """ 911*e1fe3e4aSElliott Hughes glyph.name = "a" 912*e1fe3e4aSElliott Hughes pointPen.beginPath() 913*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 914*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(50, 100)], **{"smooth" : False}) 915*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 916*e1fe3e4aSElliott Hughes pointPen.endPath() 917*e1fe3e4aSElliott Hughes """ 918*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 919*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 920*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 921*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 922*e1fe3e4aSElliott Hughes 923*e1fe3e4aSElliott Hughes def testPointTypeCurve_illegal_3_off_curves(self): 924*e1fe3e4aSElliott Hughes # illegal: 3 off-curves 925*e1fe3e4aSElliott Hughes glif = """ 926*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 927*e1fe3e4aSElliott Hughes <outline> 928*e1fe3e4aSElliott Hughes <contour> 929*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 930*e1fe3e4aSElliott Hughes <point x="0" y="100"/> 931*e1fe3e4aSElliott Hughes <point x="35" y="125"/> 932*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 933*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 934*e1fe3e4aSElliott Hughes </contour> 935*e1fe3e4aSElliott Hughes </outline> 936*e1fe3e4aSElliott Hughes </glyph> 937*e1fe3e4aSElliott Hughes """ 938*e1fe3e4aSElliott Hughes py = """ 939*e1fe3e4aSElliott Hughes glyph.name = "a" 940*e1fe3e4aSElliott Hughes pointPen.beginPath() 941*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 942*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 100)], **{"smooth" : False}) 943*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(35, 125)], **{"smooth" : False}) 944*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 945*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 946*e1fe3e4aSElliott Hughes pointPen.endPath() 947*e1fe3e4aSElliott Hughes """ 948*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 949*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 950*e1fe3e4aSElliott Hughes 951*e1fe3e4aSElliott Hughes def testPointQCurve_legal(self): 952*e1fe3e4aSElliott Hughes # legal 953*e1fe3e4aSElliott Hughes glif = """ 954*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 955*e1fe3e4aSElliott Hughes <outline> 956*e1fe3e4aSElliott Hughes <contour> 957*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 958*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 959*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 960*e1fe3e4aSElliott Hughes <point x="100" y="200" type="qcurve"/> 961*e1fe3e4aSElliott Hughes </contour> 962*e1fe3e4aSElliott Hughes </outline> 963*e1fe3e4aSElliott Hughes </glyph> 964*e1fe3e4aSElliott Hughes """ 965*e1fe3e4aSElliott Hughes py = """ 966*e1fe3e4aSElliott Hughes glyph.name = "a" 967*e1fe3e4aSElliott Hughes pointPen.beginPath() 968*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 969*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 970*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 971*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "qcurve", "smooth" : False}) 972*e1fe3e4aSElliott Hughes pointPen.endPath() 973*e1fe3e4aSElliott Hughes """ 974*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 975*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 976*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 977*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 978*e1fe3e4aSElliott Hughes 979*e1fe3e4aSElliott Hughes def testPointQCurve_legal_start_of_contour(self): 980*e1fe3e4aSElliott Hughes # legal: start of contour 981*e1fe3e4aSElliott Hughes glif = """ 982*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 983*e1fe3e4aSElliott Hughes <outline> 984*e1fe3e4aSElliott Hughes <contour> 985*e1fe3e4aSElliott Hughes <point x="100" y="200" type="qcurve"/> 986*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 987*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 988*e1fe3e4aSElliott Hughes </contour> 989*e1fe3e4aSElliott Hughes </outline> 990*e1fe3e4aSElliott Hughes </glyph> 991*e1fe3e4aSElliott Hughes """ 992*e1fe3e4aSElliott Hughes py = """ 993*e1fe3e4aSElliott Hughes glyph.name = "a" 994*e1fe3e4aSElliott Hughes pointPen.beginPath() 995*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "qcurve", "smooth" : False}) 996*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 997*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 998*e1fe3e4aSElliott Hughes pointPen.endPath() 999*e1fe3e4aSElliott Hughes """ 1000*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1001*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1002*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1003*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1004*e1fe3e4aSElliott Hughes 1005*e1fe3e4aSElliott Hughes def testPointQCurve_legal_smooth(self): 1006*e1fe3e4aSElliott Hughes # legal: smooth=True 1007*e1fe3e4aSElliott Hughes glif = """ 1008*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1009*e1fe3e4aSElliott Hughes <outline> 1010*e1fe3e4aSElliott Hughes <contour> 1011*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 1012*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 1013*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 1014*e1fe3e4aSElliott Hughes <point x="100" y="200" type="qcurve" smooth="yes"/> 1015*e1fe3e4aSElliott Hughes </contour> 1016*e1fe3e4aSElliott Hughes </outline> 1017*e1fe3e4aSElliott Hughes </glyph> 1018*e1fe3e4aSElliott Hughes """ 1019*e1fe3e4aSElliott Hughes py = """ 1020*e1fe3e4aSElliott Hughes glyph.name = "a" 1021*e1fe3e4aSElliott Hughes pointPen.beginPath() 1022*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 1023*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 1024*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 1025*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "qcurve", "smooth" : True}) 1026*e1fe3e4aSElliott Hughes pointPen.endPath() 1027*e1fe3e4aSElliott Hughes """ 1028*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1029*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1030*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1031*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1032*e1fe3e4aSElliott Hughes 1033*e1fe3e4aSElliott Hughes def testPointQCurve_legal_no_off_curves(self): 1034*e1fe3e4aSElliott Hughes # legal: no off-curves 1035*e1fe3e4aSElliott Hughes glif = """ 1036*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1037*e1fe3e4aSElliott Hughes <outline> 1038*e1fe3e4aSElliott Hughes <contour> 1039*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 1040*e1fe3e4aSElliott Hughes <point x="100" y="200" type="qcurve"/> 1041*e1fe3e4aSElliott Hughes </contour> 1042*e1fe3e4aSElliott Hughes </outline> 1043*e1fe3e4aSElliott Hughes </glyph> 1044*e1fe3e4aSElliott Hughes """ 1045*e1fe3e4aSElliott Hughes py = """ 1046*e1fe3e4aSElliott Hughes glyph.name = "a" 1047*e1fe3e4aSElliott Hughes pointPen.beginPath() 1048*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 1049*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "qcurve", "smooth" : False}) 1050*e1fe3e4aSElliott Hughes pointPen.endPath() 1051*e1fe3e4aSElliott Hughes """ 1052*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1053*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1054*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1055*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1056*e1fe3e4aSElliott Hughes 1057*e1fe3e4aSElliott Hughes def testPointQCurve_legal_one_off_curve(self): 1058*e1fe3e4aSElliott Hughes # legal: 1 off-curve 1059*e1fe3e4aSElliott Hughes glif = """ 1060*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1061*e1fe3e4aSElliott Hughes <outline> 1062*e1fe3e4aSElliott Hughes <contour> 1063*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 1064*e1fe3e4aSElliott Hughes <point x="50" y="100"/> 1065*e1fe3e4aSElliott Hughes <point x="100" y="200" type="qcurve"/> 1066*e1fe3e4aSElliott Hughes </contour> 1067*e1fe3e4aSElliott Hughes </outline> 1068*e1fe3e4aSElliott Hughes </glyph> 1069*e1fe3e4aSElliott Hughes """ 1070*e1fe3e4aSElliott Hughes py = """ 1071*e1fe3e4aSElliott Hughes glyph.name = "a" 1072*e1fe3e4aSElliott Hughes pointPen.beginPath() 1073*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 1074*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(50, 100)], **{"smooth" : False}) 1075*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "qcurve", "smooth" : False}) 1076*e1fe3e4aSElliott Hughes pointPen.endPath() 1077*e1fe3e4aSElliott Hughes """ 1078*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1079*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1080*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1081*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1082*e1fe3e4aSElliott Hughes 1083*e1fe3e4aSElliott Hughes def testPointQCurve_legal_3_off_curves(self): 1084*e1fe3e4aSElliott Hughes # legal: 3 off-curves 1085*e1fe3e4aSElliott Hughes glif = """ 1086*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1087*e1fe3e4aSElliott Hughes <outline> 1088*e1fe3e4aSElliott Hughes <contour> 1089*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 1090*e1fe3e4aSElliott Hughes <point x="0" y="100"/> 1091*e1fe3e4aSElliott Hughes <point x="35" y="125"/> 1092*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 1093*e1fe3e4aSElliott Hughes <point x="100" y="200" type="qcurve"/> 1094*e1fe3e4aSElliott Hughes </contour> 1095*e1fe3e4aSElliott Hughes </outline> 1096*e1fe3e4aSElliott Hughes </glyph> 1097*e1fe3e4aSElliott Hughes """ 1098*e1fe3e4aSElliott Hughes py = """ 1099*e1fe3e4aSElliott Hughes glyph.name = "a" 1100*e1fe3e4aSElliott Hughes pointPen.beginPath() 1101*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 1102*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 100)], **{"smooth" : False}) 1103*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(35, 125)], **{"smooth" : False}) 1104*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 1105*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "qcurve", "smooth" : False}) 1106*e1fe3e4aSElliott Hughes pointPen.endPath() 1107*e1fe3e4aSElliott Hughes """ 1108*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1109*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1110*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1111*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1112*e1fe3e4aSElliott Hughes 1113*e1fe3e4aSElliott Hughes def testSpecialCaseQCurve(self): 1114*e1fe3e4aSElliott Hughes # contour with no on curve 1115*e1fe3e4aSElliott Hughes glif = """ 1116*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1117*e1fe3e4aSElliott Hughes <outline> 1118*e1fe3e4aSElliott Hughes <contour> 1119*e1fe3e4aSElliott Hughes <point x="0" y="0"/> 1120*e1fe3e4aSElliott Hughes <point x="0" y="100"/> 1121*e1fe3e4aSElliott Hughes <point x="100" y="100"/> 1122*e1fe3e4aSElliott Hughes <point x="100" y="0"/> 1123*e1fe3e4aSElliott Hughes </contour> 1124*e1fe3e4aSElliott Hughes </outline> 1125*e1fe3e4aSElliott Hughes </glyph> 1126*e1fe3e4aSElliott Hughes """ 1127*e1fe3e4aSElliott Hughes py = """ 1128*e1fe3e4aSElliott Hughes glyph.name = "a" 1129*e1fe3e4aSElliott Hughes pointPen.beginPath() 1130*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"smooth" : False}) 1131*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 100)], **{"smooth" : False}) 1132*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 100)], **{"smooth" : False}) 1133*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 0)], **{"smooth" : False}) 1134*e1fe3e4aSElliott Hughes pointPen.endPath() 1135*e1fe3e4aSElliott Hughes """ 1136*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1137*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1138*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1139*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1140*e1fe3e4aSElliott Hughes 1141*e1fe3e4aSElliott Hughes def testPointTypeOffCurve_legal(self): 1142*e1fe3e4aSElliott Hughes # legal 1143*e1fe3e4aSElliott Hughes glif = """ 1144*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1145*e1fe3e4aSElliott Hughes <outline> 1146*e1fe3e4aSElliott Hughes <contour> 1147*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 1148*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 1149*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 1150*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 1151*e1fe3e4aSElliott Hughes </contour> 1152*e1fe3e4aSElliott Hughes </outline> 1153*e1fe3e4aSElliott Hughes </glyph> 1154*e1fe3e4aSElliott Hughes """ 1155*e1fe3e4aSElliott Hughes py = """ 1156*e1fe3e4aSElliott Hughes glyph.name = "a" 1157*e1fe3e4aSElliott Hughes pointPen.beginPath() 1158*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 1159*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 1160*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 1161*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 1162*e1fe3e4aSElliott Hughes pointPen.endPath() 1163*e1fe3e4aSElliott Hughes """ 1164*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1165*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1166*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1167*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1168*e1fe3e4aSElliott Hughes 1169*e1fe3e4aSElliott Hughes def testPointTypeOffCurve_legal_start_of_contour(self): 1170*e1fe3e4aSElliott Hughes # legal: start of contour 1171*e1fe3e4aSElliott Hughes glif = """ 1172*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1173*e1fe3e4aSElliott Hughes <outline> 1174*e1fe3e4aSElliott Hughes <contour> 1175*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 1176*e1fe3e4aSElliott Hughes <point x="65" y="200"/> 1177*e1fe3e4aSElliott Hughes <point x="100" y="200" type="curve"/> 1178*e1fe3e4aSElliott Hughes </contour> 1179*e1fe3e4aSElliott Hughes </outline> 1180*e1fe3e4aSElliott Hughes </glyph> 1181*e1fe3e4aSElliott Hughes """ 1182*e1fe3e4aSElliott Hughes py = """ 1183*e1fe3e4aSElliott Hughes glyph.name = "a" 1184*e1fe3e4aSElliott Hughes pointPen.beginPath() 1185*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 1186*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(65, 200)], **{"smooth" : False}) 1187*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(100, 200)], **{"segmentType" : "curve", "smooth" : False}) 1188*e1fe3e4aSElliott Hughes pointPen.endPath() 1189*e1fe3e4aSElliott Hughes """ 1190*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1191*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1192*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1193*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1194*e1fe3e4aSElliott Hughes 1195*e1fe3e4aSElliott Hughes def testPointTypeOffCurve_illegal_before_move(self): 1196*e1fe3e4aSElliott Hughes # before move 1197*e1fe3e4aSElliott Hughes glif = """ 1198*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1199*e1fe3e4aSElliott Hughes <outline> 1200*e1fe3e4aSElliott Hughes <contour> 1201*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 1202*e1fe3e4aSElliott Hughes <point x="0" y="0" type="move"/> 1203*e1fe3e4aSElliott Hughes </contour> 1204*e1fe3e4aSElliott Hughes </outline> 1205*e1fe3e4aSElliott Hughes </glyph> 1206*e1fe3e4aSElliott Hughes """ 1207*e1fe3e4aSElliott Hughes py = """ 1208*e1fe3e4aSElliott Hughes glyph.name = "a" 1209*e1fe3e4aSElliott Hughes pointPen.beginPath() 1210*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 1211*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "move", "smooth" : False}) 1212*e1fe3e4aSElliott Hughes pointPen.endPath() 1213*e1fe3e4aSElliott Hughes """ 1214*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 1215*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 1216*e1fe3e4aSElliott Hughes 1217*e1fe3e4aSElliott Hughes def testPointTypeOffCurve_illegal_before_line(self): 1218*e1fe3e4aSElliott Hughes # before line 1219*e1fe3e4aSElliott Hughes glif = """ 1220*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1221*e1fe3e4aSElliott Hughes <outline> 1222*e1fe3e4aSElliott Hughes <contour> 1223*e1fe3e4aSElliott Hughes <point x="0" y="65"/> 1224*e1fe3e4aSElliott Hughes <point x="0" y="0" type="line"/> 1225*e1fe3e4aSElliott Hughes </contour> 1226*e1fe3e4aSElliott Hughes </outline> 1227*e1fe3e4aSElliott Hughes </glyph> 1228*e1fe3e4aSElliott Hughes """ 1229*e1fe3e4aSElliott Hughes py = """ 1230*e1fe3e4aSElliott Hughes glyph.name = "a" 1231*e1fe3e4aSElliott Hughes pointPen.beginPath() 1232*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : False}) 1233*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "line", "smooth" : False}) 1234*e1fe3e4aSElliott Hughes pointPen.endPath() 1235*e1fe3e4aSElliott Hughes """ 1236*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 1237*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 1238*e1fe3e4aSElliott Hughes 1239*e1fe3e4aSElliott Hughes def testPointTypeOffCurve_illegal_smooth(self): 1240*e1fe3e4aSElliott Hughes # smooth=True 1241*e1fe3e4aSElliott Hughes glif = """ 1242*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1243*e1fe3e4aSElliott Hughes <outline> 1244*e1fe3e4aSElliott Hughes <contour> 1245*e1fe3e4aSElliott Hughes <point x="0" y="65" smooth="yes"/> 1246*e1fe3e4aSElliott Hughes <point x="0" y="0" type="curve"/> 1247*e1fe3e4aSElliott Hughes </contour> 1248*e1fe3e4aSElliott Hughes </outline> 1249*e1fe3e4aSElliott Hughes </glyph> 1250*e1fe3e4aSElliott Hughes """ 1251*e1fe3e4aSElliott Hughes py = """ 1252*e1fe3e4aSElliott Hughes glyph.name = "a" 1253*e1fe3e4aSElliott Hughes pointPen.beginPath() 1254*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 65)], **{"smooth" : True}) 1255*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(0, 0)], **{"segmentType" : "curve", "smooth" : False}) 1256*e1fe3e4aSElliott Hughes pointPen.endPath() 1257*e1fe3e4aSElliott Hughes """ 1258*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 1259*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.glifToPy, glif) 1260*e1fe3e4aSElliott Hughes 1261*e1fe3e4aSElliott Hughes def testSinglePoint_legal_without_name(self): 1262*e1fe3e4aSElliott Hughes # legal 1263*e1fe3e4aSElliott Hughes # glif format 1 single point without a name was not an anchor 1264*e1fe3e4aSElliott Hughes glif = """ 1265*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1266*e1fe3e4aSElliott Hughes <outline> 1267*e1fe3e4aSElliott Hughes <contour> 1268*e1fe3e4aSElliott Hughes <point x="1" y="2" type="move"/> 1269*e1fe3e4aSElliott Hughes </contour> 1270*e1fe3e4aSElliott Hughes </outline> 1271*e1fe3e4aSElliott Hughes </glyph> 1272*e1fe3e4aSElliott Hughes """ 1273*e1fe3e4aSElliott Hughes py = """ 1274*e1fe3e4aSElliott Hughes glyph.name = "a" 1275*e1fe3e4aSElliott Hughes pointPen.beginPath() 1276*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "move", "smooth" : False}) 1277*e1fe3e4aSElliott Hughes pointPen.endPath() 1278*e1fe3e4aSElliott Hughes """ 1279*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1280*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1281*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1282*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1283*e1fe3e4aSElliott Hughes 1284*e1fe3e4aSElliott Hughes def testAnchor_legal_with_name(self): 1285*e1fe3e4aSElliott Hughes glif = """ 1286*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1287*e1fe3e4aSElliott Hughes <outline> 1288*e1fe3e4aSElliott Hughes <contour> 1289*e1fe3e4aSElliott Hughes <point x="1" y="2" type="move" name="test"/> 1290*e1fe3e4aSElliott Hughes </contour> 1291*e1fe3e4aSElliott Hughes </outline> 1292*e1fe3e4aSElliott Hughes </glyph> 1293*e1fe3e4aSElliott Hughes """ 1294*e1fe3e4aSElliott Hughes py = """ 1295*e1fe3e4aSElliott Hughes glyph.name = "a" 1296*e1fe3e4aSElliott Hughes glyph.anchors = [{"name" : "test", "x" : 1, "y" : 2}] 1297*e1fe3e4aSElliott Hughes """ 1298*e1fe3e4aSElliott Hughes resultGlif = self.pyToGLIF(py) 1299*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1300*e1fe3e4aSElliott Hughes self.assertEqual(glif, resultGlif) 1301*e1fe3e4aSElliott Hughes self.assertEqual(py, resultPy) 1302*e1fe3e4aSElliott Hughes 1303*e1fe3e4aSElliott Hughes def testOpenContourLooseOffCurves_legal(self): 1304*e1fe3e4aSElliott Hughes # a piece of software was writing this kind of structure 1305*e1fe3e4aSElliott Hughes glif = """ 1306*e1fe3e4aSElliott Hughes <glyph name="a" format="1"> 1307*e1fe3e4aSElliott Hughes <outline> 1308*e1fe3e4aSElliott Hughes <contour> 1309*e1fe3e4aSElliott Hughes <point x="1" y="2" type="move"/> 1310*e1fe3e4aSElliott Hughes <point x="1" y="2"/> 1311*e1fe3e4aSElliott Hughes <point x="1" y="2"/> 1312*e1fe3e4aSElliott Hughes <point x="1" y="2" type="curve"/> 1313*e1fe3e4aSElliott Hughes <point x="1" y="2"/> 1314*e1fe3e4aSElliott Hughes </contour> 1315*e1fe3e4aSElliott Hughes </outline> 1316*e1fe3e4aSElliott Hughes </glyph> 1317*e1fe3e4aSElliott Hughes """ 1318*e1fe3e4aSElliott Hughes expectedPy = """ 1319*e1fe3e4aSElliott Hughes glyph.name = "a" 1320*e1fe3e4aSElliott Hughes pointPen.beginPath() 1321*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "move", "smooth" : False}) 1322*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"smooth" : False}) 1323*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"smooth" : False}) 1324*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "curve", "smooth" : False}) 1325*e1fe3e4aSElliott Hughes pointPen.endPath() 1326*e1fe3e4aSElliott Hughes """ 1327*e1fe3e4aSElliott Hughes resultPy = self.glifToPy(glif) 1328*e1fe3e4aSElliott Hughes self.assertEqual(resultPy, expectedPy) 1329*e1fe3e4aSElliott Hughes 1330*e1fe3e4aSElliott Hughes def testOpenContourLooseOffCurves_illegal(self): 1331*e1fe3e4aSElliott Hughes py = """ 1332*e1fe3e4aSElliott Hughes glyph.name = "a" 1333*e1fe3e4aSElliott Hughes pointPen.beginPath() 1334*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "move", "smooth" : False}) 1335*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"smooth" : False}) 1336*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"smooth" : False}) 1337*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"segmentType" : "curve", "smooth" : False}) 1338*e1fe3e4aSElliott Hughes pointPen.addPoint(*[(1, 2)], **{"smooth" : False}) 1339*e1fe3e4aSElliott Hughes pointPen.endPath() 1340*e1fe3e4aSElliott Hughes """ 1341*e1fe3e4aSElliott Hughes self.assertRaises(GlifLibError, self.pyToGLIF, py) 1342