blob: a06ce9d2904968fcd79a885fff1e4648af0deac5 [file] [log] [blame]
Fred Drake99e87f92001-07-23 16:08:36 +00001import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00002from test.test_support import run_unittest, TESTFN
Fred Drake99e87f92001-07-23 16:08:36 +00003import glob
4import os
Raymond Hettinger91bbd9a2003-05-02 09:06:28 +00005from sets import Set
Fred Drake99e87f92001-07-23 16:08:36 +00006
7def mkdirs(fname):
8 if os.path.exists(fname) or fname == '':
9 return
10 base, file = os.path.split(fname)
11 mkdirs(base)
12 os.mkdir(fname)
13
14def touchfile(fname):
15 base, file = os.path.split(fname)
16 mkdirs(base)
17 f = open(fname, 'w')
18 f.close()
19
20def deltree(fname):
21 for f in os.listdir(fname):
22 fullname = os.path.join(fname, f)
23 if os.path.isdir(fullname):
24 deltree(fullname)
25 else:
26 try:
27 os.unlink(fullname)
28 except:
29 pass
30 try:
31 os.rmdir(fname)
32 except:
33 pass
34
35
36class GlobTests(unittest.TestCase):
37
38 def norm(self, *parts):
39 return os.path.normpath(os.path.join(self.tempdir, *parts))
40
41 def mktemp(self, *parts):
42 touchfile(self.norm(*parts))
43
44 def setUp(self):
45 self.tempdir = TESTFN+"_dir"
46 self.mktemp('a', 'D')
47 self.mktemp('aab', 'F')
48 self.mktemp('aaa', 'zzzF')
49 self.mktemp('ZZZ')
50 self.mktemp('a', 'bcd', 'EF')
51 self.mktemp('a', 'bcd', 'efg', 'ha')
52
53 def tearDown(self):
54 deltree(self.tempdir)
55
56 def glob(self, *parts):
57 if len(parts) == 1:
58 pattern = parts[0]
59 else:
60 pattern = os.path.join(*parts)
61 p = os.path.join(self.tempdir, pattern)
62 return glob.glob(p)
63
64 def assertSequencesEqual_noorder(self, l1, l2):
Raymond Hettinger91bbd9a2003-05-02 09:06:28 +000065 self.assertEqual(Set(l1), Set(l2))
Fred Drake99e87f92001-07-23 16:08:36 +000066
67 def test_glob_literal(self):
68 eq = self.assertSequencesEqual_noorder
69 np = lambda *f: norm(self.tempdir, *f)
70 eq(self.glob('a'), [self.norm('a')])
71 eq(self.glob('a', 'D'), [self.norm('a', 'D')])
72 eq(self.glob('aab'), [self.norm('aab')])
73 eq(self.glob('zymurgy'), [])
74
75 def test_glob_one_directory(self):
76 eq = self.assertSequencesEqual_noorder
77 np = lambda *f: norm(self.tempdir, *f)
78 eq(self.glob('a*'), map(self.norm, ['a', 'aab', 'aaa']))
79 eq(self.glob('*a'), map(self.norm, ['a', 'aaa']))
80 eq(self.glob('aa?'), map(self.norm, ['aaa', 'aab']))
81 eq(self.glob('aa[ab]'), map(self.norm, ['aaa', 'aab']))
82 eq(self.glob('*q'), [])
83
84 def test_glob_nested_directory(self):
85 eq = self.assertSequencesEqual_noorder
86 np = lambda *f: norm(self.tempdir, *f)
87 if os.path.normcase("abCD") == "abCD":
88 # case-sensitive filesystem
89 eq(self.glob('a', 'bcd', 'E*'), [self.norm('a', 'bcd', 'EF')])
90 else:
91 # case insensitive filesystem
92 eq(self.glob('a', 'bcd', 'E*'), [self.norm('a', 'bcd', 'EF'),
93 self.norm('a', 'bcd', 'efg')])
94 eq(self.glob('a', 'bcd', '*g'), [self.norm('a', 'bcd', 'efg')])
95
96 def test_glob_directory_names(self):
97 eq = self.assertSequencesEqual_noorder
98 np = lambda *f: norm(self.tempdir, *f)
99 eq(self.glob('*', 'D'), [self.norm('a', 'D')])
100 eq(self.glob('*', '*a'), [])
101 eq(self.glob('a', '*', '*', '*a'),
102 [self.norm('a', 'bcd', 'efg', 'ha')])
103 eq(self.glob('?a?', '*F'), map(self.norm, [os.path.join('aaa', 'zzzF'),
104 os.path.join('aab', 'F')]))
105
Fred Drake2e2be372001-09-20 21:33:42 +0000106
107def test_main():
108 run_unittest(GlobTests)
109
110
111if __name__ == "__main__":
112 test_main()