@@ -992,6 +992,46 @@ class Data(_testcapi.ObjExtraData):
992
992
del d .extra
993
993
self .assertIsNone (d .extra )
994
994
995
+ def test_sys_getobject (self ):
996
+ getobject = _testcapi .sys_getobject
997
+
998
+ self .assertIs (getobject (b'stdout' ), sys .stdout )
999
+ with support .swap_attr (sys , '\U0001f40d ' , 42 ):
1000
+ self .assertEqual (getobject ('\U0001f40d ' .encode ()), 42 )
1001
+
1002
+ self .assertIs (getobject (b'nonexisting' ), AttributeError )
1003
+ self .assertIs (getobject (b'\xff ' ), AttributeError )
1004
+ # CRASHES getobject(NULL)
1005
+
1006
+ def test_sys_setobject (self ):
1007
+ setobject = _testcapi .sys_setobject
1008
+
1009
+ value = ['value' ]
1010
+ value2 = ['value2' ]
1011
+ try :
1012
+ self .assertEqual (setobject (b'newattr' , value ), 0 )
1013
+ self .assertIs (sys .newattr , value )
1014
+ self .assertEqual (setobject (b'newattr' , value2 ), 0 )
1015
+ self .assertIs (sys .newattr , value2 )
1016
+ self .assertEqual (setobject (b'newattr' , NULL ), 0 )
1017
+ self .assertFalse (hasattr (sys , 'newattr' ))
1018
+ self .assertEqual (setobject (b'newattr' , NULL ), 0 )
1019
+ finally :
1020
+ with contextlib .suppress (AttributeError ):
1021
+ del sys .newattr
1022
+ try :
1023
+ self .assertEqual (setobject ('\U0001f40d ' .encode (), value ), 0 )
1024
+ self .assertIs (getattr (sys , '\U0001f40d ' ), value )
1025
+ self .assertEqual (setobject ('\U0001f40d ' .encode (), NULL ), 0 )
1026
+ self .assertFalse (hasattr (sys , '\U0001f40d ' ))
1027
+ finally :
1028
+ with contextlib .suppress (AttributeError ):
1029
+ delattr (sys , '\U0001f40d ' )
1030
+
1031
+ with self .assertRaises (UnicodeDecodeError ):
1032
+ setobject (b'\xff ' , value )
1033
+ # CRASHES setobject(NULL, value)
1034
+
995
1035
996
1036
@requires_limited_api
997
1037
class TestHeapTypeRelative (unittest .TestCase ):
@@ -2578,46 +2618,6 @@ def testfunc(it):
2578
2618
with self .assertRaises (StopIteration ):
2579
2619
next (it )
2580
2620
2581
- def test_sys_getobject (self ):
2582
- getobject = _testcapi .sys_getobject
2583
-
2584
- self .assertIs (getobject (b'stdout' ), sys .stdout )
2585
- with support .swap_attr (sys , '\U0001f40d ' , 42 ):
2586
- self .assertEqual (getobject ('\U0001f40d ' .encode ()), 42 )
2587
-
2588
- self .assertIs (getobject (b'nonexisting' ), AttributeError )
2589
- self .assertIs (getobject (b'\xff ' ), AttributeError )
2590
- # CRASHES getobject(NULL)
2591
-
2592
- def test_sys_setobject (self ):
2593
- setobject = _testcapi .sys_setobject
2594
-
2595
- value = ['value' ]
2596
- value2 = ['value2' ]
2597
- try :
2598
- self .assertEqual (setobject (b'newattr' , value ), 0 )
2599
- self .assertIs (sys .newattr , value )
2600
- self .assertEqual (setobject (b'newattr' , value2 ), 0 )
2601
- self .assertIs (sys .newattr , value2 )
2602
- self .assertEqual (setobject (b'newattr' , NULL ), 0 )
2603
- self .assertFalse (hasattr (sys , 'newattr' ))
2604
- self .assertEqual (setobject (b'newattr' , NULL ), 0 )
2605
- finally :
2606
- with contextlib .suppress (AttributeError ):
2607
- del sys .newattr
2608
- try :
2609
- self .assertEqual (setobject ('\U0001f40d ' .encode (), value ), 0 )
2610
- self .assertIs (getattr (sys , '\U0001f40d ' ), value )
2611
- self .assertEqual (setobject ('\U0001f40d ' .encode (), NULL ), 0 )
2612
- self .assertFalse (hasattr (sys , '\U0001f40d ' ))
2613
- finally :
2614
- with contextlib .suppress (AttributeError ):
2615
- delattr (sys , '\U0001f40d ' )
2616
-
2617
- with self .assertRaises (UnicodeDecodeError ):
2618
- setobject (b'\xff ' , value )
2619
- # CRASHES setobject(NULL, value)
2620
-
2621
2621
2622
2622
if __name__ == "__main__" :
2623
2623
unittest .main ()
0 commit comments