def testReverseContents(self): gset = GlyphSet(GLYPHSETDIR) d = {} for k, v in gset.getReverseContents().items(): d[v] = k org = {} for k, v in gset.contents.items(): org[k] = v.lower() self.assertEqual(d, org)
def testGetUnicodes(self): src = GlyphSet(GLYPHSETDIR) unicodes = src.getUnicodes() for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs if not hasattr(g, "unicodes"): self.assertEqual(unicodes[glyphName], []) else: self.assertEqual(g.unicodes, unicodes[glyphName])
def testGuessSmoothPen(self): glyphSet = GlyphSet(getDemoFontGlyphSetPath()) for name in glyphSet.keys(): digestPen = DigestPointPen() glyphSet[name].drawPoints(digestPen) digest1 = digestPen.getDigest() digestPen = DigestPointPen() pen = GuessSmoothPointPen(digestPen) glyphSet[name].drawPoints(pen) digest2 = digestPen.getDigest() self.assertEqual(digest1, digest2)
def testCustomFileNamingScheme(self): def myGlyphNameToFileName(glyphName, glyphSet): return "prefix" + glyphNameToFileName(glyphName, glyphSet) src = GlyphSet(GLYPHSETDIR, validateRead=True, validateWrite=True) dst = GlyphSet(self.dstDir, myGlyphNameToFileName, validateRead=True, validateWrite=True) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) d = {} for k, v in src.contents.items(): d[k] = "prefix" + v self.assertEqual(d, dst.contents)
def testRoundTrip(self): import difflib srcDir = GLYPHSETDIR dstDir = self.dstDir src = GlyphSet(srcDir, ufoFormatVersion=2) dst = GlyphSet(dstDir, ufoFormatVersion=2) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) # compare raw file data: for glyphName in sorted(src.keys()): fileName = src.contents[glyphName] with open(os.path.join(srcDir, fileName), "r") as f: org = f.read() with open(os.path.join(dstDir, fileName), "r") as f: new = f.read() added = [] removed = [] for line in difflib.unified_diff(org.split("\n"), new.split("\n")): if line.startswith("+ "): added.append(line[1:]) elif line.startswith("- "): removed.append(line[1:]) self.assertEqual( added, removed, "%s.glif file differs after round tripping" % glyphName)
def run_ufolib_import_validation(self): """ ufoLib GlyphSet instantiation validates the contents.plist file :return: (list) list of test failure Result objects """ ss = StdStreamer(self.ufopath) for glyphs_dir in self.ufoobj.glyphsdir_list: res = Result(glyphs_dir[1]) rel_dir_path = os.path.join(self.ufopath, glyphs_dir[1]) try: # read contents.plist with ufoLib as GlyphSet instantiation # the ufoLib library performs type validations on values on read # glyphs_dir_list is a list of lists mapped to glyphs dir name, glyphs dir path GlyphSet(rel_dir_path, ufoFormatVersion=self.ufoversion, validateRead=True) # test for raised exceptions res.test_failed = False ss.stream_result(res) except Exception as e: res.test_failed = True res.exit_failure = True # mandatory file res.test_long_stdstream_string = "contents.plist in " + rel_dir_path + " failed ufoLib import test with error: " + str( e) self.test_fail_list.append(res) ss.stream_result(res) return self.test_fail_list
def testReverseContents2(self): src = GlyphSet(GLYPHSETDIR) dst = GlyphSet(self.dstDir) dstMap = dst.getReverseContents() self.assertEqual(dstMap, {}) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) self.assertNotEqual(dstMap, {}) srcMap = dict(src.getReverseContents()) # copy self.assertEqual(dstMap, srcMap) del srcMap["a.glif"] dst.deleteGlyph("a") self.assertEqual(dstMap, srcMap)
def testReversContourFromGlyphSet(self): glyphSet = GlyphSet(getDemoFontGlyphSetPath()) digestPen = DigestPointPen() glyphSet["testglyph1"].drawPoints(digestPen) digest1 = digestPen.getDigest() digestPen = DigestPointPen() pen = ReverseContourPointPen(digestPen) glyphSet["testglyph1.reversed"].drawPoints(pen) digest2 = digestPen.getDigest() self.assertEqual(digest1, digest2)
def testRoundTrip(self): import difflib srcDir = GLYPHSETDIR dstDir = self.dstDir src = GlyphSet(srcDir, ufoFormatVersion=2, validateRead=True, validateWrite=True) dst = GlyphSet(dstDir, ufoFormatVersion=2, validateRead=True, validateWrite=True) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) # compare raw file data: for glyphName in sorted(src.keys()): fileName = src.contents[glyphName] with open(os.path.join(srcDir, fileName), "r") as f: org = f.read() with open(os.path.join(dstDir, fileName), "r") as f: new = f.read() added = [] removed = [] for line in difflib.unified_diff( org.split("\n"), new.split("\n")): if line.startswith("+ "): added.append(line[1:]) elif line.startswith("- "): removed.append(line[1:]) self.assertEqual( added, removed, "%s.glif file differs after round tripping" % glyphName)
def run_ufolib_import_validation(self): """ ufoLib GlyphSet.readLayerInfo method performs validations of layerinfo.plist file(s) :return: (list) list of test failure Result objects """ ss = StdStreamer(self.ufopath) for glyphs_dir in self.ufoobj.glyphsdir_list: res = Result(glyphs_dir[1]) rel_dir_path = os.path.join(self.ufopath, glyphs_dir[1]) try: gs = GlyphSet(rel_dir_path, ufoFormatVersion=self.ufoversion) gs.readLayerInfo(self.layerinfo_obj) res.test_failed = False ss.stream_result(res) except Exception as e: res.test_failed = True res.test_long_stdstream_string = "layerinfo.plist in " + rel_dir_path + " failed ufoLib import test with error: " + str( e) self.test_fail_list.append(res) ss.stream_result(res) return self.test_fail_list
def run_all_glif_validations(ufoobj): glyphsdir_path_list = ufoobj.get_glyphsdir_path_list() ufoversion = ufoobj.get_ufo_version() ss = StdStreamer(ufoobj.ufopath) test_error_list = [] for glyphsdir in glyphsdir_path_list: # for each directory that containts .glif files print(" ") sys.stdout.write(" - " + glyphsdir + " ") sys.stdout.flush() res = Result(glyphsdir) try: gs = GlyphSet(glyphsdir, ufoFormatVersion=ufoversion, validateRead=True) # create a ufoLib GlyphSet # do not report success for this, previous testing has passed this except Exception as e: res.test_failed = True res.test_long_stdstream_string = " Failed to read glif file paths from " + glyphsdir + ". Error: " + str(e) ss.stream_result(res) test_error_list.append(res) break # break out loop as it was not possible to read the GlyphSet for this directory, gs not instantiated glif_count = 0 # reset glyphs directory .glif file counter for glyphname in gs.contents.keys(): # for each .glif file (read from glyph name in glyph set contents dict) res = Result(gs.contents[glyphname]) try: go = GlifObj() gs.readGlyph(glyphname, glyphObject=go) # read the glif file and perform ufoLib validations, requires the glyphObject for validations res.test_failed = False ss.stream_result(res) glif_count += 1 except Exception as e: res.test_failed = True filename = os.path.join(glyphsdir, glyphNameToFileName(glyphname, None)) res.test_long_stdstream_string = '{} (glyph "{}"): Test failed with error: {}'.format(filename, glyphname, e) ss.stream_result(res) test_error_list.append(res) glif_count += 1 print(" " + str(glif_count) + " .glif tests completed") return test_error_list
def testRoundTrip(self): srcDir = GLYPHSETDIR dstDir = self.dstDir src = GlyphSet(srcDir) dst = GlyphSet(dstDir) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) # compare raw file data: for glyphName in src.keys(): fileName = src.contents[glyphName] org = file(os.path.join(srcDir, fileName), READ_MODE).read() new = file(os.path.join(dstDir, fileName), READ_MODE).read() self.assertEqual( org, new, "%r .glif file differs after round tripping" % glyphName)
def testCustomFileNamingScheme(self): def myGlyphNameToFileName(glyphName, glyphSet): return "prefix" + glyphNameToFileName(glyphName, glyphSet) src = GlyphSet(GLYPHSETDIR) dst = GlyphSet(self.dstDir, myGlyphNameToFileName) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) d = {} for k, v in src.contents.items(): d[k] = "prefix" + v self.assertEqual(d, dst.contents)
def testRoundTrip(self): srcDir = GLYPHSETDIR dstDir = self.dstDir src = GlyphSet(srcDir) dst = GlyphSet(dstDir) for glyphName in src.keys(): g = src[glyphName] g.drawPoints(None) # load attrs dst.writeGlyph(glyphName, g, g.drawPoints) # compare raw file data: for glyphName in src.keys(): fileName = src.contents[glyphName] org = file(os.path.join(srcDir, fileName), READ_MODE).read() new = file(os.path.join(dstDir, fileName), READ_MODE).read() self.assertEqual(org, new, "%r .glif file differs after round tripping" % glyphName)
import os try: from ufoLib.glifLib import GlyphSet except ImportError: from robofab.glifLib import GlyphSet import pkg_resources DATADIR = pkg_resources.resource_filename('cu2qu.test', 'data') CUBIC_GLYPHS = GlyphSet(os.path.join(DATADIR, 'cubic')) QUAD_GLYPHS = GlyphSet(os.path.join(DATADIR, 'quadratic')) import unittest # Python 3 renamed 'assertRaisesRegexp' to 'assertRaisesRegex', and fires # deprecation warnings if a program uses the old name. if not hasattr(unittest.TestCase, 'assertRaisesRegex'): unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
def testShapesFromGlyphSet(self): glyphSet = GlyphSet(getDemoFontGlyphSetPath()) for name in glyphSet.keys(): self._doTest(glyphSet[name].drawPoints, name)
def testRebuildContents(self): gset = GlyphSet(GLYPHSETDIR, validateRead=True, validateWrite=True) contents = gset.contents gset.rebuildContents() self.assertEqual(contents, gset.contents)
def testRebuildContents(self): gset = GlyphSet(GLYPHSETDIR) contents = gset.contents gset.rebuildContents() self.assertEqual(contents, gset.contents)