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())