mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Make the stdlib test suite helper test.script_helper._assert_python no longer
pass -I or -E to the child process by default when the environment is required for the child process interpreter to function properly.
This commit is contained in:
		
							parent
							
								
									6a1b004b83
								
							
						
					
					
						commit
						c3493aa951
					
				
					 2 changed files with 36 additions and 2 deletions
				
			
		|  | @ -52,16 +52,17 @@ def _interpreter_requires_environment(): | |||
| 
 | ||||
| # Executing the interpreter in a subprocess | ||||
| def _assert_python(expected_success, *args, **env_vars): | ||||
|     env_required = _interpreter_requires_environment() | ||||
|     if '__isolated' in env_vars: | ||||
|         isolated = env_vars.pop('__isolated') | ||||
|     else: | ||||
|         isolated = not env_vars | ||||
|         isolated = not env_vars and not env_required | ||||
|     cmd_line = [sys.executable, '-X', 'faulthandler'] | ||||
|     if isolated: | ||||
|         # isolated mode: ignore Python environment variables, ignore user | ||||
|         # site-packages, and don't add the current directory to sys.path | ||||
|         cmd_line.append('-I') | ||||
|     elif not env_vars: | ||||
|     elif not env_vars and not env_required: | ||||
|         # ignore Python environment variables | ||||
|         cmd_line.append('-E') | ||||
|     # Need to preserve the original environment, for in-place testing of | ||||
|  |  | |||
|  | @ -33,6 +33,39 @@ def test_assert_python_raises_expect_failure(self): | |||
|         self.assertIn('import sys; sys.exit(0)', error_msg, | ||||
|                       msg='unexpected command line.') | ||||
| 
 | ||||
|     @mock.patch('subprocess.Popen') | ||||
|     def test_assert_python_isolated_when_env_not_required(self, mock_popen): | ||||
|         with mock.patch.object(script_helper, | ||||
|                                '_interpreter_requires_environment', | ||||
|                                return_value=False) as mock_ire_func: | ||||
|             mock_popen.side_effect = RuntimeError('bail out of unittest') | ||||
|             try: | ||||
|                 script_helper._assert_python(True, '-c', 'None') | ||||
|             except RuntimeError as err: | ||||
|                 self.assertEqual('bail out of unittest', err.args[0]) | ||||
|             self.assertEqual(1, mock_popen.call_count) | ||||
|             self.assertEqual(1, mock_ire_func.call_count) | ||||
|             popen_command = mock_popen.call_args[0][0] | ||||
|             self.assertEqual(sys.executable, popen_command[0]) | ||||
|             self.assertIn('None', popen_command) | ||||
|             self.assertIn('-I', popen_command) | ||||
|             self.assertNotIn('-E', popen_command)  # -I overrides this | ||||
| 
 | ||||
|     @mock.patch('subprocess.Popen') | ||||
|     def test_assert_python_not_isolated_when_env_is_required(self, mock_popen): | ||||
|         """Ensure that -I is not passed when the environment is required.""" | ||||
|         with mock.patch.object(script_helper, | ||||
|                                '_interpreter_requires_environment', | ||||
|                                return_value=True) as mock_ire_func: | ||||
|             mock_popen.side_effect = RuntimeError('bail out of unittest') | ||||
|             try: | ||||
|                 script_helper._assert_python(True, '-c', 'None') | ||||
|             except RuntimeError as err: | ||||
|                 self.assertEqual('bail out of unittest', err.args[0]) | ||||
|             popen_command = mock_popen.call_args[0][0] | ||||
|             self.assertNotIn('-I', popen_command) | ||||
|             self.assertNotIn('-E', popen_command) | ||||
| 
 | ||||
| 
 | ||||
| class TestScriptHelperEnvironment(unittest.TestCase): | ||||
|     """Code coverage for _interpreter_requires_environment().""" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gregory P. Smith
						Gregory P. Smith