mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
gh-87868: Sort and remove duplicates in getenvironment() (GH-102731)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> Co-authored-by: Pieter Eendebak <pieter.eendebak@gmail.com> Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
fda901a1ff
commit
c31be58da8
3 changed files with 194 additions and 4 deletions
|
@ -791,6 +791,19 @@ class ProcessTestCase(BaseTestCase):
|
|||
stdout, stderr = p.communicate()
|
||||
self.assertEqual(stdout, b"orange")
|
||||
|
||||
@unittest.skipUnless(sys.platform == "win32", "Windows only issue")
|
||||
def test_win32_duplicate_envs(self):
|
||||
newenv = os.environ.copy()
|
||||
newenv["fRUit"] = "cherry"
|
||||
newenv["fruit"] = "lemon"
|
||||
newenv["FRUIT"] = "orange"
|
||||
newenv["frUit"] = "banana"
|
||||
with subprocess.Popen(["CMD", "/c", "SET", "fruit"],
|
||||
stdout=subprocess.PIPE,
|
||||
env=newenv) as p:
|
||||
stdout, _ = p.communicate()
|
||||
self.assertEqual(stdout.strip(), b"frUit=banana")
|
||||
|
||||
# Windows requires at least the SYSTEMROOT environment variable to start
|
||||
# Python
|
||||
@unittest.skipIf(sys.platform == 'win32',
|
||||
|
@ -822,6 +835,17 @@ class ProcessTestCase(BaseTestCase):
|
|||
if not is_env_var_to_ignore(k)]
|
||||
self.assertEqual(child_env_names, [])
|
||||
|
||||
def test_one_environment_variable(self):
|
||||
newenv = {'fruit': 'orange'}
|
||||
cmd = [sys.executable, '-c',
|
||||
'import sys,os;'
|
||||
'sys.stdout.write("fruit="+os.getenv("fruit"))']
|
||||
if sys.platform == "win32":
|
||||
cmd = ["CMD", "/c", "SET", "fruit"]
|
||||
with subprocess.Popen(cmd, stdout=subprocess.PIPE, env=newenv) as p:
|
||||
stdout, _ = p.communicate()
|
||||
self.assertTrue(stdout.startswith(b"fruit=orange"))
|
||||
|
||||
def test_invalid_cmd(self):
|
||||
# null character in the command name
|
||||
cmd = sys.executable + '\0'
|
||||
|
@ -862,6 +886,19 @@ class ProcessTestCase(BaseTestCase):
|
|||
stdout, stderr = p.communicate()
|
||||
self.assertEqual(stdout, b"orange=lemon")
|
||||
|
||||
@unittest.skipUnless(sys.platform == "win32", "Windows only issue")
|
||||
def test_win32_invalid_env(self):
|
||||
# '=' in the environment variable name
|
||||
newenv = os.environ.copy()
|
||||
newenv["FRUIT=VEGETABLE"] = "cabbage"
|
||||
with self.assertRaises(ValueError):
|
||||
subprocess.Popen(ZERO_RETURN_CMD, env=newenv)
|
||||
|
||||
newenv = os.environ.copy()
|
||||
newenv["==FRUIT"] = "cabbage"
|
||||
with self.assertRaises(ValueError):
|
||||
subprocess.Popen(ZERO_RETURN_CMD, env=newenv)
|
||||
|
||||
def test_communicate_stdin(self):
|
||||
p = subprocess.Popen([sys.executable, "-c",
|
||||
'import sys;'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue