@@ -1026,6 +1026,96 @@ def test_iter_error_when_changing_os_environ_items(self):
10261026 def test_iter_error_when_changing_os_environ_values (self ):
10271027 self ._test_environ_iteration (os .environ .values ())
10281028
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+
10291119
10301120class WalkTests (unittest .TestCase ):
10311121 """Tests for os.walk()."""
0 commit comments