@@ -792,6 +792,10 @@ def test_update(self):
792792 self .assertEqual (list (d .items ()),
793793 [('a' , 1 ), ('b' , 2 ), ('c' , 3 ), ('d' , 4 ), ('e' , 5 ), ('f' , 6 ), ('g' , 7 )])
794794
795+ def test_abc (self ):
796+ self .assertTrue (isinstance (OrderedDict (), MutableMapping ))
797+ self .assertTrue (issubclass (OrderedDict , MutableMapping ))
798+
795799 def test_clear (self ):
796800 pairs = [('c' , 1 ), ('b' , 2 ), ('a' , 3 ), ('d' , 4 ), ('e' , 5 ), ('f' , 6 )]
797801 shuffle (pairs )
@@ -850,6 +854,17 @@ def test_pop(self):
850854 self .assertEqual (len (od ), 0 )
851855 self .assertEqual (od .pop (k , 12345 ), 12345 )
852856
857+ # make sure pop still works when __missing__ is defined
858+ class Missing (OrderedDict ):
859+ def __missing__ (self , key ):
860+ return 0
861+ m = Missing (a = 1 )
862+ self .assertEqual (m .pop ('b' , 5 ), 5 )
863+ self .assertEqual (m .pop ('a' , 6 ), 1 )
864+ self .assertEqual (m .pop ('a' , 6 ), 6 )
865+ with self .assertRaises (KeyError ):
866+ m .pop ('a' )
867+
853868 def test_equality (self ):
854869 pairs = [('c' , 1 ), ('b' , 2 ), ('a' , 3 ), ('d' , 4 ), ('e' , 5 ), ('f' , 6 )]
855870 shuffle (pairs )
@@ -934,6 +949,12 @@ def test_setdefault(self):
934949 # make sure 'x' is added to the end
935950 self .assertEqual (list (od .items ())[- 1 ], ('x' , 10 ))
936951
952+ # make sure setdefault still works when __missing__ is defined
953+ class Missing (OrderedDict ):
954+ def __missing__ (self , key ):
955+ return 0
956+ self .assertEqual (Missing ().setdefault (5 , 9 ), 9 )
957+
937958 def test_reinsert (self ):
938959 # Given insert a, insert b, delete a, re-insert a,
939960 # verify that a is now later than b.
@@ -945,6 +966,13 @@ def test_reinsert(self):
945966 self .assertEqual (list (od .items ()), [('b' , 2 ), ('a' , 1 )])
946967
947968
969+ def test_override_update (self ):
970+ # Verify that subclasses can override update() without breaking __init__()
971+ class MyOD (OrderedDict ):
972+ def update (self , * args , ** kwds ):
973+ raise Exception ()
974+ items = [('a' , 1 ), ('c' , 3 ), ('b' , 2 )]
975+ self .assertEqual (list (MyOD (items ).items ()), items )
948976
949977class GeneralMappingTests (mapping_tests .BasicTestMappingProtocol ):
950978 type2test = OrderedDict
0 commit comments