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