xref: /aosp_15_r20/external/fonttools/Tests/misc/filenames_test.py (revision e1fe3e4ad2793916b15cccdc4a7da52a7e1dd0e9)
1import unittest
2from fontTools.misc.filenames import userNameToFileName, handleClash1, handleClash2
3
4
5class UserNameToFilenameTest(unittest.TestCase):
6    def test_names(self):
7        self.assertEqual(userNameToFileName("a"), "a")
8        self.assertEqual(userNameToFileName("A"), "A_")
9        self.assertEqual(userNameToFileName("AE"), "A_E_")
10        self.assertEqual(userNameToFileName("Ae"), "A_e")
11        self.assertEqual(userNameToFileName("ae"), "ae")
12        self.assertEqual(userNameToFileName("aE"), "aE_")
13        self.assertEqual(userNameToFileName("a.alt"), "a.alt")
14        self.assertEqual(userNameToFileName("A.alt"), "A_.alt")
15        self.assertEqual(userNameToFileName("A.Alt"), "A_.A_lt")
16        self.assertEqual(userNameToFileName("A.aLt"), "A_.aL_t")
17        self.assertEqual(userNameToFileName("A.alT"), "A_.alT_")
18        self.assertEqual(userNameToFileName("T_H"), "T__H_")
19        self.assertEqual(userNameToFileName("T_h"), "T__h")
20        self.assertEqual(userNameToFileName("t_h"), "t_h")
21        self.assertEqual(userNameToFileName("F_F_I"), "F__F__I_")
22        self.assertEqual(userNameToFileName("f_f_i"), "f_f_i")
23        self.assertEqual(userNameToFileName("Aacute_V.swash"), "A_acute_V_.swash")
24        self.assertEqual(userNameToFileName(".notdef"), "_notdef")
25        self.assertEqual(userNameToFileName("con"), "_con")
26        self.assertEqual(userNameToFileName("CON"), "C_O_N_")
27        self.assertEqual(userNameToFileName("con.alt"), "_con.alt")
28        self.assertEqual(userNameToFileName("alt.con"), "alt._con")
29
30    def test_prefix_suffix(self):
31        prefix = "TEST_PREFIX"
32        suffix = "TEST_SUFFIX"
33        name = "NAME"
34        name_file = "N_A_M_E_"
35        self.assertEqual(
36            userNameToFileName(name, prefix=prefix, suffix=suffix),
37            prefix + name_file + suffix,
38        )
39
40    def test_collide(self):
41        prefix = "TEST_PREFIX"
42        suffix = "TEST_SUFFIX"
43        name = "NAME"
44        name_file = "N_A_M_E_"
45        collision_avoidance1 = "000000000000001"
46        collision_avoidance2 = "000000000000002"
47        exist = set()
48        generated = userNameToFileName(name, exist, prefix=prefix, suffix=suffix)
49        exist.add(generated.lower())
50        self.assertEqual(generated, prefix + name_file + suffix)
51        generated = userNameToFileName(name, exist, prefix=prefix, suffix=suffix)
52        exist.add(generated.lower())
53        self.assertEqual(generated, prefix + name_file + collision_avoidance1 + suffix)
54        generated = userNameToFileName(name, exist, prefix=prefix, suffix=suffix)
55        self.assertEqual(generated, prefix + name_file + collision_avoidance2 + suffix)
56
57    def test_ValueError(self):
58        with self.assertRaises(ValueError):
59            userNameToFileName(b"a")
60        with self.assertRaises(ValueError):
61            userNameToFileName({"a"})
62        with self.assertRaises(ValueError):
63            userNameToFileName(("a",))
64        with self.assertRaises(ValueError):
65            userNameToFileName(["a"])
66        with self.assertRaises(ValueError):
67            userNameToFileName(["a"])
68        with self.assertRaises(ValueError):
69            userNameToFileName(b"\xd8\x00")
70
71    def test_handleClash1(self):
72        prefix = ("0" * 5) + "."
73        suffix = "." + ("0" * 10)
74        existing = ["a" * 5]
75
76        e = list(existing)
77        self.assertEqual(
78            handleClash1(userName="A" * 5, existing=e, prefix=prefix, suffix=suffix),
79            "00000.AAAAA000000000000001.0000000000",
80        )
81
82        e = list(existing)
83        e.append(prefix + "aaaaa" + "1".zfill(15) + suffix)
84        self.assertEqual(
85            handleClash1(userName="A" * 5, existing=e, prefix=prefix, suffix=suffix),
86            "00000.AAAAA000000000000002.0000000000",
87        )
88
89        e = list(existing)
90        e.append(prefix + "AAAAA" + "2".zfill(15) + suffix)
91        self.assertEqual(
92            handleClash1(userName="A" * 5, existing=e, prefix=prefix, suffix=suffix),
93            "00000.AAAAA000000000000001.0000000000",
94        )
95
96    def test_handleClash2(self):
97        prefix = ("0" * 5) + "."
98        suffix = "." + ("0" * 10)
99        existing = [prefix + str(i) + suffix for i in range(100)]
100
101        e = list(existing)
102        self.assertEqual(
103            handleClash2(existing=e, prefix=prefix, suffix=suffix),
104            "00000.100.0000000000",
105        )
106
107        e = list(existing)
108        e.remove(prefix + "1" + suffix)
109        self.assertEqual(
110            handleClash2(existing=e, prefix=prefix, suffix=suffix), "00000.1.0000000000"
111        )
112
113        e = list(existing)
114        e.remove(prefix + "2" + suffix)
115        self.assertEqual(
116            handleClash2(existing=e, prefix=prefix, suffix=suffix), "00000.2.0000000000"
117        )
118
119
120if __name__ == "__main__":
121    import sys
122
123    sys.exit(unittest.main())
124