2017-11-24 19:59:27 +01:00
|
|
|
import unittest
|
|
|
|
import os
|
|
|
|
from fontTools import afmLib
|
|
|
|
|
|
|
|
|
|
|
|
CWD = os.path.abspath(os.path.dirname(__file__))
|
2022-12-13 11:26:36 +00:00
|
|
|
DATADIR = os.path.join(CWD, "data")
|
|
|
|
AFM = os.path.join(DATADIR, "TestAFM.afm")
|
2017-11-24 19:59:27 +01:00
|
|
|
|
|
|
|
|
|
|
|
class AFMTest(unittest.TestCase):
|
2022-12-13 11:26:36 +00:00
|
|
|
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())
|