mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	gh-110367: Make regrtest --verbose3 compatible with --huntrleaks -jN (#111577)
"./python -m test -j1 -R 3:3 --verbose3" now works as expected, since run_single_test() does not replace sys.stdout with StringIO in this case.
This commit is contained in:
		
							parent
							
								
									ef83b3fc00
								
							
						
					
					
						commit
						d9a5530d23
					
				
					 3 changed files with 34 additions and 2 deletions
				
			
		|  | @ -493,10 +493,16 @@ def _parse_args(args, **kwargs): | ||||||
|         ns.randomize = True |         ns.randomize = True | ||||||
|     if ns.verbose: |     if ns.verbose: | ||||||
|         ns.header = True |         ns.header = True | ||||||
|     if ns.huntrleaks and ns.verbose3: |     # When -jN option is used, a worker process does not use --verbose3 | ||||||
|  |     # and so -R 3:3 -jN --verbose3 just works as expected: there is no false | ||||||
|  |     # alarm about memory leak. | ||||||
|  |     if ns.huntrleaks and ns.verbose3 and ns.use_mp is None: | ||||||
|         ns.verbose3 = False |         ns.verbose3 = False | ||||||
|  |         # run_single_test() replaces sys.stdout with io.StringIO if verbose3 | ||||||
|  |         # is true. In this case, huntrleaks sees an write into StringIO as | ||||||
|  |         # a memory leak, whereas it is not (gh-71290). | ||||||
|         print("WARNING: Disable --verbose3 because it's incompatible with " |         print("WARNING: Disable --verbose3 because it's incompatible with " | ||||||
|               "--huntrleaks: see http://bugs.python.org/issue27103", |               "--huntrleaks without -jN option", | ||||||
|               file=sys.stderr) |               file=sys.stderr) | ||||||
|     if ns.forever: |     if ns.forever: | ||||||
|         # --forever implies --failfast |         # --forever implies --failfast | ||||||
|  |  | ||||||
|  | @ -2120,6 +2120,29 @@ def test_crash(self): | ||||||
|             self.assertIn(f"Exit code {exitcode} (SIGSEGV)", output) |             self.assertIn(f"Exit code {exitcode} (SIGSEGV)", output) | ||||||
|         self.check_line(output, "just before crash!", full=True, regex=False) |         self.check_line(output, "just before crash!", full=True, regex=False) | ||||||
| 
 | 
 | ||||||
|  |     def test_verbose3(self): | ||||||
|  |         code = textwrap.dedent(r""" | ||||||
|  |             import unittest | ||||||
|  |             from test import support | ||||||
|  | 
 | ||||||
|  |             class VerboseTests(unittest.TestCase): | ||||||
|  |                 def test_pass(self): | ||||||
|  |                     print("SPAM SPAM SPAM") | ||||||
|  |         """) | ||||||
|  |         testname = self.create_test(code=code) | ||||||
|  | 
 | ||||||
|  |         # Run sequentially | ||||||
|  |         output = self.run_tests("--verbose3", testname) | ||||||
|  |         self.check_executed_tests(output, testname, stats=1) | ||||||
|  |         self.assertNotIn('SPAM SPAM SPAM', output) | ||||||
|  | 
 | ||||||
|  |         # -R option needs a debug build | ||||||
|  |         if support.Py_DEBUG: | ||||||
|  |             # Check for reference leaks, run in parallel | ||||||
|  |             output = self.run_tests("-R", "3:3", "-j1", "--verbose3", testname) | ||||||
|  |             self.check_executed_tests(output, testname, stats=1, parallel=True) | ||||||
|  |             self.assertNotIn('SPAM SPAM SPAM', output) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class TestUtils(unittest.TestCase): | class TestUtils(unittest.TestCase): | ||||||
|     def test_format_duration(self): |     def test_format_duration(self): | ||||||
|  |  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | Make regrtest ``--verbose3`` option compatible with ``--huntrleaks -jN`` | ||||||
|  | options. The ``./python -m test -j1 -R 3:3 --verbose3`` command now works as | ||||||
|  | expected. Patch by Victor Stinner. | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner