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 32 @staticmethod 33 def run_main(*args): 34 main([str(p) for p in args if p]) 35 36 def test_single_input_no_output(self, test_paths): 37 ufo_path = test_paths[0] 38 39 self.run_main(ufo_path) 40 41 font = ufoLib2.Font.open(ufo_path) 42 assert font.lib[CURVE_TYPE_LIB_KEY] == "quadratic" 43 44 def test_single_input_output_file(self, tmpdir): 45 input_path = TEST_UFOS[0] 46 output_path = tmpdir / input_path.basename 47 self.run_main('-o', output_path, input_path) 48 49 assert output_path.check(dir=1) 50 51 def test_multiple_inputs_output_dir(self, tmpdir): 52 output_dir = tmpdir / "output_dir" 53 self.run_main('-d', output_dir, *TEST_UFOS) 54 55 assert output_dir.check(dir=1) 56 outputs = set(p.basename for p in output_dir.listdir()) 57 assert "RobotoSubset-Regular.ufo" in outputs 58 assert "RobotoSubset-Bold.ufo" in outputs 59 60 def test_interpolatable_inplace(self, test_paths): 61 self.run_main('-i', *test_paths) 62 self.run_main('-i', *test_paths) # idempotent 63 64 @pytest.mark.parametrize( 65 "mode", ["", "-i"], ids=["normal", "interpolatable"]) 66 def test_copytree(self, mode, tmpdir): 67 output_dir = tmpdir / "output_dir" 68 self.run_main(mode, '-d', output_dir, *TEST_UFOS) 69 70 output_dir_2 = tmpdir / "output_dir_2" 71 # no conversion when curves are already quadratic, just copy 72 self.run_main(mode, '-d', output_dir_2, *output_dir.listdir()) 73 # running again overwrites existing with the copy 74 self.run_main(mode, '-d', output_dir_2, *output_dir.listdir()) 75 76 def test_multiprocessing(self, tmpdir, test_paths): 77 self.run_main(*(test_paths + ["-j"])) 78 79 def test_keep_direction(self, test_paths): 80 self.run_main('--keep-direction', *test_paths) 81 82 def test_conversion_error(self, test_paths): 83 self.run_main('--conversion-error', 0.002, *test_paths) 84 85 def test_conversion_error_short(self, test_paths): 86 self.run_main('-e', 0.003, test_paths[0]) 87