1*e1fe3e4aSElliott Hughesimport unittest 2*e1fe3e4aSElliott Hughesfrom fontTools.ufoLib.filenames import userNameToFileName, handleClash1, handleClash2 3*e1fe3e4aSElliott Hughes 4*e1fe3e4aSElliott Hughes 5*e1fe3e4aSElliott Hughesclass TestFilenames(unittest.TestCase): 6*e1fe3e4aSElliott Hughes def test_userNameToFileName(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 self.assertEqual( 31*e1fe3e4aSElliott Hughes # Test output for ASCII range (up until 0x7F), except for illegal 32*e1fe3e4aSElliott Hughes # characters. 33*e1fe3e4aSElliott Hughes userNameToFileName("".join([chr(i) for i in range(0, 0x80)])), 34*e1fe3e4aSElliott Hughes "________________________________" 35*e1fe3e4aSElliott Hughes " !_#$%&'____,-._0123456789_;_=__" 36*e1fe3e4aSElliott Hughes "@A_B_C_D_E_F_G_H_I_J_K_L_M_N_O_P_Q_R_S_T_U_V_W_X_Y_Z_" 37*e1fe3e4aSElliott Hughes "___^_`abcdefghijklmnopqrstuvwxyz{_}~_", 38*e1fe3e4aSElliott Hughes ) 39*e1fe3e4aSElliott Hughes 40*e1fe3e4aSElliott Hughes def test_userNameToFileName_ValueError(self): 41*e1fe3e4aSElliott Hughes with self.assertRaises(ValueError): 42*e1fe3e4aSElliott Hughes userNameToFileName(b"a") 43*e1fe3e4aSElliott Hughes with self.assertRaises(ValueError): 44*e1fe3e4aSElliott Hughes userNameToFileName({"a"}) 45*e1fe3e4aSElliott Hughes with self.assertRaises(ValueError): 46*e1fe3e4aSElliott Hughes userNameToFileName(("a",)) 47*e1fe3e4aSElliott Hughes with self.assertRaises(ValueError): 48*e1fe3e4aSElliott Hughes userNameToFileName(["a"]) 49*e1fe3e4aSElliott Hughes with self.assertRaises(ValueError): 50*e1fe3e4aSElliott Hughes userNameToFileName(["a"]) 51*e1fe3e4aSElliott Hughes with self.assertRaises(ValueError): 52*e1fe3e4aSElliott Hughes userNameToFileName(b"\xd8\x00") 53*e1fe3e4aSElliott Hughes 54*e1fe3e4aSElliott Hughes def test_handleClash1(self): 55*e1fe3e4aSElliott Hughes prefix = ("0" * 5) + "." 56*e1fe3e4aSElliott Hughes suffix = "." + ("0" * 10) 57*e1fe3e4aSElliott Hughes existing = ["a" * 5] 58*e1fe3e4aSElliott Hughes 59*e1fe3e4aSElliott Hughes e = list(existing) 60*e1fe3e4aSElliott Hughes self.assertEqual( 61*e1fe3e4aSElliott Hughes handleClash1(userName="A" * 5, existing=e, prefix=prefix, suffix=suffix), 62*e1fe3e4aSElliott Hughes "00000.AAAAA000000000000001.0000000000", 63*e1fe3e4aSElliott Hughes ) 64*e1fe3e4aSElliott Hughes 65*e1fe3e4aSElliott Hughes e = list(existing) 66*e1fe3e4aSElliott Hughes e.append(prefix + "aaaaa" + "1".zfill(15) + suffix) 67*e1fe3e4aSElliott Hughes self.assertEqual( 68*e1fe3e4aSElliott Hughes handleClash1(userName="A" * 5, existing=e, prefix=prefix, suffix=suffix), 69*e1fe3e4aSElliott Hughes "00000.AAAAA000000000000002.0000000000", 70*e1fe3e4aSElliott Hughes ) 71*e1fe3e4aSElliott Hughes 72*e1fe3e4aSElliott Hughes e = list(existing) 73*e1fe3e4aSElliott Hughes e.append(prefix + "AAAAA" + "2".zfill(15) + suffix) 74*e1fe3e4aSElliott Hughes self.assertEqual( 75*e1fe3e4aSElliott Hughes handleClash1(userName="A" * 5, existing=e, prefix=prefix, suffix=suffix), 76*e1fe3e4aSElliott Hughes "00000.AAAAA000000000000001.0000000000", 77*e1fe3e4aSElliott Hughes ) 78*e1fe3e4aSElliott Hughes 79*e1fe3e4aSElliott Hughes def test_handleClash2(self): 80*e1fe3e4aSElliott Hughes prefix = ("0" * 5) + "." 81*e1fe3e4aSElliott Hughes suffix = "." + ("0" * 10) 82*e1fe3e4aSElliott Hughes existing = [prefix + str(i) + suffix for i in range(100)] 83*e1fe3e4aSElliott Hughes 84*e1fe3e4aSElliott Hughes e = list(existing) 85*e1fe3e4aSElliott Hughes self.assertEqual( 86*e1fe3e4aSElliott Hughes handleClash2(existing=e, prefix=prefix, suffix=suffix), 87*e1fe3e4aSElliott Hughes "00000.100.0000000000", 88*e1fe3e4aSElliott Hughes ) 89*e1fe3e4aSElliott Hughes 90*e1fe3e4aSElliott Hughes e = list(existing) 91*e1fe3e4aSElliott Hughes e.remove(prefix + "1" + suffix) 92*e1fe3e4aSElliott Hughes self.assertEqual( 93*e1fe3e4aSElliott Hughes handleClash2(existing=e, prefix=prefix, suffix=suffix), "00000.1.0000000000" 94*e1fe3e4aSElliott Hughes ) 95*e1fe3e4aSElliott Hughes 96*e1fe3e4aSElliott Hughes e = list(existing) 97*e1fe3e4aSElliott Hughes e.remove(prefix + "2" + suffix) 98*e1fe3e4aSElliott Hughes self.assertEqual( 99*e1fe3e4aSElliott Hughes handleClash2(existing=e, prefix=prefix, suffix=suffix), "00000.2.0000000000" 100*e1fe3e4aSElliott Hughes ) 101