from __future__ import absolute_import, unicode_literals import unittest from fontTools.ufoLib.filenames import userNameToFileName, handleClash1, handleClash2 class TestFilenames(unittest.TestCase): def test_userNameToFileName(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("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_userNameToFileName_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' )