| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2010-05-07 23:42:40 +00:00
										 |  |  | import re | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  | class TestableTestProgram(unittest.TestProgram): | 
					
						
							|  |  |  |     module = '__main__' | 
					
						
							|  |  |  |     exit = True | 
					
						
							|  |  |  |     defaultTest = failfast = catchbreak = buffer = None | 
					
						
							|  |  |  |     verbosity = 1 | 
					
						
							|  |  |  |     progName = '' | 
					
						
							|  |  |  |     testRunner = testLoader = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self): | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | class TestDiscovery(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Heavily mocked tests so I can avoid hitting the filesystem | 
					
						
							|  |  |  |     def test_get_name_from_path(self): | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  |         loader._top_level_dir = '/foo' | 
					
						
							|  |  |  |         name = loader._get_name_from_path('/foo/bar/baz.py') | 
					
						
							|  |  |  |         self.assertEqual(name, 'bar.baz') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if not __debug__: | 
					
						
							|  |  |  |             # asserts are off | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with self.assertRaises(AssertionError): | 
					
						
							|  |  |  |             loader._get_name_from_path('/bar/baz.py') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_find_tests(self): | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         original_listdir = os.listdir | 
					
						
							|  |  |  |         def restore_listdir(): | 
					
						
							|  |  |  |             os.listdir = original_listdir | 
					
						
							|  |  |  |         original_isfile = os.path.isfile | 
					
						
							|  |  |  |         def restore_isfile(): | 
					
						
							|  |  |  |             os.path.isfile = original_isfile | 
					
						
							|  |  |  |         original_isdir = os.path.isdir | 
					
						
							|  |  |  |         def restore_isdir(): | 
					
						
							|  |  |  |             os.path.isdir = original_isdir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         path_lists = [['test1.py', 'test2.py', 'not_a_test.py', 'test_dir', | 
					
						
							|  |  |  |                        'test.foo', 'test-not-a-module.py', 'another_dir'], | 
					
						
							|  |  |  |                       ['test3.py', 'test4.py', ]] | 
					
						
							|  |  |  |         os.listdir = lambda path: path_lists.pop(0) | 
					
						
							|  |  |  |         self.addCleanup(restore_listdir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def isdir(path): | 
					
						
							|  |  |  |             return path.endswith('dir') | 
					
						
							|  |  |  |         os.path.isdir = isdir | 
					
						
							|  |  |  |         self.addCleanup(restore_isdir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def isfile(path): | 
					
						
							|  |  |  |             # another_dir is not a package and so shouldn't be recursed into | 
					
						
							|  |  |  |             return not path.endswith('dir') and not 'another_dir' in path | 
					
						
							|  |  |  |         os.path.isfile = isfile | 
					
						
							|  |  |  |         self.addCleanup(restore_isfile) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         loader._get_module_from_name = lambda path: path + ' module' | 
					
						
							|  |  |  |         loader.loadTestsFromModule = lambda module: module + ' tests' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-07 23:42:40 +00:00
										 |  |  |         top_level = os.path.abspath('/foo') | 
					
						
							|  |  |  |         loader._top_level_dir = top_level | 
					
						
							|  |  |  |         suite = list(loader._find_tests(top_level, 'test*.py')) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         expected = [name + ' module tests' for name in | 
					
						
							|  |  |  |                     ('test1', 'test2')] | 
					
						
							|  |  |  |         expected.extend([('test_dir.%s' % name) + ' module tests' for name in | 
					
						
							|  |  |  |                     ('test3', 'test4')]) | 
					
						
							|  |  |  |         self.assertEqual(suite, expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_find_tests_with_package(self): | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         original_listdir = os.listdir | 
					
						
							|  |  |  |         def restore_listdir(): | 
					
						
							|  |  |  |             os.listdir = original_listdir | 
					
						
							|  |  |  |         original_isfile = os.path.isfile | 
					
						
							|  |  |  |         def restore_isfile(): | 
					
						
							|  |  |  |             os.path.isfile = original_isfile | 
					
						
							|  |  |  |         original_isdir = os.path.isdir | 
					
						
							|  |  |  |         def restore_isdir(): | 
					
						
							|  |  |  |             os.path.isdir = original_isdir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         directories = ['a_directory', 'test_directory', 'test_directory2'] | 
					
						
							|  |  |  |         path_lists = [directories, [], [], []] | 
					
						
							|  |  |  |         os.listdir = lambda path: path_lists.pop(0) | 
					
						
							|  |  |  |         self.addCleanup(restore_listdir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         os.path.isdir = lambda path: True | 
					
						
							|  |  |  |         self.addCleanup(restore_isdir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         os.path.isfile = lambda path: os.path.basename(path) not in directories | 
					
						
							|  |  |  |         self.addCleanup(restore_isfile) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         class Module(object): | 
					
						
							|  |  |  |             paths = [] | 
					
						
							|  |  |  |             load_tests_args = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def __init__(self, path): | 
					
						
							|  |  |  |                 self.path = path | 
					
						
							|  |  |  |                 self.paths.append(path) | 
					
						
							|  |  |  |                 if os.path.basename(path) == 'test_directory': | 
					
						
							|  |  |  |                     def load_tests(loader, tests, pattern): | 
					
						
							|  |  |  |                         self.load_tests_args.append((loader, tests, pattern)) | 
					
						
							|  |  |  |                         return 'load_tests' | 
					
						
							|  |  |  |                     self.load_tests = load_tests | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             def __eq__(self, other): | 
					
						
							|  |  |  |                 return self.path == other.path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         loader._get_module_from_name = lambda name: Module(name) | 
					
						
							|  |  |  |         def loadTestsFromModule(module, use_load_tests): | 
					
						
							|  |  |  |             if use_load_tests: | 
					
						
							|  |  |  |                 raise self.failureException('use_load_tests should be False for packages') | 
					
						
							|  |  |  |             return module.path + ' module tests' | 
					
						
							|  |  |  |         loader.loadTestsFromModule = loadTestsFromModule | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         loader._top_level_dir = '/foo' | 
					
						
							|  |  |  |         # this time no '.py' on the pattern so that it can match | 
					
						
							|  |  |  |         # a test package | 
					
						
							|  |  |  |         suite = list(loader._find_tests('/foo', 'test*')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # We should have loaded tests from the test_directory package by calling load_tests | 
					
						
							|  |  |  |         # and directly from the test_directory2 package | 
					
						
							|  |  |  |         self.assertEqual(suite, | 
					
						
							|  |  |  |                          ['load_tests', 'test_directory2' + ' module tests']) | 
					
						
							|  |  |  |         self.assertEqual(Module.paths, ['test_directory', 'test_directory2']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # load_tests should have been called once with loader, tests and pattern | 
					
						
							|  |  |  |         self.assertEqual(Module.load_tests_args, | 
					
						
							|  |  |  |                          [(loader, 'test_directory' + ' module tests', 'test*')]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_discover(self): | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         original_isfile = os.path.isfile | 
					
						
							| 
									
										
											  
											
												Merged revisions 79464,79471,79623,79626,79630,79632,79643,79648-79649,79679,79685,79711,79761,79774,79777,79792-79794,79877,79898-79900 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r79464 | michael.foord | 2010-03-27 07:55:19 -0500 (Sat, 27 Mar 2010) | 1 line
  A fix for running unittest tests on platforms without the audioop module (e.g. jython and IronPython)
........
  r79471 | michael.foord | 2010-03-27 14:10:11 -0500 (Sat, 27 Mar 2010) | 4 lines
  Addition of delta keyword argument to unittest.TestCase.assertAlmostEquals and assertNotAlmostEquals
  This allows the comparison of objects by specifying a maximum difference; this includes the comparing of non-numeric objects that don't support rounding.
........
  r79623 | michael.foord | 2010-04-02 16:42:47 -0500 (Fri, 02 Apr 2010) | 1 line
  Addition of -b command line option to unittest for buffering stdout and stderr during test runs.
........
  r79626 | michael.foord | 2010-04-02 17:08:29 -0500 (Fri, 02 Apr 2010) | 1 line
  TestResult stores original sys.stdout and tests no longer use sys.__stdout__ (etc) in tests for unittest -b command line option
........
  r79630 | michael.foord | 2010-04-02 17:30:56 -0500 (Fri, 02 Apr 2010) | 1 line
  unittest tests no longer replace the sys.stdout put in place by regrtest
........
  r79632 | michael.foord | 2010-04-02 17:55:59 -0500 (Fri, 02 Apr 2010) | 1 line
  Issue #8038: Addition of unittest.TestCase.assertNotRegexpMatches
........
  r79643 | michael.foord | 2010-04-02 20:15:21 -0500 (Fri, 02 Apr 2010) | 1 line
  Support dotted module names for test discovery paths in unittest. Issue 8038.
........
  r79648 | michael.foord | 2010-04-02 21:21:39 -0500 (Fri, 02 Apr 2010) | 1 line
  Cross platform unittest.TestResult newline handling when buffering stdout / stderr.
........
  r79649 | michael.foord | 2010-04-02 21:33:55 -0500 (Fri, 02 Apr 2010) | 1 line
  Another attempt at a fix for unittest.test.test_result for windows line endings
........
  r79679 | michael.foord | 2010-04-03 09:52:18 -0500 (Sat, 03 Apr 2010) | 1 line
  Adding -b command line option to the unittest usage message.
........
  r79685 | michael.foord | 2010-04-03 10:20:00 -0500 (Sat, 03 Apr 2010) | 1 line
  Minor tweak to unittest command line usage message
........
  r79711 | michael.foord | 2010-04-03 12:03:11 -0500 (Sat, 03 Apr 2010) | 1 line
  Documenting new features in unittest
........
  r79761 | michael.foord | 2010-04-04 17:41:54 -0500 (Sun, 04 Apr 2010) | 1 line
  unittest documentation formatting changes
........
  r79774 | michael.foord | 2010-04-04 18:28:44 -0500 (Sun, 04 Apr 2010) | 1 line
  Adding documentation for new unittest.main() parameters
........
  r79777 | michael.foord | 2010-04-04 19:39:50 -0500 (Sun, 04 Apr 2010) | 1 line
  Document signal handling functions in unittest.rst
........
  r79792 | michael.foord | 2010-04-05 05:26:26 -0500 (Mon, 05 Apr 2010) | 1 line
  Documentation fixes for unittest
........
  r79793 | michael.foord | 2010-04-05 05:28:27 -0500 (Mon, 05 Apr 2010) | 1 line
  Furterh documentation fix for unittest.rst
........
  r79794 | michael.foord | 2010-04-05 05:30:14 -0500 (Mon, 05 Apr 2010) | 1 line
  Further documentation fix for unittest.rst
........
  r79877 | michael.foord | 2010-04-06 18:18:16 -0500 (Tue, 06 Apr 2010) | 1 line
  Fix module directory finding logic for dotted paths in unittest test discovery.
........
  r79898 | michael.foord | 2010-04-07 18:04:22 -0500 (Wed, 07 Apr 2010) | 1 line
  unittest.result.TestResult does not create its buffers until they're used. It uses StringIO not cStringIO. Issue 8333.
........
  r79899 | michael.foord | 2010-04-07 19:04:24 -0500 (Wed, 07 Apr 2010) | 1 line
  Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
........
  r79900 | michael.foord | 2010-04-07 23:33:20 -0500 (Wed, 07 Apr 2010) | 1 line
  Correction of unittest documentation typos and omissions
........
											
										 
											2010-04-11 20:43:16 +00:00
										 |  |  |         original_isdir = os.path.isdir | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         def restore_isfile(): | 
					
						
							|  |  |  |             os.path.isfile = original_isfile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         os.path.isfile = lambda path: False | 
					
						
							|  |  |  |         self.addCleanup(restore_isfile) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         orig_sys_path = sys.path[:] | 
					
						
							|  |  |  |         def restore_path(): | 
					
						
							|  |  |  |             sys.path[:] = orig_sys_path | 
					
						
							|  |  |  |         self.addCleanup(restore_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         full_path = os.path.abspath(os.path.normpath('/foo')) | 
					
						
							|  |  |  |         with self.assertRaises(ImportError): | 
					
						
							|  |  |  |             loader.discover('/foo/bar', top_level_dir='/foo') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(loader._top_level_dir, full_path) | 
					
						
							|  |  |  |         self.assertIn(full_path, sys.path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         os.path.isfile = lambda path: True | 
					
						
							| 
									
										
											  
											
												Merged revisions 79464,79471,79623,79626,79630,79632,79643,79648-79649,79679,79685,79711,79761,79774,79777,79792-79794,79877,79898-79900 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r79464 | michael.foord | 2010-03-27 07:55:19 -0500 (Sat, 27 Mar 2010) | 1 line
  A fix for running unittest tests on platforms without the audioop module (e.g. jython and IronPython)
........
  r79471 | michael.foord | 2010-03-27 14:10:11 -0500 (Sat, 27 Mar 2010) | 4 lines
  Addition of delta keyword argument to unittest.TestCase.assertAlmostEquals and assertNotAlmostEquals
  This allows the comparison of objects by specifying a maximum difference; this includes the comparing of non-numeric objects that don't support rounding.
........
  r79623 | michael.foord | 2010-04-02 16:42:47 -0500 (Fri, 02 Apr 2010) | 1 line
  Addition of -b command line option to unittest for buffering stdout and stderr during test runs.
........
  r79626 | michael.foord | 2010-04-02 17:08:29 -0500 (Fri, 02 Apr 2010) | 1 line
  TestResult stores original sys.stdout and tests no longer use sys.__stdout__ (etc) in tests for unittest -b command line option
........
  r79630 | michael.foord | 2010-04-02 17:30:56 -0500 (Fri, 02 Apr 2010) | 1 line
  unittest tests no longer replace the sys.stdout put in place by regrtest
........
  r79632 | michael.foord | 2010-04-02 17:55:59 -0500 (Fri, 02 Apr 2010) | 1 line
  Issue #8038: Addition of unittest.TestCase.assertNotRegexpMatches
........
  r79643 | michael.foord | 2010-04-02 20:15:21 -0500 (Fri, 02 Apr 2010) | 1 line
  Support dotted module names for test discovery paths in unittest. Issue 8038.
........
  r79648 | michael.foord | 2010-04-02 21:21:39 -0500 (Fri, 02 Apr 2010) | 1 line
  Cross platform unittest.TestResult newline handling when buffering stdout / stderr.
........
  r79649 | michael.foord | 2010-04-02 21:33:55 -0500 (Fri, 02 Apr 2010) | 1 line
  Another attempt at a fix for unittest.test.test_result for windows line endings
........
  r79679 | michael.foord | 2010-04-03 09:52:18 -0500 (Sat, 03 Apr 2010) | 1 line
  Adding -b command line option to the unittest usage message.
........
  r79685 | michael.foord | 2010-04-03 10:20:00 -0500 (Sat, 03 Apr 2010) | 1 line
  Minor tweak to unittest command line usage message
........
  r79711 | michael.foord | 2010-04-03 12:03:11 -0500 (Sat, 03 Apr 2010) | 1 line
  Documenting new features in unittest
........
  r79761 | michael.foord | 2010-04-04 17:41:54 -0500 (Sun, 04 Apr 2010) | 1 line
  unittest documentation formatting changes
........
  r79774 | michael.foord | 2010-04-04 18:28:44 -0500 (Sun, 04 Apr 2010) | 1 line
  Adding documentation for new unittest.main() parameters
........
  r79777 | michael.foord | 2010-04-04 19:39:50 -0500 (Sun, 04 Apr 2010) | 1 line
  Document signal handling functions in unittest.rst
........
  r79792 | michael.foord | 2010-04-05 05:26:26 -0500 (Mon, 05 Apr 2010) | 1 line
  Documentation fixes for unittest
........
  r79793 | michael.foord | 2010-04-05 05:28:27 -0500 (Mon, 05 Apr 2010) | 1 line
  Furterh documentation fix for unittest.rst
........
  r79794 | michael.foord | 2010-04-05 05:30:14 -0500 (Mon, 05 Apr 2010) | 1 line
  Further documentation fix for unittest.rst
........
  r79877 | michael.foord | 2010-04-06 18:18:16 -0500 (Tue, 06 Apr 2010) | 1 line
  Fix module directory finding logic for dotted paths in unittest test discovery.
........
  r79898 | michael.foord | 2010-04-07 18:04:22 -0500 (Wed, 07 Apr 2010) | 1 line
  unittest.result.TestResult does not create its buffers until they're used. It uses StringIO not cStringIO. Issue 8333.
........
  r79899 | michael.foord | 2010-04-07 19:04:24 -0500 (Wed, 07 Apr 2010) | 1 line
  Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
........
  r79900 | michael.foord | 2010-04-07 23:33:20 -0500 (Wed, 07 Apr 2010) | 1 line
  Correction of unittest documentation typos and omissions
........
											
										 
											2010-04-11 20:43:16 +00:00
										 |  |  |         os.path.isdir = lambda path: True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def restore_isdir(): | 
					
						
							|  |  |  |             os.path.isdir = original_isdir | 
					
						
							|  |  |  |         self.addCleanup(restore_isdir) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         _find_tests_args = [] | 
					
						
							|  |  |  |         def _find_tests(start_dir, pattern): | 
					
						
							|  |  |  |             _find_tests_args.append((start_dir, pattern)) | 
					
						
							|  |  |  |             return ['tests'] | 
					
						
							|  |  |  |         loader._find_tests = _find_tests | 
					
						
							|  |  |  |         loader.suiteClass = str | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         suite = loader.discover('/foo/bar/baz', 'pattern', '/foo/bar') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 79464,79471,79623,79626,79630,79632,79643,79648-79649,79679,79685,79711,79761,79774,79777,79792-79794,79877,79898-79900 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r79464 | michael.foord | 2010-03-27 07:55:19 -0500 (Sat, 27 Mar 2010) | 1 line
  A fix for running unittest tests on platforms without the audioop module (e.g. jython and IronPython)
........
  r79471 | michael.foord | 2010-03-27 14:10:11 -0500 (Sat, 27 Mar 2010) | 4 lines
  Addition of delta keyword argument to unittest.TestCase.assertAlmostEquals and assertNotAlmostEquals
  This allows the comparison of objects by specifying a maximum difference; this includes the comparing of non-numeric objects that don't support rounding.
........
  r79623 | michael.foord | 2010-04-02 16:42:47 -0500 (Fri, 02 Apr 2010) | 1 line
  Addition of -b command line option to unittest for buffering stdout and stderr during test runs.
........
  r79626 | michael.foord | 2010-04-02 17:08:29 -0500 (Fri, 02 Apr 2010) | 1 line
  TestResult stores original sys.stdout and tests no longer use sys.__stdout__ (etc) in tests for unittest -b command line option
........
  r79630 | michael.foord | 2010-04-02 17:30:56 -0500 (Fri, 02 Apr 2010) | 1 line
  unittest tests no longer replace the sys.stdout put in place by regrtest
........
  r79632 | michael.foord | 2010-04-02 17:55:59 -0500 (Fri, 02 Apr 2010) | 1 line
  Issue #8038: Addition of unittest.TestCase.assertNotRegexpMatches
........
  r79643 | michael.foord | 2010-04-02 20:15:21 -0500 (Fri, 02 Apr 2010) | 1 line
  Support dotted module names for test discovery paths in unittest. Issue 8038.
........
  r79648 | michael.foord | 2010-04-02 21:21:39 -0500 (Fri, 02 Apr 2010) | 1 line
  Cross platform unittest.TestResult newline handling when buffering stdout / stderr.
........
  r79649 | michael.foord | 2010-04-02 21:33:55 -0500 (Fri, 02 Apr 2010) | 1 line
  Another attempt at a fix for unittest.test.test_result for windows line endings
........
  r79679 | michael.foord | 2010-04-03 09:52:18 -0500 (Sat, 03 Apr 2010) | 1 line
  Adding -b command line option to the unittest usage message.
........
  r79685 | michael.foord | 2010-04-03 10:20:00 -0500 (Sat, 03 Apr 2010) | 1 line
  Minor tweak to unittest command line usage message
........
  r79711 | michael.foord | 2010-04-03 12:03:11 -0500 (Sat, 03 Apr 2010) | 1 line
  Documenting new features in unittest
........
  r79761 | michael.foord | 2010-04-04 17:41:54 -0500 (Sun, 04 Apr 2010) | 1 line
  unittest documentation formatting changes
........
  r79774 | michael.foord | 2010-04-04 18:28:44 -0500 (Sun, 04 Apr 2010) | 1 line
  Adding documentation for new unittest.main() parameters
........
  r79777 | michael.foord | 2010-04-04 19:39:50 -0500 (Sun, 04 Apr 2010) | 1 line
  Document signal handling functions in unittest.rst
........
  r79792 | michael.foord | 2010-04-05 05:26:26 -0500 (Mon, 05 Apr 2010) | 1 line
  Documentation fixes for unittest
........
  r79793 | michael.foord | 2010-04-05 05:28:27 -0500 (Mon, 05 Apr 2010) | 1 line
  Furterh documentation fix for unittest.rst
........
  r79794 | michael.foord | 2010-04-05 05:30:14 -0500 (Mon, 05 Apr 2010) | 1 line
  Further documentation fix for unittest.rst
........
  r79877 | michael.foord | 2010-04-06 18:18:16 -0500 (Tue, 06 Apr 2010) | 1 line
  Fix module directory finding logic for dotted paths in unittest test discovery.
........
  r79898 | michael.foord | 2010-04-07 18:04:22 -0500 (Wed, 07 Apr 2010) | 1 line
  unittest.result.TestResult does not create its buffers until they're used. It uses StringIO not cStringIO. Issue 8333.
........
  r79899 | michael.foord | 2010-04-07 19:04:24 -0500 (Wed, 07 Apr 2010) | 1 line
  Switch regrtest to use StringIO instead of cStringIO for test_multiprocessing on Windows. Issue 8333.
........
  r79900 | michael.foord | 2010-04-07 23:33:20 -0500 (Wed, 07 Apr 2010) | 1 line
  Correction of unittest documentation typos and omissions
........
											
										 
											2010-04-11 20:43:16 +00:00
										 |  |  |         top_level_dir = os.path.abspath('/foo/bar') | 
					
						
							|  |  |  |         start_dir = os.path.abspath('/foo/bar/baz') | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(suite, "['tests']") | 
					
						
							|  |  |  |         self.assertEqual(loader._top_level_dir, top_level_dir) | 
					
						
							|  |  |  |         self.assertEqual(_find_tests_args, [(start_dir, 'pattern')]) | 
					
						
							|  |  |  |         self.assertIn(top_level_dir, sys.path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_discover_with_modules_that_fail_to_import(self): | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         listdir = os.listdir | 
					
						
							|  |  |  |         os.listdir = lambda _: ['test_this_does_not_exist.py'] | 
					
						
							|  |  |  |         isfile = os.path.isfile | 
					
						
							|  |  |  |         os.path.isfile = lambda _: True | 
					
						
							|  |  |  |         orig_sys_path = sys.path[:] | 
					
						
							|  |  |  |         def restore(): | 
					
						
							|  |  |  |             os.path.isfile = isfile | 
					
						
							|  |  |  |             os.listdir = listdir | 
					
						
							|  |  |  |             sys.path[:] = orig_sys_path | 
					
						
							|  |  |  |         self.addCleanup(restore) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         suite = loader.discover('.') | 
					
						
							|  |  |  |         self.assertIn(os.getcwd(), sys.path) | 
					
						
							|  |  |  |         self.assertEqual(suite.countTestCases(), 1) | 
					
						
							|  |  |  |         test = list(list(suite)[0])[0] # extract test from suite | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with self.assertRaises(ImportError): | 
					
						
							|  |  |  |             test.test_this_does_not_exist() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_command_line_handling_parseArgs(self): | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         args = [] | 
					
						
							|  |  |  |         def do_discovery(argv): | 
					
						
							|  |  |  |             args.extend(argv) | 
					
						
							|  |  |  |         program._do_discovery = do_discovery | 
					
						
							|  |  |  |         program.parseArgs(['something', 'discover']) | 
					
						
							|  |  |  |         self.assertEqual(args, []) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         program.parseArgs(['something', 'discover', 'foo', 'bar']) | 
					
						
							|  |  |  |         self.assertEqual(args, ['foo', 'bar']) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |     def test_command_line_handling_discover_by_default(self): | 
					
						
							|  |  |  |         program = TestableTestProgram() | 
					
						
							|  |  |  |         program.module = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-22 10:41:27 +00:00
										 |  |  |         self.called = False | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         def do_discovery(argv): | 
					
						
							| 
									
										
										
										
											2010-11-22 10:41:27 +00:00
										 |  |  |             self.called = True | 
					
						
							|  |  |  |             self.assertEqual(argv, []) | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program._do_discovery = do_discovery | 
					
						
							|  |  |  |         program.parseArgs(['something']) | 
					
						
							| 
									
										
										
										
											2010-11-22 10:41:27 +00:00
										 |  |  |         self.assertTrue(self.called) | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-19 03:59:10 +00:00
										 |  |  |     def test_command_line_handling_discover_by_default_with_options(self): | 
					
						
							|  |  |  |         program = TestableTestProgram() | 
					
						
							|  |  |  |         program.module = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         args = ['something', '-v', '-b', '-v', '-c', '-f'] | 
					
						
							|  |  |  |         self.called = False | 
					
						
							|  |  |  |         def do_discovery(argv): | 
					
						
							|  |  |  |             self.called = True | 
					
						
							|  |  |  |             self.assertEqual(argv, args[1:]) | 
					
						
							|  |  |  |         program._do_discovery = do_discovery | 
					
						
							|  |  |  |         program.parseArgs(args) | 
					
						
							|  |  |  |         self.assertTrue(self.called) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |     def test_command_line_handling_do_discovery_too_many_arguments(self): | 
					
						
							|  |  |  |         class Stop(Exception): | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         def usageExit(): | 
					
						
							|  |  |  |             raise Stop | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program.usageExit = usageExit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with self.assertRaises(Stop): | 
					
						
							|  |  |  |             # too many args | 
					
						
							|  |  |  |             program._do_discovery(['one', 'two', 'three', 'four']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_command_line_handling_do_discovery_calls_loader(self): | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         class Loader(object): | 
					
						
							|  |  |  |             args = [] | 
					
						
							|  |  |  |             def discover(self, start_dir, pattern, top_level_dir): | 
					
						
							|  |  |  |                 self.args.append((start_dir, pattern, top_level_dir)) | 
					
						
							|  |  |  |                 return 'tests' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         program._do_discovery(['-v'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.verbosity, 2) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('.', 'test*.py', None)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['--verbose'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('.', 'test*.py', None)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery([], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('.', 'test*.py', None)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['fish'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('fish', 'test*.py', None)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['fish', 'eggs'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('fish', 'eggs', None)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['fish', 'eggs', 'ham'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('fish', 'eggs', 'ham')]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['-s', 'fish'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('fish', 'test*.py', None)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['-t', 'fish'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('.', 'test*.py', 'fish')]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         program._do_discovery(['-p', 'fish'], Loader=Loader) | 
					
						
							|  |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('.', 'fish', None)]) | 
					
						
							|  |  |  |         self.assertFalse(program.failfast) | 
					
						
							| 
									
										
										
										
											2010-03-27 13:25:41 +00:00
										 |  |  |         self.assertFalse(program.catchbreak) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         Loader.args = [] | 
					
						
							| 
									
										
										
										
											2010-11-21 21:28:01 +00:00
										 |  |  |         program = TestableTestProgram() | 
					
						
							| 
									
										
										
										
											2010-03-27 13:25:41 +00:00
										 |  |  |         program._do_discovery(['-p', 'eggs', '-s', 'fish', '-v', '-f', '-c'], | 
					
						
							|  |  |  |                               Loader=Loader) | 
					
						
							| 
									
										
										
										
											2010-03-27 12:34:21 +00:00
										 |  |  |         self.assertEqual(program.test, 'tests') | 
					
						
							|  |  |  |         self.assertEqual(Loader.args, [('fish', 'eggs', None)]) | 
					
						
							|  |  |  |         self.assertEqual(program.verbosity, 2) | 
					
						
							|  |  |  |         self.assertTrue(program.failfast) | 
					
						
							| 
									
										
										
										
											2010-03-27 13:25:41 +00:00
										 |  |  |         self.assertTrue(program.catchbreak) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-07 23:42:40 +00:00
										 |  |  |     def test_detect_module_clash(self): | 
					
						
							|  |  |  |         class Module(object): | 
					
						
							|  |  |  |             __file__ = 'bar/foo.py' | 
					
						
							|  |  |  |         sys.modules['foo'] = Module | 
					
						
							|  |  |  |         full_path = os.path.abspath('foo') | 
					
						
							|  |  |  |         original_listdir = os.listdir | 
					
						
							|  |  |  |         original_isfile = os.path.isfile | 
					
						
							|  |  |  |         original_isdir = os.path.isdir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def cleanup(): | 
					
						
							|  |  |  |             os.listdir = original_listdir | 
					
						
							|  |  |  |             os.path.isfile = original_isfile | 
					
						
							|  |  |  |             os.path.isdir = original_isdir | 
					
						
							|  |  |  |             del sys.modules['foo'] | 
					
						
							|  |  |  |             if full_path in sys.path: | 
					
						
							|  |  |  |                 sys.path.remove(full_path) | 
					
						
							|  |  |  |         self.addCleanup(cleanup) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def listdir(_): | 
					
						
							|  |  |  |             return ['foo.py'] | 
					
						
							|  |  |  |         def isfile(_): | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |         def isdir(_): | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  |         os.listdir = listdir | 
					
						
							|  |  |  |         os.path.isfile = isfile | 
					
						
							|  |  |  |         os.path.isdir = isdir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         mod_dir = os.path.abspath('bar') | 
					
						
							|  |  |  |         expected_dir = os.path.abspath('foo') | 
					
						
							|  |  |  |         msg = re.escape(r"'foo' module incorrectly imported from %r. Expected %r. " | 
					
						
							|  |  |  |                 "Is this module globally installed?" % (mod_dir, expected_dir)) | 
					
						
							| 
									
										
										
										
											2010-12-01 02:32:32 +00:00
										 |  |  |         self.assertRaisesRegex( | 
					
						
							| 
									
										
										
										
											2010-05-07 23:42:40 +00:00
										 |  |  |             ImportError, '^%s$' % msg, loader.discover, | 
					
						
							|  |  |  |             start_dir='foo', pattern='foo.py' | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         self.assertEqual(sys.path[0], full_path) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 13:25:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-08 13:23:31 +00:00
										 |  |  |     def test_discovery_from_dotted_path(self): | 
					
						
							|  |  |  |         loader = unittest.TestLoader() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         tests = [self] | 
					
						
							|  |  |  |         expectedPath = os.path.abspath(os.path.dirname(unittest.test.__file__)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.wasRun = False | 
					
						
							|  |  |  |         def _find_tests(start_dir, pattern): | 
					
						
							|  |  |  |             self.wasRun = True | 
					
						
							|  |  |  |             self.assertEqual(start_dir, expectedPath) | 
					
						
							|  |  |  |             return tests | 
					
						
							|  |  |  |         loader._find_tests = _find_tests | 
					
						
							|  |  |  |         suite = loader.discover('unittest.test') | 
					
						
							|  |  |  |         self.assertTrue(self.wasRun) | 
					
						
							|  |  |  |         self.assertEqual(suite._tests, tests) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-27 13:25:41 +00:00
										 |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main() |