• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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