Tests for changes for issue #16613.
(self)
| 228 | self.assertEqual(dict(d.items()), dict(a=1, b=2, c=30)) |
| 229 | |
| 230 | def test_new_child(self): |
| 231 | 'Tests for changes for issue #16613.' |
| 232 | c = ChainMap() |
| 233 | c['a'] = 1 |
| 234 | c['b'] = 2 |
| 235 | m = {'b':20, 'c': 30} |
| 236 | d = c.new_child(m) |
| 237 | self.assertEqual(d.maps, [{'b':20, 'c':30}, {'a':1, 'b':2}]) # check internal state |
| 238 | self.assertIs(m, d.maps[0]) |
| 239 | |
| 240 | # Use a different map than a dict |
| 241 | class lowerdict(dict): |
| 242 | def __getitem__(self, key): |
| 243 | if isinstance(key, str): |
| 244 | key = key.lower() |
| 245 | return dict.__getitem__(self, key) |
| 246 | def __contains__(self, key): |
| 247 | if isinstance(key, str): |
| 248 | key = key.lower() |
| 249 | return dict.__contains__(self, key) |
| 250 | |
| 251 | c = ChainMap() |
| 252 | c['a'] = 1 |
| 253 | c['b'] = 2 |
| 254 | m = lowerdict(b=20, c=30) |
| 255 | d = c.new_child(m) |
| 256 | self.assertIs(m, d.maps[0]) |
| 257 | for key in 'abc': # check contains |
| 258 | self.assertIn(key, d) |
| 259 | for k, v in dict(a=1, B=20, C=30, z=100).items(): # check get |
| 260 | self.assertEqual(d.get(k, 100), v) |
| 261 | |
| 262 | c = ChainMap({'a': 1, 'b': 2}) |
| 263 | d = c.new_child(b=20, c=30) |
| 264 | self.assertEqual(d.maps, [{'b': 20, 'c': 30}, {'a': 1, 'b': 2}]) |
| 265 | |
| 266 | def test_union_operators(self): |
| 267 | cm1 = ChainMap(dict(a=1, b=2), dict(c=3, d=4)) |