mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +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
|
# Executing the interpreter in a subprocess
|
||||||
def _assert_python(expected_success, *args, **env_vars):
|
def _assert_python(expected_success, *args, **env_vars):
|
||||||
|
env_required = _interpreter_requires_environment()
|
||||||
if '__isolated' in env_vars:
|
if '__isolated' in env_vars:
|
||||||
isolated = env_vars.pop('__isolated')
|
isolated = env_vars.pop('__isolated')
|
||||||
else:
|
else:
|
||||||
isolated = not env_vars
|
isolated = not env_vars and not env_required
|
||||||
cmd_line = [sys.executable, '-X', 'faulthandler']
|
cmd_line = [sys.executable, '-X', 'faulthandler']
|
||||||
if isolated:
|
if isolated:
|
||||||
# isolated mode: ignore Python environment variables, ignore user
|
# isolated mode: ignore Python environment variables, ignore user
|
||||||
# site-packages, and don't add the current directory to sys.path
|
# site-packages, and don't add the current directory to sys.path
|
||||||
cmd_line.append('-I')
|
cmd_line.append('-I')
|
||||||
elif not env_vars:
|
elif not env_vars and not env_required:
|
||||||
# ignore Python environment variables
|
# ignore Python environment variables
|
||||||
cmd_line.append('-E')
|
cmd_line.append('-E')
|
||||||
# Need to preserve the original environment, for in-place testing of
|
# Need to preserve the original environment, for in-place testing of
|
||||||
|
|
|
@ -33,6 +33,39 @@ class TestScriptHelper(unittest.TestCase):
|
||||||
self.assertIn('import sys; sys.exit(0)', error_msg,
|
self.assertIn('import sys; sys.exit(0)', error_msg,
|
||||||
msg='unexpected command line.')
|
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):
|
class TestScriptHelperEnvironment(unittest.TestCase):
|
||||||
"""Code coverage for _interpreter_requires_environment()."""
|
"""Code coverage for _interpreter_requires_environment()."""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue