class ReadUFOFormatVersion1TestCase(unittest.TestCase): def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False): self.font = NewFont() self.ufoPath = ufoPath1 self.font.readUFO(ufoPath1, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures) self.font.update() def tearDownFont(self): self.font.close() self.font = None def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True): reader = UFOReader(self.ufoPath) results = {} if doInfo: infoMatches = True info = self.font.info for attr, expectedValue in expectedFontInfo1To2Conversion.items(): writtenValue = getattr(info, attr) if expectedValue != writtenValue: infoMatches = False break results["info"]= infoMatches if doKerning: kerning = self.font.kerning.asDict() expectedKerning = reader.readKerning() results["kerning"] = expectedKerning == kerning if doGroups: groups = dict(self.font.groups) expectedGroups = reader.readGroups() results["groups"] = expectedGroups == groups if doFeatures: features = self.font.features.text expectedFeatures = expectedFormatVersion1Features # FontLab likes to add lines to the features, so skip blank lines. features = [line for line in features.splitlines() if line] expectedFeatures = [line for line in expectedFeatures.splitlines() if line] results["features"] = expectedFeatures == features if doLib: lib = dict(self.font.lib) expectedLib = reader.readLib() for key in removeFromFormatVersion1Lib: if key in expectedLib: del expectedLib[key] results["lib"] = expectedLib == lib return results def testFull(self): self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], True) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], True) self.tearDownFont() def testInfo(self): self.setUpFont(doInfo=True) otherResults = self.compareToUFO(doInfo=False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) info = self.font.info for attr, expectedValue in expectedFontInfo1To2Conversion.items(): writtenValue = getattr(info, attr) self.assertEqual((attr, expectedValue), (attr, writtenValue)) self.tearDownFont() def testFeatures(self): self.setUpFont(doFeatures=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testKerning(self): self.setUpFont(doKerning=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testGroups(self): self.setUpFont(doGroups=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testLib(self): self.setUpFont(doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], True) self.tearDownFont()
class ReadUFOFormatVersion1TestCase(unittest.TestCase): def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False): self.font = NewFont() self.ufoPath = ufoPath1 self.font.readUFO(ufoPath1, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures) self.font.update() def tearDownFont(self): self.font.close() self.font = None def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True): reader = UFOReader(self.ufoPath) results = {} if doInfo: infoMatches = True info = self.font.info for attr, expectedValue in expectedFontInfo1To2Conversion.items(): writtenValue = getattr(info, attr) if expectedValue != writtenValue: infoMatches = False break results["info"] = infoMatches if doKerning: kerning = self.font.kerning.asDict() expectedKerning = reader.readKerning() results["kerning"] = expectedKerning == kerning if doGroups: groups = dict(self.font.groups) expectedGroups = reader.readGroups() results["groups"] = expectedGroups == groups if doFeatures: features = self.font.features.text expectedFeatures = expectedFormatVersion1Features # FontLab likes to add lines to the features, so skip blank lines. features = [line for line in features.splitlines() if line] expectedFeatures = [ line for line in expectedFeatures.splitlines() if line ] results["features"] = expectedFeatures == features if doLib: lib = dict(self.font.lib) expectedLib = reader.readLib() for key in removeFromFormatVersion1Lib: if key in expectedLib: del expectedLib[key] results["lib"] = expectedLib == lib return results def testFull(self): self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], True) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], True) self.tearDownFont() def testInfo(self): self.setUpFont(doInfo=True) otherResults = self.compareToUFO(doInfo=False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) info = self.font.info for attr, expectedValue in expectedFontInfo1To2Conversion.items(): writtenValue = getattr(info, attr) self.assertEqual((attr, expectedValue), (attr, writtenValue)) self.tearDownFont() def testFeatures(self): self.setUpFont(doFeatures=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testKerning(self): self.setUpFont(doKerning=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testGroups(self): self.setUpFont(doGroups=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testLib(self): self.setUpFont(doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], True) self.tearDownFont()
class ReadUFOFormatVersion2TestCase(unittest.TestCase): def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False): self.font = NewFont() self.ufoPath = ufoPath2 self.font.readUFO(ufoPath2, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures) self.font.update() def tearDownFont(self): self.font.close() self.font = None def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True): reader = UFOReader(self.ufoPath) results = {} if doInfo: infoMatches = True info = self.font.info for attr, expectedValue in fontInfoVersion2.items(): # cheat by skipping attrs that aren't supported if info._ufoToFLAttrMapping[attr]["nakedAttribute"] is None: continue writtenValue = getattr(info, attr) if expectedValue != writtenValue: infoMatches = False break results["info"]= infoMatches if doKerning: kerning = self.font.kerning.asDict() expectedKerning = reader.readKerning() results["kerning"] = expectedKerning == kerning if doGroups: groups = dict(self.font.groups) expectedGroups = reader.readGroups() results["groups"] = expectedGroups == groups if doFeatures: features = self.font.features.text expectedFeatures = reader.readFeatures() results["features"] = expectedFeatures == features if doLib: lib = dict(self.font.lib) expectedLib = reader.readLib() results["lib"] = expectedLib == lib return results def testFull(self): self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], True) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], True) self.tearDownFont() def testInfo(self): self.setUpFont(doInfo=True) otherResults = self.compareToUFO(doInfo=False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) info = self.font.info for attr, expectedValue in fontInfoVersion2.items(): # cheat by skipping attrs that aren't supported if info._ufoToFLAttrMapping[attr]["nakedAttribute"] is None: continue writtenValue = getattr(info, attr) self.assertEqual((attr, expectedValue), (attr, writtenValue)) self.tearDownFont() def testFeatures(self): self.setUpFont(doFeatures=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testKerning(self): self.setUpFont(doKerning=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testGroups(self): self.setUpFont(doGroups=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testLib(self): self.setUpFont(doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], True) self.tearDownFont()
class ReadUFOFormatVersion2TestCase(unittest.TestCase): def setUpFont(self, doInfo=False, doKerning=False, doGroups=False, doLib=False, doFeatures=False): self.font = NewFont() self.ufoPath = ufoPath2 self.font.readUFO(ufoPath2, doInfo=doInfo, doKerning=doKerning, doGroups=doGroups, doLib=doLib, doFeatures=doFeatures) self.font.update() def tearDownFont(self): self.font.close() self.font = None def compareToUFO(self, doInfo=True, doKerning=True, doGroups=True, doLib=True, doFeatures=True): reader = UFOReader(self.ufoPath) results = {} if doInfo: infoMatches = True info = self.font.info for attr, expectedValue in fontInfoVersion2.items(): # cheat by skipping attrs that aren't supported if info._ufoToFLAttrMapping[attr]["nakedAttribute"] is None: continue writtenValue = getattr(info, attr) if expectedValue != writtenValue: infoMatches = False break results["info"] = infoMatches if doKerning: kerning = self.font.kerning.asDict() expectedKerning = reader.readKerning() results["kerning"] = expectedKerning == kerning if doGroups: groups = dict(self.font.groups) expectedGroups = reader.readGroups() results["groups"] = expectedGroups == groups if doFeatures: features = self.font.features.text expectedFeatures = reader.readFeatures() results["features"] = expectedFeatures == features if doLib: lib = dict(self.font.lib) expectedLib = reader.readLib() results["lib"] = expectedLib == lib return results def testFull(self): self.setUpFont(doInfo=True, doKerning=True, doGroups=True, doFeatures=True, doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], True) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], True) self.tearDownFont() def testInfo(self): self.setUpFont(doInfo=True) otherResults = self.compareToUFO(doInfo=False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) info = self.font.info for attr, expectedValue in fontInfoVersion2.items(): # cheat by skipping attrs that aren't supported if info._ufoToFLAttrMapping[attr]["nakedAttribute"] is None: continue writtenValue = getattr(info, attr) self.assertEqual((attr, expectedValue), (attr, writtenValue)) self.tearDownFont() def testFeatures(self): self.setUpFont(doFeatures=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], True) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testKerning(self): self.setUpFont(doKerning=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], True) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testGroups(self): self.setUpFont(doGroups=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], True) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], False) self.tearDownFont() def testLib(self): self.setUpFont(doLib=True) otherResults = self.compareToUFO() self.assertEqual(otherResults["info"], False) self.assertEqual(otherResults["kerning"], False) self.assertEqual(otherResults["groups"], False) self.assertEqual(otherResults["features"], False) self.assertEqual(otherResults["lib"], True) self.tearDownFont()