@@ -730,32 +730,6 @@ def test_merge_operator(self):
730730 with self .assertRaises (ValueError ):
731731 a |= "BAD"
732732
733- def test_getitem_re_entrant_clear_during_copy (self ):
734- class Evil (self .OrderedDict ):
735- def __getitem__ (self , key ):
736- super ().clear ()
737- return None
738-
739- evil_dict = Evil ([(i , i ) for i in range (4 )])
740- result = evil_dict .copy ()
741-
742- self .assertEqual (len (result ), 4 )
743-
744- def test_getitem_re_entrant_modify_during_copy (self ):
745- class Modifier (self .OrderedDict ):
746- def __getitem__ (self , key ):
747- self ['new_key' ] = 'new_value'
748- return super ().__getitem__ (key )
749-
750- original = Modifier ([(1 , 'one' ), (2 , 'two' )])
751- result = original .copy ()
752-
753- self .assertIn (1 , result )
754- self .assertIn (2 , result )
755- self .assertEqual (result [1 ], 'one' )
756- self .assertEqual (result [2 ], 'two' )
757- self .assertEqual (result ["new_key" ], "new_value" )
758-
759733 @support .cpython_only
760734 def test_ordered_dict_items_result_gc (self ):
761735 # bpo-42536: OrderedDict.items's tuple-reuse speed trick breaks the GC's
@@ -900,6 +874,26 @@ def side_effect(self):
900874 self .assertDictEqual (dict1 , dict .fromkeys ((0 , 4.2 )))
901875 self .assertDictEqual (dict2 , dict .fromkeys ((0 , Key (), 4.2 )))
902876
877+ def test_getitem_re_entrant_clear_during_copy (self ):
878+ class Evil (self .OrderedDict ):
879+ def __getitem__ (self , key ):
880+ super ().clear ()
881+ return None
882+
883+ evil_dict = Evil ([(i , i ) for i in range (4 )])
884+ with self .assertRaises (RuntimeError ):
885+ result = evil_dict .copy ()
886+
887+ def test_getitem_re_entrant_modify_during_copy (self ):
888+ class Modifier (self .OrderedDict ):
889+ def __getitem__ (self , key ):
890+ self ['new_key' ] = 'new_value'
891+ return super ().__getitem__ (key )
892+
893+ original = Modifier ([(1 , 'one' ), (2 , 'two' )])
894+ with self .assertRaises (RuntimeError ):
895+ result = original .copy ()
896+
903897
904898@unittest .skipUnless (c_coll , 'requires the C version of the collections module' )
905899class CPythonOrderedDictTests (OrderedDictTests ,
0 commit comments