1from fontTools.ttLib import TTFont 2from fontTools.varLib.interpolatable import main as interpolatable_main 3import os 4import shutil 5import sys 6import tempfile 7import unittest 8 9try: 10 import scipy 11except: 12 scipy = None 13 14try: 15 import munkres 16except ImportError: 17 munkres = None 18 19 20@unittest.skipUnless(scipy or munkres, "scipy or munkres not installed") 21class InterpolatableTest(unittest.TestCase): 22 def __init__(self, methodName): 23 unittest.TestCase.__init__(self, methodName) 24 # Python 3 renamed assertRaisesRegexp to assertRaisesRegex, 25 # and fires deprecation warnings if a program uses the old name. 26 if not hasattr(self, "assertRaisesRegex"): 27 self.assertRaisesRegex = self.assertRaisesRegexp 28 29 def setUp(self): 30 self.tempdir = None 31 self.num_tempfiles = 0 32 33 def tearDown(self): 34 if self.tempdir: 35 shutil.rmtree(self.tempdir) 36 37 @staticmethod 38 def get_test_input(test_file_or_folder): 39 path, _ = os.path.split(__file__) 40 return os.path.join(path, "data", test_file_or_folder) 41 42 @staticmethod 43 def get_file_list(folder, suffix, prefix=''): 44 all_files = os.listdir(folder) 45 file_list = [] 46 for p in all_files: 47 if p.startswith(prefix) and p.endswith(suffix): 48 file_list.append(os.path.abspath(os.path.join(folder, p))) 49 return file_list 50 51 def temp_path(self, suffix): 52 self.temp_dir() 53 self.num_tempfiles += 1 54 return os.path.join(self.tempdir, 55 "tmp%d%s" % (self.num_tempfiles, suffix)) 56 57 def temp_dir(self): 58 if not self.tempdir: 59 self.tempdir = tempfile.mkdtemp() 60 61 def compile_font(self, path, suffix, temp_dir): 62 ttx_filename = os.path.basename(path) 63 savepath = os.path.join(temp_dir, ttx_filename.replace('.ttx', suffix)) 64 font = TTFont(recalcBBoxes=False, recalcTimestamp=False) 65 font.importXML(path) 66 font.save(savepath, reorderTables=None) 67 return font, savepath 68 69# ----- 70# Tests 71# ----- 72 73 def test_interpolatable_ttf(self): 74 suffix = '.ttf' 75 ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf') 76 77 self.temp_dir() 78 ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-') 79 for path in ttx_paths: 80 self.compile_font(path, suffix, self.tempdir) 81 82 ttf_paths = self.get_file_list(self.tempdir, suffix) 83 self.assertIsNone(interpolatable_main(ttf_paths)) 84 85 86 def test_interpolatable_otf(self): 87 suffix = '.otf' 88 ttx_dir = self.get_test_input('master_ttx_interpolatable_otf') 89 90 self.temp_dir() 91 ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-') 92 for path in ttx_paths: 93 self.compile_font(path, suffix, self.tempdir) 94 95 otf_paths = self.get_file_list(self.tempdir, suffix) 96 self.assertIsNone(interpolatable_main(otf_paths)) 97 98 99if __name__ == "__main__": 100 sys.exit(unittest.main()) 101