python-2.5.2/win32/Lib/test/test_glob.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 import unittest
       
     2 from test.test_support import run_unittest, TESTFN
       
     3 import glob
       
     4 import os
       
     5 import shutil
       
     6 
       
     7 class GlobTests(unittest.TestCase):
       
     8 
       
     9     def norm(self, *parts):
       
    10         return os.path.normpath(os.path.join(self.tempdir, *parts))
       
    11 
       
    12     def mktemp(self, *parts):
       
    13         filename = self.norm(*parts)
       
    14         base, file = os.path.split(filename)
       
    15         if not os.path.exists(base):
       
    16             os.makedirs(base)
       
    17         f = open(filename, 'w')
       
    18         f.close()
       
    19 
       
    20     def setUp(self):
       
    21         self.tempdir = TESTFN+"_dir"
       
    22         self.mktemp('a', 'D')
       
    23         self.mktemp('aab', 'F')
       
    24         self.mktemp('aaa', 'zzzF')
       
    25         self.mktemp('ZZZ')
       
    26         self.mktemp('a', 'bcd', 'EF')
       
    27         self.mktemp('a', 'bcd', 'efg', 'ha')
       
    28         if hasattr(os, 'symlink'):
       
    29             os.symlink(self.norm('broken'), self.norm('sym1'))
       
    30             os.symlink(self.norm('broken'), self.norm('sym2'))
       
    31 
       
    32     def tearDown(self):
       
    33         shutil.rmtree(self.tempdir)
       
    34 
       
    35     def glob(self, *parts):
       
    36         if len(parts) == 1:
       
    37             pattern = parts[0]
       
    38         else:
       
    39             pattern = os.path.join(*parts)
       
    40         p = os.path.join(self.tempdir, pattern)
       
    41         res = glob.glob(p)
       
    42         self.assertEqual(list(glob.iglob(p)), res)
       
    43         return res
       
    44 
       
    45     def assertSequencesEqual_noorder(self, l1, l2):
       
    46         self.assertEqual(set(l1), set(l2))
       
    47 
       
    48     def test_glob_literal(self):
       
    49         eq = self.assertSequencesEqual_noorder
       
    50         eq(self.glob('a'), [self.norm('a')])
       
    51         eq(self.glob('a', 'D'), [self.norm('a', 'D')])
       
    52         eq(self.glob('aab'), [self.norm('aab')])
       
    53         eq(self.glob('zymurgy'), [])
       
    54 
       
    55     def test_glob_one_directory(self):
       
    56         eq = self.assertSequencesEqual_noorder
       
    57         eq(self.glob('a*'), map(self.norm, ['a', 'aab', 'aaa']))
       
    58         eq(self.glob('*a'), map(self.norm, ['a', 'aaa']))
       
    59         eq(self.glob('aa?'), map(self.norm, ['aaa', 'aab']))
       
    60         eq(self.glob('aa[ab]'), map(self.norm, ['aaa', 'aab']))
       
    61         eq(self.glob('*q'), [])
       
    62 
       
    63     def test_glob_nested_directory(self):
       
    64         eq = self.assertSequencesEqual_noorder
       
    65         if os.path.normcase("abCD") == "abCD":
       
    66             # case-sensitive filesystem
       
    67             eq(self.glob('a', 'bcd', 'E*'), [self.norm('a', 'bcd', 'EF')])
       
    68         else:
       
    69             # case insensitive filesystem
       
    70             eq(self.glob('a', 'bcd', 'E*'), [self.norm('a', 'bcd', 'EF'),
       
    71                                              self.norm('a', 'bcd', 'efg')])
       
    72         eq(self.glob('a', 'bcd', '*g'), [self.norm('a', 'bcd', 'efg')])
       
    73 
       
    74     def test_glob_directory_names(self):
       
    75         eq = self.assertSequencesEqual_noorder
       
    76         eq(self.glob('*', 'D'), [self.norm('a', 'D')])
       
    77         eq(self.glob('*', '*a'), [])
       
    78         eq(self.glob('a', '*', '*', '*a'),
       
    79            [self.norm('a', 'bcd', 'efg', 'ha')])
       
    80         eq(self.glob('?a?', '*F'), map(self.norm, [os.path.join('aaa', 'zzzF'),
       
    81                                                    os.path.join('aab', 'F')]))
       
    82 
       
    83     def test_glob_directory_with_trailing_slash(self):
       
    84         # We are verifying that when there is wildcard pattern which
       
    85         # ends with os.sep doesn't blow up.
       
    86         res = glob.glob(self.tempdir + '*' + os.sep)
       
    87         self.assertEqual(len(res), 1)
       
    88         # either of these results are reasonable
       
    89         self.assertTrue(res[0] in [self.tempdir, self.tempdir + os.sep])
       
    90 
       
    91     def test_glob_broken_symlinks(self):
       
    92         if hasattr(os, 'symlink'):
       
    93             eq = self.assertSequencesEqual_noorder
       
    94             eq(self.glob('sym*'), [self.norm('sym1'), self.norm('sym2')])
       
    95             eq(self.glob('sym1'), [self.norm('sym1')])
       
    96             eq(self.glob('sym2'), [self.norm('sym2')])
       
    97 
       
    98 
       
    99 def test_main():
       
   100     run_unittest(GlobTests)
       
   101 
       
   102 
       
   103 if __name__ == "__main__":
       
   104     test_main()