1"""cff2Lib_test.py -- unit test for Adobe CFF fonts.""" 2 3from fontTools.ttLib import TTFont 4from io import StringIO 5import re 6import os 7import unittest 8 9 10CURR_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) 11DATA_DIR = os.path.join(CURR_DIR, "data") 12 13CFF_TTX = os.path.join(DATA_DIR, "C_F_F__2.ttx") 14CFF_BIN = os.path.join(DATA_DIR, "C_F_F__2.bin") 15 16 17def strip_VariableItems(string): 18 # ttlib changes with the fontTools version 19 string = re.sub(' ttLibVersion=".*"', "", string) 20 # head table checksum and mod date changes with each save. 21 string = re.sub('<checkSumAdjustment value="[^"]+"/>', "", string) 22 string = re.sub('<modified value="[^"]+"/>', "", string) 23 return string 24 25 26class CFFTableTest(unittest.TestCase): 27 @classmethod 28 def setUpClass(cls): 29 with open(CFF_BIN, "rb") as f: 30 font = TTFont(file=CFF_BIN) 31 cffTable = font["CFF2"] 32 cls.cff2Data = cffTable.compile(font) 33 with open(CFF_TTX, "r") as f: 34 cff2XML = f.read() 35 cff2XML = strip_VariableItems(cff2XML) 36 cls.cff2XML = cff2XML.splitlines() 37 38 def test_toXML(self): 39 font = TTFont(file=CFF_BIN) 40 cffTable = font["CFF2"] 41 cffData = cffTable.compile(font) 42 out = StringIO() 43 font.saveXML(out) 44 cff2XML = out.getvalue() 45 cff2XML = strip_VariableItems(cff2XML) 46 cff2XML = cff2XML.splitlines() 47 self.assertEqual(cff2XML, self.cff2XML) 48 49 def test_fromXML(self): 50 font = TTFont(sfntVersion="OTTO") 51 font.importXML(CFF_TTX) 52 cffTable = font["CFF2"] 53 cff2Data = cffTable.compile(font) 54 self.assertEqual(cff2Data, self.cff2Data) 55 56 57if __name__ == "__main__": 58 unittest.main() 59