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()."""
`