Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4177538

Browse files
committed
Add a bunch of tests for extended dict.update() where the argument is
a non-dictionary mapping object. Include tests for several expected failure modes.
1 parent 66a0d1d commit 4177538

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lib/test/test_types.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,83 @@ def myComparison(x,y):
239239
if d['c'] != 3 or d['a'] != 4: raise TestFailed, 'dict item assignment'
240240
del d['b']
241241
if d != {'a': 4, 'c': 3}: raise TestFailed, 'dict item deletion'
242+
# dict.clear()
242243
d = {1:1, 2:2, 3:3}
243244
d.clear()
244245
if d != {}: raise TestFailed, 'dict clear'
246+
# dict.update()
245247
d.update({1:100})
246248
d.update({2:20})
247249
d.update({1:1, 2:2, 3:3})
248250
if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict update'
251+
d.clear()
252+
try: d.update(None)
253+
except AttributeError: pass
254+
else: raise TestFailed, 'dict.update(None), AttributeError expected'
255+
class SimpleUserDict:
256+
def __init__(self):
257+
self.d = {1:1, 2:2, 3:3}
258+
def keys(self):
259+
return self.d.keys()
260+
def __getitem__(self, i):
261+
return self.d[i]
262+
d.update(SimpleUserDict())
263+
if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict.update(instance)'
264+
d.clear()
265+
class FailingUserDict:
266+
def keys(self):
267+
raise ValueError
268+
try: d.update(FailingUserDict())
269+
except ValueError: pass
270+
else: raise TestFailed, 'dict.keys() expected ValueError'
271+
class FailingUserDict:
272+
def keys(self):
273+
class BogonIter:
274+
def __iter__(self):
275+
raise ValueError
276+
return BogonIter()
277+
try: d.update(FailingUserDict())
278+
except ValueError: pass
279+
else: raise TestFailed, 'iter(dict.keys()) expected ValueError'
280+
class FailingUserDict:
281+
def keys(self):
282+
class BogonIter:
283+
def __init__(self):
284+
self.i = 1
285+
def __iter__(self):
286+
return self
287+
def next(self):
288+
if self.i:
289+
self.i = 0
290+
return 'a'
291+
raise ValueError
292+
return BogonIter()
293+
def __getitem__(self, key):
294+
return key
295+
try: d.update(FailingUserDict())
296+
except ValueError: pass
297+
else: raise TestFailed, 'iter(dict.keys()).next() expected ValueError'
298+
class FailingUserDict:
299+
def keys(self):
300+
class BogonIter:
301+
def __init__(self):
302+
self.i = ord('a')
303+
def __iter__(self):
304+
return self
305+
def next(self):
306+
if self.i <= ord('z'):
307+
rtn = chr(self.i)
308+
self.i += 1
309+
return rtn
310+
raise StopIteration
311+
return BogonIter()
312+
def __getitem__(self, key):
313+
raise ValueError
314+
try: d.update(FailingUserDict())
315+
except ValueError: pass
316+
else: raise TestFailed, 'dict.update(), __getitem__ expected ValueError'
317+
# dict.copy()
318+
d = {1:1, 2:2, 3:3}
249319
if d.copy() != {1:1, 2:2, 3:3}: raise TestFailed, 'dict copy'
250320
if {}.copy() != {}: raise TestFailed, 'empty dict copy'
251321
# dict.get()

0 commit comments

Comments
 (0)