mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Adding tests for unittest command line handling of buffer, catchbreak and failfast.
This commit is contained in:
		
							parent
							
								
									215d394b82
								
							
						
					
					
						commit
						4fedbce55a
					
				
					 2 changed files with 206 additions and 0 deletions
				
			
		|  | @ -1,6 +1,7 @@ | ||||||
| from cStringIO import StringIO | from cStringIO import StringIO | ||||||
| 
 | 
 | ||||||
| import os | import os | ||||||
|  | import sys | ||||||
| import unittest | import unittest | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -91,5 +92,164 @@ def test_ExitAsDefault(self): | ||||||
|             testLoader=self.FooBarLoader()) |             testLoader=self.FooBarLoader()) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class InitialisableProgram(unittest.TestProgram): | ||||||
|  |     exit = False | ||||||
|  |     result = None | ||||||
|  |     verbosity = 1 | ||||||
|  |     defaultTest = None | ||||||
|  |     testRunner = None | ||||||
|  |     testLoader = unittest.defaultTestLoader | ||||||
|  |     progName = 'test' | ||||||
|  |     test = 'test' | ||||||
|  |     def __init__(self, *args): | ||||||
|  |         pass | ||||||
|  | 
 | ||||||
|  | RESULT = object() | ||||||
|  | 
 | ||||||
|  | class FakeRunner(object): | ||||||
|  |     initArgs = None | ||||||
|  |     test = None | ||||||
|  |     raiseError = False | ||||||
|  | 
 | ||||||
|  |     def __init__(self, **kwargs): | ||||||
|  |         FakeRunner.initArgs = kwargs | ||||||
|  |         if FakeRunner.raiseError: | ||||||
|  |             FakeRunner.raiseError = False | ||||||
|  |             raise TypeError | ||||||
|  | 
 | ||||||
|  |     def run(self, test): | ||||||
|  |         FakeRunner.test = test | ||||||
|  |         return RESULT | ||||||
|  | 
 | ||||||
|  | class TestCommandLineArgs(unittest.TestCase): | ||||||
|  | 
 | ||||||
|  |     def setUp(self): | ||||||
|  |         self.program = InitialisableProgram() | ||||||
|  |         self.program.createTests = lambda: None | ||||||
|  |         FakeRunner.initArgs = None | ||||||
|  |         FakeRunner.test = None | ||||||
|  |         FakeRunner.raiseError = False | ||||||
|  | 
 | ||||||
|  |     def testHelpAndUnknown(self): | ||||||
|  |         program = self.program | ||||||
|  |         def usageExit(msg=None): | ||||||
|  |             program.msg = msg | ||||||
|  |             program.exit = True | ||||||
|  |         program.usageExit = usageExit | ||||||
|  | 
 | ||||||
|  |         for opt in '-h', '-H', '--help': | ||||||
|  |             program.exit = False | ||||||
|  |             program.parseArgs([None, opt]) | ||||||
|  |             self.assertTrue(program.exit) | ||||||
|  |             self.assertIsNone(program.msg) | ||||||
|  | 
 | ||||||
|  |         program.parseArgs([None, '-$']) | ||||||
|  |         self.assertTrue(program.exit) | ||||||
|  |         self.assertIsNotNone(program.msg) | ||||||
|  | 
 | ||||||
|  |     def testVerbosity(self): | ||||||
|  |         program = self.program | ||||||
|  | 
 | ||||||
|  |         for opt in '-q', '--quiet': | ||||||
|  |             program.verbosity = 1 | ||||||
|  |             program.parseArgs([None, opt]) | ||||||
|  |             self.assertEqual(program.verbosity, 0) | ||||||
|  | 
 | ||||||
|  |         for opt in '-v', '--verbose': | ||||||
|  |             program.verbosity = 1 | ||||||
|  |             program.parseArgs([None, opt]) | ||||||
|  |             self.assertEqual(program.verbosity, 2) | ||||||
|  | 
 | ||||||
|  |     def testBufferCatchFailfast(self): | ||||||
|  |         program = self.program | ||||||
|  |         for arg, attr in (('buffer', 'buffer'), ('failfast', 'failfast'), | ||||||
|  |                       ('catch', 'catchbreak')): | ||||||
|  |             if attr == 'catch' and not hasInstallHandler: | ||||||
|  |                 continue | ||||||
|  | 
 | ||||||
|  |             short_opt = '-%s' % arg[0] | ||||||
|  |             long_opt = '--%s' % arg | ||||||
|  |             for opt in short_opt, long_opt: | ||||||
|  |                 setattr(program, attr, None) | ||||||
|  | 
 | ||||||
|  |                 program.parseArgs([None, opt]) | ||||||
|  |                 self.assertTrue(getattr(program, attr)) | ||||||
|  | 
 | ||||||
|  |             for opt in short_opt, long_opt: | ||||||
|  |                 not_none = object() | ||||||
|  |                 setattr(program, attr, not_none) | ||||||
|  | 
 | ||||||
|  |                 program.parseArgs([None, opt]) | ||||||
|  |                 self.assertEqual(getattr(program, attr), not_none) | ||||||
|  | 
 | ||||||
|  |     def testRunTestsRunnerClass(self): | ||||||
|  |         program = self.program | ||||||
|  | 
 | ||||||
|  |         program.testRunner = FakeRunner | ||||||
|  |         program.verbosity = 'verbosity' | ||||||
|  |         program.failfast = 'failfast' | ||||||
|  |         program.buffer = 'buffer' | ||||||
|  | 
 | ||||||
|  |         program.runTests() | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(FakeRunner.initArgs, {'verbosity': 'verbosity', | ||||||
|  |                                                 'failfast': 'failfast', | ||||||
|  |                                                 'buffer': 'buffer'}) | ||||||
|  |         self.assertEqual(FakeRunner.test, 'test') | ||||||
|  |         self.assertIs(program.result, RESULT) | ||||||
|  | 
 | ||||||
|  |     def testRunTestsRunnerInstance(self): | ||||||
|  |         program = self.program | ||||||
|  | 
 | ||||||
|  |         program.testRunner = FakeRunner() | ||||||
|  |         FakeRunner.initArgs = None | ||||||
|  | 
 | ||||||
|  |         program.runTests() | ||||||
|  | 
 | ||||||
|  |         # A new FakeRunner should not have been instantiated | ||||||
|  |         self.assertIsNone(FakeRunner.initArgs) | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(FakeRunner.test, 'test') | ||||||
|  |         self.assertIs(program.result, RESULT) | ||||||
|  | 
 | ||||||
|  |     def testRunTestsOldRunnerClass(self): | ||||||
|  |         program = self.program | ||||||
|  | 
 | ||||||
|  |         FakeRunner.raiseError = True | ||||||
|  |         program.testRunner = FakeRunner | ||||||
|  |         program.verbosity = 'verbosity' | ||||||
|  |         program.failfast = 'failfast' | ||||||
|  |         program.buffer = 'buffer' | ||||||
|  |         program.test = 'test' | ||||||
|  | 
 | ||||||
|  |         program.runTests() | ||||||
|  | 
 | ||||||
|  |         # If initialising raises a type error it should be retried | ||||||
|  |         # without the new keyword arguments | ||||||
|  |         self.assertEqual(FakeRunner.initArgs, {}) | ||||||
|  |         self.assertEqual(FakeRunner.test, 'test') | ||||||
|  |         self.assertIs(program.result, RESULT) | ||||||
|  | 
 | ||||||
|  |     def testCatchBreakInstallsHandler(self): | ||||||
|  |         module = sys.modules['unittest.main'] | ||||||
|  |         original = module.installHandler | ||||||
|  |         def restore(): | ||||||
|  |             module.installHandler = original | ||||||
|  |         self.addCleanup(restore) | ||||||
|  | 
 | ||||||
|  |         self.installed = False | ||||||
|  |         def fakeInstallHandler(): | ||||||
|  |             self.installed = True | ||||||
|  |         module.installHandler = fakeInstallHandler | ||||||
|  | 
 | ||||||
|  |         program = self.program | ||||||
|  |         program.catchbreak = True | ||||||
|  | 
 | ||||||
|  |         program.testRunner = FakeRunner | ||||||
|  | 
 | ||||||
|  |         program.runTests() | ||||||
|  |         self.assertTrue(self.installed) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|  |  | ||||||
|  | @ -115,6 +115,52 @@ def success(some_test): | ||||||
| class Test_TextTestRunner(unittest.TestCase): | class Test_TextTestRunner(unittest.TestCase): | ||||||
|     """Tests for TextTestRunner.""" |     """Tests for TextTestRunner.""" | ||||||
| 
 | 
 | ||||||
|  |     def test_init(self): | ||||||
|  |         runner = unittest.TextTestRunner() | ||||||
|  |         self.assertFalse(runner.failfast) | ||||||
|  |         self.assertFalse(runner.buffer) | ||||||
|  |         self.assertEqual(runner.verbosity, 1) | ||||||
|  |         self.assertTrue(runner.descriptions) | ||||||
|  |         self.assertEqual(runner.resultclass, unittest.TextTestResult) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def testBufferAndFailfast(self): | ||||||
|  |         class Test(unittest.TestCase): | ||||||
|  |             def testFoo(self): | ||||||
|  |                 pass | ||||||
|  |         result = unittest.TestResult() | ||||||
|  |         runner = unittest.TextTestRunner(stream=StringIO(), failfast=True, | ||||||
|  |                                            buffer=True) | ||||||
|  |         # Use our result object | ||||||
|  |         runner._makeResult = lambda: result | ||||||
|  |         runner.run(Test('testFoo')) | ||||||
|  | 
 | ||||||
|  |         self.assertTrue(result.failfast) | ||||||
|  |         self.assertTrue(result.buffer) | ||||||
|  | 
 | ||||||
|  |     def testRunnerRegistersResult(self): | ||||||
|  |         class Test(unittest.TestCase): | ||||||
|  |             def testFoo(self): | ||||||
|  |                 pass | ||||||
|  |         originalRegisterResult = unittest.runner.registerResult | ||||||
|  |         def cleanup(): | ||||||
|  |             unittest.runner.registerResult = originalRegisterResult | ||||||
|  |         self.addCleanup(cleanup) | ||||||
|  | 
 | ||||||
|  |         result = unittest.TestResult() | ||||||
|  |         runner = unittest.TextTestRunner(stream=StringIO()) | ||||||
|  |         # Use our result object | ||||||
|  |         runner._makeResult = lambda: result | ||||||
|  | 
 | ||||||
|  |         self.wasRegistered = 0 | ||||||
|  |         def fakeRegisterResult(thisResult): | ||||||
|  |             self.wasRegistered += 1 | ||||||
|  |             self.assertEqual(thisResult, result) | ||||||
|  |         unittest.runner.registerResult = fakeRegisterResult | ||||||
|  | 
 | ||||||
|  |         runner.run(unittest.TestSuite()) | ||||||
|  |         self.assertEqual(self.wasRegistered, 1) | ||||||
|  | 
 | ||||||
|     def test_works_with_result_without_startTestRun_stopTestRun(self): |     def test_works_with_result_without_startTestRun_stopTestRun(self): | ||||||
|         class OldTextResult(ResultWithNoStartTestRunStopTestRun): |         class OldTextResult(ResultWithNoStartTestRunStopTestRun): | ||||||
|             separator2 = '' |             separator2 = '' | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Michael Foord
						Michael Foord