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