xref: /aosp_15_r20/external/fonttools/Tests/cu2qu/cli_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
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