| from __future__ import print_function, division, absolute_import |
| from fontTools.misc.py23 import * |
| import unittest |
| import os |
| from fontTools import afmLib |
| |
| |
| CWD = os.path.abspath(os.path.dirname(__file__)) |
| DATADIR = os.path.join(CWD, 'data') |
| AFM = os.path.join(DATADIR, 'TestAFM.afm') |
| |
| |
| class AFMTest(unittest.TestCase): |
| |
| def test_read_afm(self): |
| afm = afmLib.AFM(AFM) |
| self.assertEqual(sorted(afm.kernpairs()), |
| sorted([('V', 'A'), ('T', 'comma'), ('V', 'd'), ('T', 'c'), ('T', 'period')])) |
| self.assertEqual(afm['V', 'A'], -60) |
| self.assertEqual(afm['V', 'd'], 30) |
| self.assertEqual(afm['A'], (65, 668, (8, -25, 660, 666))) |
| |
| def test_write_afm(self): |
| afm = afmLib.AFM(AFM) |
| newAfm, afmData = self.write(afm) |
| self.assertEqual(afm.kernpairs(), newAfm.kernpairs()) |
| self.assertEqual(afm.chars(), newAfm.chars()) |
| self.assertEqual(afm.comments(), newAfm.comments()[1:]) # skip the "generated by afmLib" comment |
| for pair in afm.kernpairs(): |
| self.assertEqual(afm[pair], newAfm[pair]) |
| for char in afm.chars(): |
| self.assertEqual(afm[char], newAfm[char]) |
| with open(AFM, 'r') as f: |
| originalLines = f.read().splitlines() |
| newLines = afmData.splitlines() |
| del newLines[1] # remove the "generated by afmLib" comment |
| self.assertEqual(originalLines, newLines) |
| |
| @staticmethod |
| def write(afm, sep='\r'): |
| temp = os.path.join(DATADIR, 'temp.afm') |
| try: |
| afm.write(temp, sep) |
| with open(temp, 'r') as f: |
| afmData = f.read() |
| afm = afmLib.AFM(temp) |
| finally: |
| if os.path.exists(temp): |
| os.remove(temp) |
| return afm, afmData |
| |
| |
| if __name__ == '__main__': |
| import sys |
| sys.exit(unittest.main()) |