Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 181ae4b

Browse files
committed
Branch merge
2 parents ac3d137 + 2336c85 commit 181ae4b

2 files changed

Lines changed: 195 additions & 7 deletions

File tree

Lib/distutils/tests/test_filelist.py

Lines changed: 194 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
"""Tests for distutils.filelist."""
2+
import re
23
import unittest
4+
from distutils import debug
5+
from distutils.log import WARN
6+
from distutils.errors import DistutilsTemplateError
7+
from distutils.filelist import glob_to_re, translate_pattern, FileList
38

4-
from distutils.filelist import glob_to_re, FileList
59
from test.support import captured_stdout, run_unittest
6-
from distutils import debug
10+
from distutils.tests import support
11+
12+
13+
class FileListTestCase(support.LoggingSilencer,
14+
unittest.TestCase):
715

8-
class FileListTestCase(unittest.TestCase):
16+
def assertNoWarnings(self):
17+
self.assertEqual(self.get_logs(WARN), [])
18+
self.clear_logs()
19+
20+
def assertWarnings(self):
21+
self.assertGreater(len(self.get_logs(WARN)), 0)
22+
self.clear_logs()
923

1024
def test_glob_to_re(self):
1125
# simple cases
@@ -23,18 +37,191 @@ def test_debug_print(self):
2337
file_list = FileList()
2438
with captured_stdout() as stdout:
2539
file_list.debug_print('xxx')
26-
stdout.seek(0)
27-
self.assertEqual(stdout.read(), '')
40+
self.assertEqual(stdout.getvalue(), '')
2841

2942
debug.DEBUG = True
3043
try:
3144
with captured_stdout() as stdout:
3245
file_list.debug_print('xxx')
33-
stdout.seek(0)
34-
self.assertEqual(stdout.read(), 'xxx\n')
46+
self.assertEqual(stdout.getvalue(), 'xxx\n')
3547
finally:
3648
debug.DEBUG = False
3749

50+
def test_set_allfiles(self):
51+
file_list = FileList()
52+
files = ['a', 'b', 'c']
53+
file_list.set_allfiles(files)
54+
self.assertEqual(file_list.allfiles, files)
55+
56+
def test_remove_duplicates(self):
57+
file_list = FileList()
58+
file_list.files = ['a', 'b', 'a', 'g', 'c', 'g']
59+
# files must be sorted beforehand (sdist does it)
60+
file_list.sort()
61+
file_list.remove_duplicates()
62+
self.assertEqual(file_list.files, ['a', 'b', 'c', 'g'])
63+
64+
def test_translate_pattern(self):
65+
# not regex
66+
self.assertTrue(hasattr(
67+
translate_pattern('a', anchor=True, is_regex=False),
68+
'search'))
69+
70+
# is a regex
71+
regex = re.compile('a')
72+
self.assertEqual(
73+
translate_pattern(regex, anchor=True, is_regex=True),
74+
regex)
75+
76+
# plain string flagged as regex
77+
self.assertTrue(hasattr(
78+
translate_pattern('a', anchor=True, is_regex=True),
79+
'search'))
80+
81+
# glob support
82+
self.assertTrue(translate_pattern(
83+
'*.py', anchor=True, is_regex=False).search('filelist.py'))
84+
85+
def test_exclude_pattern(self):
86+
# return False if no match
87+
file_list = FileList()
88+
self.assertFalse(file_list.exclude_pattern('*.py'))
89+
90+
# return True if files match
91+
file_list = FileList()
92+
file_list.files = ['a.py', 'b.py']
93+
self.assertTrue(file_list.exclude_pattern('*.py'))
94+
95+
# test excludes
96+
file_list = FileList()
97+
file_list.files = ['a.py', 'a.txt']
98+
file_list.exclude_pattern('*.py')
99+
self.assertEqual(file_list.files, ['a.txt'])
100+
101+
def test_include_pattern(self):
102+
# return False if no match
103+
file_list = FileList()
104+
file_list.set_allfiles([])
105+
self.assertFalse(file_list.include_pattern('*.py'))
106+
107+
# return True if files match
108+
file_list = FileList()
109+
file_list.set_allfiles(['a.py', 'b.txt'])
110+
self.assertTrue(file_list.include_pattern('*.py'))
111+
112+
# test * matches all files
113+
file_list = FileList()
114+
self.assertIsNone(file_list.allfiles)
115+
file_list.set_allfiles(['a.py', 'b.txt'])
116+
file_list.include_pattern('*')
117+
self.assertEqual(file_list.allfiles, ['a.py', 'b.txt'])
118+
119+
def test_process_template(self):
120+
# invalid lines
121+
file_list = FileList()
122+
for action in ('include', 'exclude', 'global-include',
123+
'global-exclude', 'recursive-include',
124+
'recursive-exclude', 'graft', 'prune', 'blarg'):
125+
self.assertRaises(DistutilsTemplateError,
126+
file_list.process_template_line, action)
127+
128+
# include
129+
file_list = FileList()
130+
file_list.set_allfiles(['a.py', 'b.txt', 'd/c.py'])
131+
132+
file_list.process_template_line('include *.py')
133+
self.assertEqual(file_list.files, ['a.py'])
134+
self.assertNoWarnings()
135+
136+
file_list.process_template_line('include *.rb')
137+
self.assertEqual(file_list.files, ['a.py'])
138+
self.assertWarnings()
139+
140+
# exclude
141+
file_list = FileList()
142+
file_list.files = ['a.py', 'b.txt', 'd/c.py']
143+
144+
file_list.process_template_line('exclude *.py')
145+
self.assertEqual(file_list.files, ['b.txt', 'd/c.py'])
146+
self.assertNoWarnings()
147+
148+
file_list.process_template_line('exclude *.rb')
149+
self.assertEqual(file_list.files, ['b.txt', 'd/c.py'])
150+
self.assertWarnings()
151+
152+
# global-include
153+
file_list = FileList()
154+
file_list.set_allfiles(['a.py', 'b.txt', 'd/c.py'])
155+
156+
file_list.process_template_line('global-include *.py')
157+
self.assertEqual(file_list.files, ['a.py', 'd/c.py'])
158+
self.assertNoWarnings()
159+
160+
file_list.process_template_line('global-include *.rb')
161+
self.assertEqual(file_list.files, ['a.py', 'd/c.py'])
162+
self.assertWarnings()
163+
164+
# global-exclude
165+
file_list = FileList()
166+
file_list.files = ['a.py', 'b.txt', 'd/c.py']
167+
168+
file_list.process_template_line('global-exclude *.py')
169+
self.assertEqual(file_list.files, ['b.txt'])
170+
self.assertNoWarnings()
171+
172+
file_list.process_template_line('global-exclude *.rb')
173+
self.assertEqual(file_list.files, ['b.txt'])
174+
self.assertWarnings()
175+
176+
# recursive-include
177+
file_list = FileList()
178+
file_list.set_allfiles(['a.py', 'd/b.py', 'd/c.txt', 'd/d/e.py'])
179+
180+
file_list.process_template_line('recursive-include d *.py')
181+
self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
182+
self.assertNoWarnings()
183+
184+
file_list.process_template_line('recursive-include e *.py')
185+
self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
186+
self.assertWarnings()
187+
188+
# recursive-exclude
189+
file_list = FileList()
190+
file_list.files = ['a.py', 'd/b.py', 'd/c.txt', 'd/d/e.py']
191+
192+
file_list.process_template_line('recursive-exclude d *.py')
193+
self.assertEqual(file_list.files, ['a.py', 'd/c.txt'])
194+
self.assertNoWarnings()
195+
196+
file_list.process_template_line('recursive-exclude e *.py')
197+
self.assertEqual(file_list.files, ['a.py', 'd/c.txt'])
198+
self.assertWarnings()
199+
200+
# graft
201+
file_list = FileList()
202+
file_list.set_allfiles(['a.py', 'd/b.py', 'd/d/e.py', 'f/f.py'])
203+
204+
file_list.process_template_line('graft d')
205+
self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
206+
self.assertNoWarnings()
207+
208+
file_list.process_template_line('graft e')
209+
self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
210+
self.assertWarnings()
211+
212+
# prune
213+
file_list = FileList()
214+
file_list.files = ['a.py', 'd/b.py', 'd/d/e.py', 'f/f.py']
215+
216+
file_list.process_template_line('prune d')
217+
self.assertEqual(file_list.files, ['a.py', 'f/f.py'])
218+
self.assertNoWarnings()
219+
220+
file_list.process_template_line('prune e')
221+
self.assertEqual(file_list.files, ['a.py', 'f/f.py'])
222+
self.assertWarnings()
223+
224+
38225
def test_suite():
39226
return unittest.makeSuite(FileListTestCase)
40227

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@ Nick Lockwood
554554
Stephanie Lockwood
555555
Anne Lord
556556
Tom Loredo
557+
Justin Love
557558
Jason Lowe
558559
Tony Lownds
559560
Ray Loyzaga

0 commit comments

Comments
 (0)