bpo-36144: Update os.environ and os.environb for PEP 584 (#18911) · python/cpython@d648ef1 (original) (raw)

`@@ -1026,6 +1026,96 @@ def test_iter_error_when_changing_os_environ_items(self):

`

1026

1026

`def test_iter_error_when_changing_os_environ_values(self):

`

1027

1027

`self._test_environ_iteration(os.environ.values())

`

1028

1028

``

``

1029

`+

def _test_underlying_process_env(self, var, expected):

`

``

1030

`+

if not (unix_shell and os.path.exists(unix_shell)):

`

``

1031

`+

return

`

``

1032

+

``

1033

`+

with os.popen(f"{unix_shell} -c 'echo ${var}'") as popen:

`

``

1034

`+

value = popen.read().strip()

`

``

1035

+

``

1036

`+

self.assertEqual(expected, value)

`

``

1037

+

``

1038

`+

def test_or_operator(self):

`

``

1039

`+

overridden_key = 'TEST_VAR'

`

``

1040

`+

original_value = 'original_value'

`

``

1041

`+

os.environ[overridden_key] = original_value

`

``

1042

+

``

1043

`+

new_vars_dict = {'A': '1', 'B': '2', overridden_key: '3'}

`

``

1044

`+

expected = dict(os.environ)

`

``

1045

`+

expected.update(new_vars_dict)

`

``

1046

+

``

1047

`+

actual = os.environ | new_vars_dict

`

``

1048

`+

self.assertDictEqual(expected, actual)

`

``

1049

`+

self.assertEqual('3', actual[overridden_key])

`

``

1050

+

``

1051

`+

new_vars_items = new_vars_dict.items()

`

``

1052

`+

self.assertIs(NotImplemented, os.environ.or(new_vars_items))

`

``

1053

+

``

1054

`+

self._test_underlying_process_env('A', '')

`

``

1055

`+

self._test_underlying_process_env(overridden_key, original_value)

`

``

1056

+

``

1057

`+

def test_ior_operator(self):

`

``

1058

`+

overridden_key = 'TEST_VAR'

`

``

1059

`+

os.environ[overridden_key] = 'original_value'

`

``

1060

+

``

1061

`+

new_vars_dict = {'A': '1', 'B': '2', overridden_key: '3'}

`

``

1062

`+

expected = dict(os.environ)

`

``

1063

`+

expected.update(new_vars_dict)

`

``

1064

+

``

1065

`+

os.environ |= new_vars_dict

`

``

1066

`+

self.assertEqual(expected, os.environ)

`

``

1067

`+

self.assertEqual('3', os.environ[overridden_key])

`

``

1068

+

``

1069

`+

self._test_underlying_process_env('A', '1')

`

``

1070

`+

self._test_underlying_process_env(overridden_key, '3')

`

``

1071

+

``

1072

`+

def test_ior_operator_invalid_dicts(self):

`

``

1073

`+

os_environ_copy = os.environ.copy()

`

``

1074

`+

with self.assertRaises(TypeError):

`

``

1075

`+

dict_with_bad_key = {1: 'A'}

`

``

1076

`+

os.environ |= dict_with_bad_key

`

``

1077

+

``

1078

`+

with self.assertRaises(TypeError):

`

``

1079

`+

dict_with_bad_val = {'A': 1}

`

``

1080

`+

os.environ |= dict_with_bad_val

`

``

1081

+

``

1082

`+

Check nothing was added.

`

``

1083

`+

self.assertEqual(os_environ_copy, os.environ)

`

``

1084

+

``

1085

`+

def test_ior_operator_key_value_iterable(self):

`

``

1086

`+

overridden_key = 'TEST_VAR'

`

``

1087

`+

os.environ[overridden_key] = 'original_value'

`

``

1088

+

``

1089

`+

new_vars_items = (('A', '1'), ('B', '2'), (overridden_key, '3'))

`

``

1090

`+

expected = dict(os.environ)

`

``

1091

`+

expected.update(new_vars_items)

`

``

1092

+

``

1093

`+

os.environ |= new_vars_items

`

``

1094

`+

self.assertEqual(expected, os.environ)

`

``

1095

`+

self.assertEqual('3', os.environ[overridden_key])

`

``

1096

+

``

1097

`+

self._test_underlying_process_env('A', '1')

`

``

1098

`+

self._test_underlying_process_env(overridden_key, '3')

`

``

1099

+

``

1100

`+

def test_ror_operator(self):

`

``

1101

`+

overridden_key = 'TEST_VAR'

`

``

1102

`+

original_value = 'original_value'

`

``

1103

`+

os.environ[overridden_key] = original_value

`

``

1104

+

``

1105

`+

new_vars_dict = {'A': '1', 'B': '2', overridden_key: '3'}

`

``

1106

`+

expected = dict(new_vars_dict)

`

``

1107

`+

expected.update(os.environ)

`

``

1108

+

``

1109

`+

actual = new_vars_dict | os.environ

`

``

1110

`+

self.assertDictEqual(expected, actual)

`

``

1111

`+

self.assertEqual(original_value, actual[overridden_key])

`

``

1112

+

``

1113

`+

new_vars_items = new_vars_dict.items()

`

``

1114

`+

self.assertIs(NotImplemented, os.environ.ror(new_vars_items))

`

``

1115

+

``

1116

`+

self._test_underlying_process_env('A', '')

`

``

1117

`+

self._test_underlying_process_env(overridden_key, original_value)

`

``

1118

+

1029

1119

``

1030

1120

`class WalkTests(unittest.TestCase):

`

1031

1121

`"""Tests for os.walk()."""

`