diff options
Diffstat (limited to 'Tests/varLib/interpolatable_test.py')
-rw-r--r-- | Tests/varLib/interpolatable_test.py | 192 |
1 files changed, 176 insertions, 16 deletions
diff --git a/Tests/varLib/interpolatable_test.py b/Tests/varLib/interpolatable_test.py index a30be71e..10b9cc30 100644 --- a/Tests/varLib/interpolatable_test.py +++ b/Tests/varLib/interpolatable_test.py @@ -5,6 +5,7 @@ import shutil import sys import tempfile import unittest +import pytest try: import scipy @@ -35,12 +36,12 @@ class InterpolatableTest(unittest.TestCase): shutil.rmtree(self.tempdir) @staticmethod - def get_test_input(test_file_or_folder): + def get_test_input(*test_file_or_folder): path, _ = os.path.split(__file__) - return os.path.join(path, "data", test_file_or_folder) + return os.path.join(path, "data", *test_file_or_folder) @staticmethod - def get_file_list(folder, suffix, prefix=''): + def get_file_list(folder, suffix, prefix=""): all_files = os.listdir(folder) file_list = [] for p in all_files: @@ -51,8 +52,7 @@ class InterpolatableTest(unittest.TestCase): def temp_path(self, suffix): self.temp_dir() self.num_tempfiles += 1 - return os.path.join(self.tempdir, - "tmp%d%s" % (self.num_tempfiles, suffix)) + return os.path.join(self.tempdir, "tmp%d%s" % (self.num_tempfiles, suffix)) def temp_dir(self): if not self.tempdir: @@ -60,41 +60,201 @@ class InterpolatableTest(unittest.TestCase): def compile_font(self, path, suffix, temp_dir): ttx_filename = os.path.basename(path) - savepath = os.path.join(temp_dir, ttx_filename.replace('.ttx', suffix)) + savepath = os.path.join(temp_dir, ttx_filename.replace(".ttx", suffix)) font = TTFont(recalcBBoxes=False, recalcTimestamp=False) font.importXML(path) font.save(savepath, reorderTables=None) return font, savepath -# ----- -# Tests -# ----- + # ----- + # Tests + # ----- def test_interpolatable_ttf(self): - suffix = '.ttf' - ttx_dir = self.get_test_input('master_ttx_interpolatable_ttf') + suffix = ".ttf" + ttx_dir = self.get_test_input("master_ttx_interpolatable_ttf") self.temp_dir() - ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-') + ttx_paths = self.get_file_list(ttx_dir, ".ttx", "TestFamily2-") for path in ttx_paths: self.compile_font(path, suffix, self.tempdir) ttf_paths = self.get_file_list(self.tempdir, suffix) self.assertIsNone(interpolatable_main(ttf_paths)) - def test_interpolatable_otf(self): - suffix = '.otf' - ttx_dir = self.get_test_input('master_ttx_interpolatable_otf') + suffix = ".otf" + ttx_dir = self.get_test_input("master_ttx_interpolatable_otf") self.temp_dir() - ttx_paths = self.get_file_list(ttx_dir, '.ttx', 'TestFamily2-') + ttx_paths = self.get_file_list(ttx_dir, ".ttx", "TestFamily2-") for path in ttx_paths: self.compile_font(path, suffix, self.tempdir) otf_paths = self.get_file_list(self.tempdir, suffix) self.assertIsNone(interpolatable_main(otf_paths)) + def test_interpolatable_ufo(self): + ttx_dir = self.get_test_input("master_ufo") + ufo_paths = self.get_file_list(ttx_dir, ".ufo", "TestFamily2-") + self.assertIsNone(interpolatable_main(ufo_paths)) + + def test_designspace(self): + designspace_path = self.get_test_input("InterpolateLayout.designspace") + self.assertIsNone(interpolatable_main([designspace_path])) + + def test_glyphsapp(self): + pytest.importorskip("glyphsLib") + glyphsapp_path = self.get_test_input("InterpolateLayout.glyphs") + self.assertIsNone(interpolatable_main([glyphsapp_path])) + + def test_VF(self): + suffix = ".ttf" + ttx_dir = self.get_test_input("master_ttx_varfont_ttf") + + self.temp_dir() + ttx_paths = self.get_file_list(ttx_dir, ".ttx", "SparseMasters-") + for path in ttx_paths: + self.compile_font(path, suffix, self.tempdir) + + ttf_paths = self.get_file_list(self.tempdir, suffix) + + problems = interpolatable_main(["--quiet"] + ttf_paths) + self.assertIsNone(problems) + + def test_sparse_interpolatable_ttfs(self): + suffix = ".ttf" + ttx_dir = self.get_test_input("master_ttx_interpolatable_ttf") + + self.temp_dir() + ttx_paths = self.get_file_list(ttx_dir, ".ttx", "SparseMasters-") + for path in ttx_paths: + self.compile_font(path, suffix, self.tempdir) + + ttf_paths = self.get_file_list(self.tempdir, suffix) + + # without --ignore-missing + problems = interpolatable_main(["--quiet"] + ttf_paths) + self.assertEqual( + problems["a"], [{"type": "missing", "master": "SparseMasters-Medium"}] + ) + self.assertEqual( + problems["s"], [{"type": "missing", "master": "SparseMasters-Medium"}] + ) + self.assertEqual( + problems["edotabove"], + [{"type": "missing", "master": "SparseMasters-Medium"}], + ) + self.assertEqual( + problems["dotabovecomb"], + [{"type": "missing", "master": "SparseMasters-Medium"}], + ) + + # normal order, with --ignore-missing + self.assertIsNone(interpolatable_main(["--ignore-missing"] + ttf_paths)) + # purposely putting the sparse master (medium) first + self.assertIsNone( + interpolatable_main( + ["--ignore-missing"] + [ttf_paths[1]] + [ttf_paths[0]] + [ttf_paths[2]] + ) + ) + # purposely putting the sparse master (medium) last + self.assertIsNone( + interpolatable_main( + ["--ignore-missing"] + [ttf_paths[0]] + [ttf_paths[2]] + [ttf_paths[1]] + ) + ) + + def test_sparse_interpolatable_ufos(self): + ttx_dir = self.get_test_input("master_ufo") + ufo_paths = self.get_file_list(ttx_dir, ".ufo", "SparseMasters-") + + # without --ignore-missing + problems = interpolatable_main(["--quiet"] + ufo_paths) + self.assertEqual( + problems["a"], [{"type": "missing", "master": "SparseMasters-Medium"}] + ) + self.assertEqual( + problems["s"], [{"type": "missing", "master": "SparseMasters-Medium"}] + ) + self.assertEqual( + problems["edotabove"], + [{"type": "missing", "master": "SparseMasters-Medium"}], + ) + self.assertEqual( + problems["dotabovecomb"], + [{"type": "missing", "master": "SparseMasters-Medium"}], + ) + + # normal order, with --ignore-missing + self.assertIsNone(interpolatable_main(["--ignore-missing"] + ufo_paths)) + # purposely putting the sparse master (medium) first + self.assertIsNone( + interpolatable_main( + ["--ignore-missing"] + [ufo_paths[1]] + [ufo_paths[0]] + [ufo_paths[2]] + ) + ) + # purposely putting the sparse master (medium) last + self.assertIsNone( + interpolatable_main( + ["--ignore-missing"] + [ufo_paths[0]] + [ufo_paths[2]] + [ufo_paths[1]] + ) + ) + + def test_sparse_designspace(self): + designspace_path = self.get_test_input("SparseMasters_ufo.designspace") + + problems = interpolatable_main(["--quiet", designspace_path]) + self.assertEqual( + problems["a"], [{"type": "missing", "master": "SparseMasters-Medium"}] + ) + self.assertEqual( + problems["s"], [{"type": "missing", "master": "SparseMasters-Medium"}] + ) + self.assertEqual( + problems["edotabove"], + [{"type": "missing", "master": "SparseMasters-Medium"}], + ) + self.assertEqual( + problems["dotabovecomb"], + [{"type": "missing", "master": "SparseMasters-Medium"}], + ) + + # normal order, with --ignore-missing + self.assertIsNone(interpolatable_main(["--ignore-missing", designspace_path])) + + def test_sparse_glyphsapp(self): + pytest.importorskip("glyphsLib") + glyphsapp_path = self.get_test_input("SparseMasters.glyphs") + + problems = interpolatable_main(["--quiet", glyphsapp_path]) + self.assertEqual( + problems["a"], [{"type": "missing", "master": "Sparse Masters-Medium"}] + ) + self.assertEqual( + problems["s"], [{"type": "missing", "master": "Sparse Masters-Medium"}] + ) + self.assertEqual( + problems["edotabove"], + [{"type": "missing", "master": "Sparse Masters-Medium"}], + ) + self.assertEqual( + problems["dotabovecomb"], + [{"type": "missing", "master": "Sparse Masters-Medium"}], + ) + + # normal order, with --ignore-missing + self.assertIsNone(interpolatable_main(["--ignore-missing", glyphsapp_path])) + + def test_interpolatable_varComposite(self): + input_path = self.get_test_input( + "..", "..", "ttLib", "data", "varc-ac00-ac01.ttf" + ) + # This particular test font which was generated by machine-learning + # exhibits an "error" in one of the masters; it's a false-positive. + # Just make sure the code runs. + interpolatable_main((input_path,)) + if __name__ == "__main__": sys.exit(unittest.main()) |