Home | History | Annotate | Download | only in ufoLib
      1 from __future__ import absolute_import, unicode_literals
      2 import unittest
      3 from fontTools.ufoLib.filenames import userNameToFileName, handleClash1, handleClash2
      4 
      5 
      6 class TestFilenames(unittest.TestCase):
      7 
      8     def test_userNameToFileName(self):
      9         self.assertEqual(userNameToFileName("a"), "a")
     10         self.assertEqual(userNameToFileName("A"), "A_")
     11         self.assertEqual(userNameToFileName("AE"), "A_E_")
     12         self.assertEqual(userNameToFileName("Ae"), "A_e")
     13         self.assertEqual(userNameToFileName("ae"), "ae")
     14         self.assertEqual(userNameToFileName("aE"), "aE_")
     15         self.assertEqual(userNameToFileName("a.alt"), "a.alt")
     16         self.assertEqual(userNameToFileName("A.alt"), "A_.alt")
     17         self.assertEqual(userNameToFileName("A.Alt"), "A_.A_lt")
     18         self.assertEqual(userNameToFileName("A.aLt"), "A_.aL_t")
     19         self.assertEqual(userNameToFileName("A.alT"), "A_.alT_")
     20         self.assertEqual(userNameToFileName("T_H"), "T__H_")
     21         self.assertEqual(userNameToFileName("T_h"), "T__h")
     22         self.assertEqual(userNameToFileName("t_h"), "t_h")
     23         self.assertEqual(userNameToFileName("F_F_I"), "F__F__I_")
     24         self.assertEqual(userNameToFileName("f_f_i"), "f_f_i")
     25         self.assertEqual(userNameToFileName("Aacute_V.swash"),
     26                          "A_acute_V_.swash")
     27         self.assertEqual(userNameToFileName(".notdef"), "_notdef")
     28         self.assertEqual(userNameToFileName("con"), "_con")
     29         self.assertEqual(userNameToFileName("CON"), "C_O_N_")
     30         self.assertEqual(userNameToFileName("con.alt"), "_con.alt")
     31         self.assertEqual(userNameToFileName("alt.con"), "alt._con")
     32 
     33     def test_userNameToFileName_ValueError(self):
     34         with self.assertRaises(ValueError):
     35             userNameToFileName(b"a")
     36         with self.assertRaises(ValueError):
     37             userNameToFileName({"a"})
     38         with self.assertRaises(ValueError):
     39             userNameToFileName(("a",))
     40         with self.assertRaises(ValueError):
     41             userNameToFileName(["a"])
     42         with self.assertRaises(ValueError):
     43             userNameToFileName(["a"])
     44         with self.assertRaises(ValueError):
     45             userNameToFileName(b"\xd8\x00")
     46 
     47     def test_handleClash1(self):
     48         prefix = ("0" * 5) + "."
     49         suffix = "." + ("0" * 10)
     50         existing = ["a" * 5]
     51 
     52         e = list(existing)
     53         self.assertEqual(
     54             handleClash1(userName="A" * 5, existing=e, prefix=prefix,
     55                          suffix=suffix),
     56             '00000.AAAAA000000000000001.0000000000'
     57         )
     58 
     59         e = list(existing)
     60         e.append(prefix + "aaaaa" + "1".zfill(15) + suffix)
     61         self.assertEqual(
     62             handleClash1(userName="A" * 5, existing=e, prefix=prefix,
     63                          suffix=suffix),
     64             '00000.AAAAA000000000000002.0000000000'
     65         )
     66 
     67         e = list(existing)
     68         e.append(prefix + "AAAAA" + "2".zfill(15) + suffix)
     69         self.assertEqual(
     70             handleClash1(userName="A" * 5, existing=e, prefix=prefix,
     71                          suffix=suffix),
     72             '00000.AAAAA000000000000001.0000000000'
     73         )
     74 
     75     def test_handleClash2(self):
     76         prefix = ("0" * 5) + "."
     77         suffix = "." + ("0" * 10)
     78         existing = [prefix + str(i) + suffix for i in range(100)]
     79 
     80         e = list(existing)
     81         self.assertEqual(
     82             handleClash2(existing=e, prefix=prefix, suffix=suffix),
     83             '00000.100.0000000000'
     84         )
     85 
     86         e = list(existing)
     87         e.remove(prefix + "1" + suffix)
     88         self.assertEqual(
     89             handleClash2(existing=e, prefix=prefix, suffix=suffix),
     90             '00000.1.0000000000'
     91         )
     92 
     93         e = list(existing)
     94         e.remove(prefix + "2" + suffix)
     95         self.assertEqual(
     96             handleClash2(existing=e, prefix=prefix, suffix=suffix),
     97             '00000.2.0000000000'
     98         )
     99