summaryrefslogtreecommitdiff
path: root/misc/pylib/robofab/test/test_glifLib.py
diff options
context:
space:
mode:
Diffstat (limited to 'misc/pylib/robofab/test/test_glifLib.py')
-rw-r--r--misc/pylib/robofab/test/test_glifLib.py150
1 files changed, 150 insertions, 0 deletions
diff --git a/misc/pylib/robofab/test/test_glifLib.py b/misc/pylib/robofab/test/test_glifLib.py
new file mode 100644
index 000000000..13eca3a6a
--- /dev/null
+++ b/misc/pylib/robofab/test/test_glifLib.py
@@ -0,0 +1,150 @@
+import os
+import tempfile
+import shutil
+import unittest
+
+from robofab.test.testSupport import getDemoFontGlyphSetPath
+from robofab.glifLib import GlyphSet, glyphNameToFileName, READ_MODE
+from robofab.tools.glyphNameSchemes import glyphNameToShortFileName
+
+
+GLYPHSETDIR = getDemoFontGlyphSetPath()
+
+
+class GlyphSetTests(unittest.TestCase):
+
+ def setUp(self):
+ self.dstDir = tempfile.mktemp()
+ os.mkdir(self.dstDir)
+
+ def tearDown(self):
+ shutil.rmtree(self.dstDir)
+
+ 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 testRebuildContents(self):
+ gset = GlyphSet(GLYPHSETDIR)
+ contents = gset.contents
+ gset.rebuildContents()
+ self.assertEqual(contents, gset.contents)
+
+ 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 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 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():
+ print k, v
+ d[k] = "prefix" + v
+ self.assertEqual(d, dst.contents)
+
+ 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])
+
+
+class FileNameTests(unittest.TestCase):
+
+ def testDefaultFileNameScheme(self):
+ self.assertEqual(glyphNameToFileName("a", None), "a.glif")
+ self.assertEqual(glyphNameToFileName("A", None), "A_.glif")
+ self.assertEqual(glyphNameToFileName("Aring", None), "Aring_.glif")
+ self.assertEqual(glyphNameToFileName("F_A_B", None), "F__A__B_.glif")
+ self.assertEqual(glyphNameToFileName("A.alt", None), "A_.alt.glif")
+ self.assertEqual(glyphNameToFileName("A.Alt", None), "A_.Alt_.glif")
+ self.assertEqual(glyphNameToFileName(".notdef", None), "_notdef.glif")
+ self.assertEqual(glyphNameToFileName("T_H", None), "T__H_.glif")
+ self.assertEqual(glyphNameToFileName("T_h", None), "T__h.glif")
+ self.assertEqual(glyphNameToFileName("t_h", None), "t_h.glif")
+ self.assertEqual(glyphNameToFileName('F_F_I', None), "F__F__I_.glif")
+ self.assertEqual(glyphNameToFileName('f_f_i', None), "f_f_i.glif")
+
+
+ def testShortFileNameScheme(self):
+ print "testShortFileNameScheme"
+ self.assertEqual(glyphNameToShortFileName("a", None), "a.glif")
+ self.assertEqual(glyphNameToShortFileName("A", None), "A_.glif")
+ self.assertEqual(glyphNameToShortFileName("aE", None), "aE_.glif")
+ self.assertEqual(glyphNameToShortFileName("AE", None), "A_E_.glif")
+ self.assertEqual(glyphNameToShortFileName("a.alt", None), "a_alt.glif")
+ self.assertEqual(glyphNameToShortFileName("A.alt", None), "A__alt.glif")
+ self.assertEqual(glyphNameToShortFileName("a.alt#swash", None), "a_alt_swash.glif")
+ self.assertEqual(glyphNameToShortFileName("A.alt", None), "A__alt.glif")
+ self.assertEqual(glyphNameToShortFileName(".notdef", None), "_notdef.glif")
+ self.assertEqual(glyphNameToShortFileName("f_f_i", None), "f_f_i.glif")
+ self.assertEqual(glyphNameToShortFileName("F_F_I", None), "F__F__I_.glif")
+ self.assertEqual(glyphNameToShortFileName("acircumflexdieresis.swash.alt1", None), "acircumflexdieresi0cfc8352.glif")
+ self.assertEqual(glyphNameToShortFileName("acircumflexdieresis.swash.alt2", None), "acircumflexdieresi95f5d2e8.glif")
+ self.assertEqual(glyphNameToShortFileName("Acircumflexdieresis.swash.alt1", None), "A_circumflexdieresed24fb56.glif")
+ self.assertEqual(glyphNameToShortFileName("F#weight0.800_width0.425", None), "F__weight0_800_width0_425.glif")
+ self.assertEqual(glyphNameToShortFileName("F#weight0.83245511_width0.425693567", None), "F__weight0_8324551c9a4143c.glif")
+ self.assertEqual(len(glyphNameToShortFileName("F#weight0.83245511_width0.425693567", None)), 31)
+
+ def testShortFileNameScheme_clashes(self):
+ # test for the condition in code.robofab.com ticket #5
+ name1 = glyphNameToShortFileName('Adieresis', None)
+ name2 = glyphNameToShortFileName('a_dieresis', None)
+ self.assertNotEqual(name1, name2)
+ name1 = glyphNameToShortFileName('AE', None)
+ name2 = glyphNameToShortFileName('aE', None)
+ self.assertNotEqual(name1, name2)
+
+
+if __name__ == "__main__":
+ from robofab.test.testSupport import runTests
+ import sys
+ if len(sys.argv) > 1 and os.path.isdir(sys.argv[-1]):
+ GLYPHSETDIR = sys.argv.pop()
+ runTests()