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