• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""cffLib_test.py -- unit test for Adobe CFF fonts."""
2
3from fontTools.ttLib import TTFont, newTable
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_.ttx")
14CFF_BIN = os.path.join(DATA_DIR, "C_F_F_.bin")
15
16
17def strip_ttLibVersion(string):
18    return re.sub(' ttLibVersion=".*"', '', string)
19
20
21class CFFTableTest(unittest.TestCase):
22
23    @classmethod
24    def setUpClass(cls):
25        with open(CFF_BIN, 'rb') as f:
26            cls.cffData = f.read()
27        with open(CFF_TTX, 'r') as f:
28            cls.cffXML = strip_ttLibVersion(f.read()).splitlines()
29
30    def test_toXML(self):
31        font = TTFont(sfntVersion='OTTO')
32        cffTable = font['CFF '] = newTable('CFF ')
33        cffTable.decompile(self.cffData, font)
34        out = StringIO()
35        font.saveXML(out)
36        cffXML = strip_ttLibVersion(out.getvalue()).splitlines()
37        self.assertEqual(cffXML, self.cffXML)
38
39    def test_fromXML(self):
40        font = TTFont(sfntVersion='OTTO')
41        font.importXML(CFF_TTX)
42        cffTable = font['CFF ']
43        cffData = cffTable.compile(font)
44        self.assertEqual(cffData, self.cffData)
45
46
47if __name__ == "__main__":
48    import sys
49    sys.exit(unittest.main())
50