2 from test
.test_support
import run_unittest
, TESTFN
7 class GlobTests(unittest
.TestCase
):
9 def norm(self
, *parts
):
10 return os
.path
.normpath(os
.path
.join(self
.tempdir
, *parts
))
12 def mktemp(self
, *parts
):
13 filename
= self
.norm(*parts
)
14 base
, file = os
.path
.split(filename
)
15 if not os
.path
.exists(base
):
17 f
= open(filename
, 'w')
21 self
.tempdir
= TESTFN
+"_dir"
23 self
.mktemp('aab', 'F')
24 self
.mktemp('aaa', 'zzzF')
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'))
33 shutil
.rmtree(self
.tempdir
)
35 def glob(self
, *parts
):
39 pattern
= os
.path
.join(*parts
)
40 p
= os
.path
.join(self
.tempdir
, pattern
)
42 self
.assertEqual(list(glob
.iglob(p
)), res
)
45 def assertSequencesEqual_noorder(self
, l1
, l2
):
46 self
.assertEqual(set(l1
), set(l2
))
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'), [])
55 # test return types are unicode, but only if os.listdir
56 # returns unicode filenames
57 uniset
= set([unicode])
58 tmp
= os
.listdir(u
'.')
59 if set(type(x
) for x
in tmp
) == uniset
:
61 u2
= glob
.glob(u
'./*')
62 self
.assertEquals(set(type(r
) for r
in u1
), uniset
)
63 self
.assertEquals(set(type(r
) for r
in u2
), uniset
)
65 def test_glob_one_directory(self
):
66 eq
= self
.assertSequencesEqual_noorder
67 eq(self
.glob('a*'), map(self
.norm
, ['a', 'aab', 'aaa']))
68 eq(self
.glob('*a'), map(self
.norm
, ['a', 'aaa']))
69 eq(self
.glob('aa?'), map(self
.norm
, ['aaa', 'aab']))
70 eq(self
.glob('aa[ab]'), map(self
.norm
, ['aaa', 'aab']))
71 eq(self
.glob('*q'), [])
73 def test_glob_nested_directory(self
):
74 eq
= self
.assertSequencesEqual_noorder
75 if os
.path
.normcase("abCD") == "abCD":
76 # case-sensitive filesystem
77 eq(self
.glob('a', 'bcd', 'E*'), [self
.norm('a', 'bcd', 'EF')])
79 # case insensitive filesystem
80 eq(self
.glob('a', 'bcd', 'E*'), [self
.norm('a', 'bcd', 'EF'),
81 self
.norm('a', 'bcd', 'efg')])
82 eq(self
.glob('a', 'bcd', '*g'), [self
.norm('a', 'bcd', 'efg')])
84 def test_glob_directory_names(self
):
85 eq
= self
.assertSequencesEqual_noorder
86 eq(self
.glob('*', 'D'), [self
.norm('a', 'D')])
87 eq(self
.glob('*', '*a'), [])
88 eq(self
.glob('a', '*', '*', '*a'),
89 [self
.norm('a', 'bcd', 'efg', 'ha')])
90 eq(self
.glob('?a?', '*F'), map(self
.norm
, [os
.path
.join('aaa', 'zzzF'),
91 os
.path
.join('aab', 'F')]))
93 def test_glob_directory_with_trailing_slash(self
):
94 # We are verifying that when there is wildcard pattern which
95 # ends with os.sep doesn't blow up.
96 res
= glob
.glob(self
.tempdir
+ '*' + os
.sep
)
97 self
.assertEqual(len(res
), 1)
98 # either of these results are reasonable
99 self
.assertTrue(res
[0] in [self
.tempdir
, self
.tempdir
+ os
.sep
])
101 def test_glob_broken_symlinks(self
):
102 if hasattr(os
, 'symlink'):
103 eq
= self
.assertSequencesEqual_noorder
104 eq(self
.glob('sym*'), [self
.norm('sym1'), self
.norm('sym2')])
105 eq(self
.glob('sym1'), [self
.norm('sym1')])
106 eq(self
.glob('sym2'), [self
.norm('sym2')])
110 run_unittest(GlobTests
)
113 if __name__
== "__main__":