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