1import os 2 3import pytest 4import py 5 6ufoLib2 = pytest.importorskip("ufoLib2") 7 8from fontTools.cu2qu.ufo import CURVE_TYPE_LIB_KEY 9from fontTools.cu2qu.cli import main 10 11 12DATADIR = os.path.join(os.path.dirname(__file__), "data") 13 14TEST_UFOS = [ 15 py.path.local(DATADIR).join("RobotoSubset-Regular.ufo"), 16 py.path.local(DATADIR).join("RobotoSubset-Bold.ufo"), 17] 18 19 20@pytest.fixture 21def test_paths(tmpdir): 22 result = [] 23 for path in TEST_UFOS: 24 new_path = tmpdir / path.basename 25 path.copy(new_path) 26 result.append(new_path) 27 return result 28 29 30class MainTest(object): 31 @staticmethod 32 def run_main(*args): 33 main([str(p) for p in args if p]) 34 35 def test_single_input_no_output(self, test_paths): 36 ufo_path = test_paths[0] 37 38 self.run_main(ufo_path) 39 40 font = ufoLib2.Font.open(ufo_path) 41 assert font.lib[CURVE_TYPE_LIB_KEY] == "quadratic" 42 43 def test_single_input_output_file(self, tmpdir): 44 input_path = TEST_UFOS[0] 45 output_path = tmpdir / input_path.basename 46 self.run_main("-o", output_path, input_path) 47 48 assert output_path.check(dir=1) 49 50 def test_multiple_inputs_output_dir(self, tmpdir): 51 output_dir = tmpdir / "output_dir" 52 self.run_main("-d", output_dir, *TEST_UFOS) 53 54 assert output_dir.check(dir=1) 55 outputs = set(p.basename for p in output_dir.listdir()) 56 assert "RobotoSubset-Regular.ufo" in outputs 57 assert "RobotoSubset-Bold.ufo" in outputs 58 59 def test_interpolatable_inplace(self, test_paths): 60 self.run_main("-i", *test_paths) 61 self.run_main("-i", *test_paths) # idempotent 62 63 @pytest.mark.parametrize("mode", ["", "-i"], ids=["normal", "interpolatable"]) 64 def test_copytree(self, mode, tmpdir): 65 output_dir = tmpdir / "output_dir" 66 self.run_main(mode, "-d", output_dir, *TEST_UFOS) 67 68 output_dir_2 = tmpdir / "output_dir_2" 69 # no conversion when curves are already quadratic, just copy 70 self.run_main(mode, "-d", output_dir_2, *output_dir.listdir()) 71 # running again overwrites existing with the copy 72 self.run_main(mode, "-d", output_dir_2, *output_dir.listdir()) 73 74 def test_multiprocessing(self, tmpdir, test_paths): 75 self.run_main(*(test_paths + ["-j"])) 76 77 def test_keep_direction(self, test_paths): 78 self.run_main("--keep-direction", *test_paths) 79 80 def test_conversion_error(self, test_paths): 81 self.run_main("--conversion-error", 0.002, *test_paths) 82 83 def test_conversion_error_short(self, test_paths): 84 self.run_main("-e", 0.003, test_paths[0]) 85