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