• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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