Home | History | Annotate | Download | only in t1Lib
      1 from __future__ import print_function, division, absolute_import
      2 from fontTools.misc.py23 import *
      3 import unittest
      4 import os
      5 import sys
      6 from fontTools import t1Lib
      7 from fontTools.pens.basePen import NullPen
      8 import random
      9 
     10 
     11 CWD = os.path.abspath(os.path.dirname(__file__))
     12 DATADIR = os.path.join(CWD, 'data')
     13 # I used `tx` to convert PFA to LWFN (stored in the data fork)
     14 LWFN = os.path.join(DATADIR, 'TestT1-Regular.lwfn')
     15 PFA = os.path.join(DATADIR, 'TestT1-Regular.pfa')
     16 PFB = os.path.join(DATADIR, 'TestT1-Regular.pfb')
     17 
     18 
     19 class FindEncryptedChunksTest(unittest.TestCase):
     20 
     21 	def test_findEncryptedChunks(self):
     22 		with open(PFA, "rb") as f:
     23 			data = f.read()
     24 		chunks = t1Lib.findEncryptedChunks(data)
     25 		self.assertEqual(len(chunks), 3)
     26 		self.assertFalse(chunks[0][0])
     27 		# the second chunk is encrypted
     28 		self.assertTrue(chunks[1][0])
     29 		self.assertFalse(chunks[2][0])
     30 
     31 
     32 class DecryptType1Test(unittest.TestCase):
     33 
     34 	def test_decryptType1(self):
     35 		with open(PFA, "rb") as f:
     36 			data = f.read()
     37 		decrypted = t1Lib.decryptType1(data)
     38 		self.assertNotEqual(decrypted, data)
     39 
     40 
     41 class ReadWriteTest(unittest.TestCase):
     42 
     43 	def test_read_pfa_write_pfb(self):
     44 		font = t1Lib.T1Font(PFA)
     45 		data = self.write(font, 'PFB')
     46 		self.assertEqual(font.getData(), data)
     47 
     48 	def test_read_pfb_write_pfa(self):
     49 		font = t1Lib.T1Font(PFB)
     50 		# 'OTHER' == 'PFA'
     51 		data = self.write(font, 'OTHER', dohex=True)
     52 		self.assertEqual(font.getData(), data)
     53 
     54 	@unittest.skipIf(sys.version_info[:2] < (3, 6), "pathlib is only tested on 3.6 and up")
     55 	def test_read_with_path(self):
     56 		import pathlib
     57 		font = t1Lib.T1Font(pathlib.Path(PFB))
     58 
     59 	@staticmethod
     60 	def write(font, outtype, dohex=False):
     61 		temp = os.path.join(DATADIR, 'temp.' + outtype.lower())
     62 		try:
     63 			font.saveAs(temp, outtype, dohex=dohex)
     64 			newfont = t1Lib.T1Font(temp)
     65 			data = newfont.getData()
     66 		finally:
     67 			if os.path.exists(temp):
     68 				os.remove(temp)
     69 		return data
     70 
     71 
     72 class T1FontTest(unittest.TestCase):
     73 
     74 	def test_parse_lwfn(self):
     75 		# the extended attrs are lost on git so we can't auto-detect 'LWFN'
     76 		font = t1Lib.T1Font(LWFN, kind="LWFN")
     77 		font.parse()
     78 		self.assertEqual(font['FontName'], 'TestT1-Regular')
     79 		self.assertTrue('Subrs' in font['Private'])
     80 
     81 	def test_parse_pfa(self):
     82 		font = t1Lib.T1Font(PFA)
     83 		font.parse()
     84 		self.assertEqual(font['FontName'], 'TestT1-Regular')
     85 		self.assertTrue('Subrs' in font['Private'])
     86 
     87 	def test_parse_pfb(self):
     88 		font = t1Lib.T1Font(PFB)
     89 		font.parse()
     90 		self.assertEqual(font['FontName'], 'TestT1-Regular')
     91 		self.assertTrue('Subrs' in font['Private'])
     92 
     93 	def test_getGlyphSet(self):
     94 		font = t1Lib.T1Font(PFA)
     95 		glyphs = font.getGlyphSet()
     96 		i = random.randrange(len(glyphs))
     97 		aglyph = list(glyphs.values())[i]
     98 		self.assertTrue(hasattr(aglyph, 'draw'))
     99 		self.assertFalse(hasattr(aglyph, 'width'))
    100 		aglyph.draw(NullPen())
    101 		self.assertTrue(hasattr(aglyph, 'width'))
    102 
    103 
    104 if __name__ == '__main__':
    105 	import sys
    106 	sys.exit(unittest.main())
    107