@@ -239,13 +239,83 @@ def myComparison(x,y):
239239if d ['c' ] != 3 or d ['a' ] != 4 : raise TestFailed , 'dict item assignment'
240240del d ['b' ]
241241if d != {'a' : 4 , 'c' : 3 }: raise TestFailed , 'dict item deletion'
242+ # dict.clear()
242243d = {1 :1 , 2 :2 , 3 :3 }
243244d .clear ()
244245if d != {}: raise TestFailed , 'dict clear'
246+ # dict.update()
245247d .update ({1 :100 })
246248d .update ({2 :20 })
247249d .update ({1 :1 , 2 :2 , 3 :3 })
248250if 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 }
249319if d .copy () != {1 :1 , 2 :2 , 3 :3 }: raise TestFailed , 'dict copy'
250320if {}.copy () != {}: raise TestFailed , 'empty dict copy'
251321# dict.get()
0 commit comments