@@ -112,6 +112,38 @@ def test_dict_coercion(self):
112112 self .assertEqual (dict (d ), dict (a = 1 , b = 2 , c = 30 ))
113113 self .assertEqual (dict (d .items ()), dict (a = 1 , b = 2 , c = 30 ))
114114
115+ def test_new_child (self ):
116+ 'Tests for changes for issue #16613.'
117+ c = ChainMap ()
118+ c ['a' ] = 1
119+ c ['b' ] = 2
120+ m = {'b' :20 , 'c' : 30 }
121+ d = c .new_child (m )
122+ self .assertEqual (d .maps , [{'b' :20 , 'c' :30 }, {'a' :1 , 'b' :2 }]) # check internal state
123+ self .assertIs (m , d .maps [0 ])
124+
125+ # Use a different map than a dict
126+ class lowerdict (dict ):
127+ def __getitem__ (self , key ):
128+ if isinstance (key , str ):
129+ key = key .lower ()
130+ return dict .__getitem__ (self , key )
131+ def __contains__ (self , key ):
132+ if isinstance (key , str ):
133+ key = key .lower ()
134+ return dict .__contains__ (self , key )
135+
136+ c = ChainMap ()
137+ c ['a' ] = 1
138+ c ['b' ] = 2
139+ m = lowerdict (b = 20 , c = 30 )
140+ d = c .new_child (m )
141+ self .assertIs (m , d .maps [0 ])
142+ for key in 'abc' : # check contains
143+ self .assertIn (key , d )
144+ for k , v in dict (a = 1 , B = 20 , C = 30 , z = 100 ).items (): # check get
145+ self .assertEqual (d .get (k , 100 ), v )
146+
115147
116148################################################################################
117149### Named Tuples
0 commit comments