"""cff2Lib_test.py -- unit test for Adobe CFF fonts.""" from __future__ import print_function, division, absolute_import from __future__ import unicode_literals from fontTools.misc.py23 import * from fontTools.ttLib import TTFont, newTable import re import os import unittest CURR_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__))) DATA_DIR = os.path.join(CURR_DIR, 'data') CFF_TTX = os.path.join(DATA_DIR, "C_F_F__2.ttx") CFF_BIN = os.path.join(DATA_DIR, "C_F_F__2.bin") def strip_VariableItems(string): # ttlib changes with the fontTools version string = re.sub(' ttLibVersion=".*"', '', string) # head table checksum and mod date changes with each save. string = re.sub('<checkSumAdjustment value="[^"]+"/>', '', string) string = re.sub('<modified value="[^"]+"/>', '', string) return string class CFFTableTest(unittest.TestCase): @classmethod def setUpClass(cls): with open(CFF_BIN, 'rb') as f: font = TTFont(file=CFF_BIN) cffTable = font['CFF2'] cls.cff2Data = cffTable.compile(font) with open(CFF_TTX, 'r') as f: cff2XML = f.read() cff2XML = strip_VariableItems(cff2XML) cls.cff2XML = cff2XML.splitlines() def test_toXML(self): font = TTFont(file=CFF_BIN) cffTable = font['CFF2'] cffData = cffTable.compile(font) out = UnicodeIO() font.saveXML(out) cff2XML = out.getvalue() cff2XML = strip_VariableItems(cff2XML) cff2XML = cff2XML.splitlines() self.assertEqual(cff2XML, self.cff2XML) def test_fromXML(self): font = TTFont(sfntVersion='OTTO') font.importXML(CFF_TTX) cffTable = font['CFF2'] cff2Data = cffTable.compile(font) self.assertEqual(cff2Data, self.cff2Data) if __name__ == "__main__": unittest.main()