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