[Python-checkins] cpython (merge 3.2 -> default): Merge #11751 from 3.2

eric.araujo python-checkins at python.org
Fri Oct 14 16:57:12 CEST 2011


http://hg.python.org/cpython/rev/ba894d8a2a57
changeset:   72929:ba894d8a2a57
parent:      72927:d5fb646e7ce1
parent:      72928:866d098367c1
user:        Éric Araujo <merwok at netwok.org>
date:        Tue Oct 11 02:46:59 2011 +0200
summary:
  Merge #11751 from 3.2

files:
  Lib/distutils/tests/test_filelist.py |  201 ++++++++++++++-
  Misc/ACKS                            |    1 +
  2 files changed, 195 insertions(+), 7 deletions(-)


diff --git a/Lib/distutils/tests/test_filelist.py b/Lib/distutils/tests/test_filelist.py
--- a/Lib/distutils/tests/test_filelist.py
+++ b/Lib/distutils/tests/test_filelist.py
@@ -1,11 +1,25 @@
 """Tests for distutils.filelist."""
+import re
 import unittest
+from distutils import debug
+from distutils.log import WARN
+from distutils.errors import DistutilsTemplateError
+from distutils.filelist import glob_to_re, translate_pattern, FileList
 
-from distutils.filelist import glob_to_re, FileList
 from test.support import captured_stdout, run_unittest
-from distutils import debug
+from distutils.tests import support
 
-class FileListTestCase(unittest.TestCase):
+
+class FileListTestCase(support.LoggingSilencer,
+                       unittest.TestCase):
+
+    def assertNoWarnings(self):
+        self.assertEqual(self.get_logs(WARN), [])
+        self.clear_logs()
+
+    def assertWarnings(self):
+        self.assertGreater(len(self.get_logs(WARN)), 0)
+        self.clear_logs()
 
     def test_glob_to_re(self):
         # simple cases
@@ -23,18 +37,191 @@
         file_list = FileList()
         with captured_stdout() as stdout:
             file_list.debug_print('xxx')
-        stdout.seek(0)
-        self.assertEqual(stdout.read(), '')
+        self.assertEqual(stdout.getvalue(), '')
 
         debug.DEBUG = True
         try:
             with captured_stdout() as stdout:
                 file_list.debug_print('xxx')
-            stdout.seek(0)
-            self.assertEqual(stdout.read(), 'xxx\n')
+            self.assertEqual(stdout.getvalue(), 'xxx\n')
         finally:
             debug.DEBUG = False
 
+    def test_set_allfiles(self):
+        file_list = FileList()
+        files = ['a', 'b', 'c']
+        file_list.set_allfiles(files)
+        self.assertEqual(file_list.allfiles, files)
+
+    def test_remove_duplicates(self):
+        file_list = FileList()
+        file_list.files = ['a', 'b', 'a', 'g', 'c', 'g']
+        # files must be sorted beforehand (sdist does it)
+        file_list.sort()
+        file_list.remove_duplicates()
+        self.assertEqual(file_list.files, ['a', 'b', 'c', 'g'])
+
+    def test_translate_pattern(self):
+        # not regex
+        self.assertTrue(hasattr(
+            translate_pattern('a', anchor=True, is_regex=False),
+            'search'))
+
+        # is a regex
+        regex = re.compile('a')
+        self.assertEqual(
+            translate_pattern(regex, anchor=True, is_regex=True),
+            regex)
+
+        # plain string flagged as regex
+        self.assertTrue(hasattr(
+            translate_pattern('a', anchor=True, is_regex=True),
+            'search'))
+
+        # glob support
+        self.assertTrue(translate_pattern(
+            '*.py', anchor=True, is_regex=False).search('filelist.py'))
+
+    def test_exclude_pattern(self):
+        # return False if no match
+        file_list = FileList()
+        self.assertFalse(file_list.exclude_pattern('*.py'))
+
+        # return True if files match
+        file_list = FileList()
+        file_list.files = ['a.py', 'b.py']
+        self.assertTrue(file_list.exclude_pattern('*.py'))
+
+        # test excludes
+        file_list = FileList()
+        file_list.files = ['a.py', 'a.txt']
+        file_list.exclude_pattern('*.py')
+        self.assertEqual(file_list.files, ['a.txt'])
+
+    def test_include_pattern(self):
+        # return False if no match
+        file_list = FileList()
+        file_list.set_allfiles([])
+        self.assertFalse(file_list.include_pattern('*.py'))
+
+        # return True if files match
+        file_list = FileList()
+        file_list.set_allfiles(['a.py', 'b.txt'])
+        self.assertTrue(file_list.include_pattern('*.py'))
+
+        # test * matches all files
+        file_list = FileList()
+        self.assertIsNone(file_list.allfiles)
+        file_list.set_allfiles(['a.py', 'b.txt'])
+        file_list.include_pattern('*')
+        self.assertEqual(file_list.allfiles, ['a.py', 'b.txt'])
+
+    def test_process_template(self):
+        # invalid lines
+        file_list = FileList()
+        for action in ('include', 'exclude', 'global-include',
+                       'global-exclude', 'recursive-include',
+                       'recursive-exclude', 'graft', 'prune', 'blarg'):
+            self.assertRaises(DistutilsTemplateError,
+                              file_list.process_template_line, action)
+
+        # include
+        file_list = FileList()
+        file_list.set_allfiles(['a.py', 'b.txt', 'd/c.py'])
+
+        file_list.process_template_line('include *.py')
+        self.assertEqual(file_list.files, ['a.py'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('include *.rb')
+        self.assertEqual(file_list.files, ['a.py'])
+        self.assertWarnings()
+
+        # exclude
+        file_list = FileList()
+        file_list.files = ['a.py', 'b.txt', 'd/c.py']
+
+        file_list.process_template_line('exclude *.py')
+        self.assertEqual(file_list.files, ['b.txt', 'd/c.py'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('exclude *.rb')
+        self.assertEqual(file_list.files, ['b.txt', 'd/c.py'])
+        self.assertWarnings()
+
+        # global-include
+        file_list = FileList()
+        file_list.set_allfiles(['a.py', 'b.txt', 'd/c.py'])
+
+        file_list.process_template_line('global-include *.py')
+        self.assertEqual(file_list.files, ['a.py', 'd/c.py'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('global-include *.rb')
+        self.assertEqual(file_list.files, ['a.py', 'd/c.py'])
+        self.assertWarnings()
+
+        # global-exclude
+        file_list = FileList()
+        file_list.files = ['a.py', 'b.txt', 'd/c.py']
+
+        file_list.process_template_line('global-exclude *.py')
+        self.assertEqual(file_list.files, ['b.txt'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('global-exclude *.rb')
+        self.assertEqual(file_list.files, ['b.txt'])
+        self.assertWarnings()
+
+        # recursive-include
+        file_list = FileList()
+        file_list.set_allfiles(['a.py', 'd/b.py', 'd/c.txt', 'd/d/e.py'])
+
+        file_list.process_template_line('recursive-include d *.py')
+        self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('recursive-include e *.py')
+        self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
+        self.assertWarnings()
+
+        # recursive-exclude
+        file_list = FileList()
+        file_list.files = ['a.py', 'd/b.py', 'd/c.txt', 'd/d/e.py']
+
+        file_list.process_template_line('recursive-exclude d *.py')
+        self.assertEqual(file_list.files, ['a.py', 'd/c.txt'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('recursive-exclude e *.py')
+        self.assertEqual(file_list.files, ['a.py', 'd/c.txt'])
+        self.assertWarnings()
+
+        # graft
+        file_list = FileList()
+        file_list.set_allfiles(['a.py', 'd/b.py', 'd/d/e.py', 'f/f.py'])
+
+        file_list.process_template_line('graft d')
+        self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('graft e')
+        self.assertEqual(file_list.files, ['d/b.py', 'd/d/e.py'])
+        self.assertWarnings()
+
+        # prune
+        file_list = FileList()
+        file_list.files = ['a.py', 'd/b.py', 'd/d/e.py', 'f/f.py']
+
+        file_list.process_template_line('prune d')
+        self.assertEqual(file_list.files, ['a.py', 'f/f.py'])
+        self.assertNoWarnings()
+
+        file_list.process_template_line('prune e')
+        self.assertEqual(file_list.files, ['a.py', 'f/f.py'])
+        self.assertWarnings()
+
+
 def test_suite():
     return unittest.makeSuite(FileListTestCase)
 
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -590,6 +590,7 @@
 Stephanie Lockwood
 Anne Lord
 Tom Loredo
+Justin Love
 Jason Lowe
 Tony Lownds
 Ray Loyzaga

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list