[Python-checkins] CVS: python/dist/src/Lib/test test_types.py,1.20,1.21

Barry Warsaw bwarsaw@users.sourceforge.net
Tue, 26 Jun 2001 13:09:30 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv475

Modified Files:
	test_types.py 
Log Message:
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.


Index: test_types.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_types.py,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** test_types.py	2001/04/20 16:50:40	1.20
--- test_types.py	2001/06/26 20:09:28	1.21
***************
*** 240,250 ****
--- 240,320 ----
  del d['b']
  if d != {'a': 4, 'c': 3}: raise TestFailed, 'dict item deletion'
+ # dict.clear()
  d = {1:1, 2:2, 3:3}
  d.clear()
  if d != {}: raise TestFailed, 'dict clear'
+ # dict.update()
  d.update({1:100})
  d.update({2:20})
  d.update({1:1, 2:2, 3:3})
  if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict update'
+ d.clear()
+ try: d.update(None)
+ except AttributeError: pass
+ else: raise TestFailed, 'dict.update(None), AttributeError expected'
+ class SimpleUserDict:
+     def __init__(self):
+         self.d = {1:1, 2:2, 3:3}
+     def keys(self):
+         return self.d.keys()
+     def __getitem__(self, i):
+         return self.d[i]
+ d.update(SimpleUserDict())
+ if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict.update(instance)'
+ d.clear()
+ class FailingUserDict:
+     def keys(self):
+         raise ValueError
+ try: d.update(FailingUserDict())
+ except ValueError: pass
+ else: raise TestFailed, 'dict.keys() expected ValueError'
+ class FailingUserDict:
+     def keys(self):
+         class BogonIter:
+             def __iter__(self):
+                 raise ValueError
+         return BogonIter()
+ try: d.update(FailingUserDict())
+ except ValueError: pass
+ else: raise TestFailed, 'iter(dict.keys()) expected ValueError'
+ class FailingUserDict:
+     def keys(self):
+         class BogonIter:
+             def __init__(self):
+                 self.i = 1
+             def __iter__(self):
+                 return self
+             def next(self):
+                 if self.i:
+                     self.i = 0
+                     return 'a'
+                 raise ValueError
+         return BogonIter()
+     def __getitem__(self, key):
+         return key
+ try: d.update(FailingUserDict())
+ except ValueError: pass
+ else: raise TestFailed, 'iter(dict.keys()).next() expected ValueError'
+ class FailingUserDict:
+     def keys(self):
+         class BogonIter:
+             def __init__(self):
+                 self.i = ord('a')
+             def __iter__(self):
+                 return self
+             def next(self):
+                 if self.i <= ord('z'):
+                     rtn = chr(self.i)
+                     self.i += 1
+                     return rtn
+                 raise StopIteration
+         return BogonIter()
+     def __getitem__(self, key):
+         raise ValueError
+ try: d.update(FailingUserDict())
+ except ValueError: pass
+ else: raise TestFailed, 'dict.update(), __getitem__ expected ValueError'
+ # dict.copy()
+ d = {1:1, 2:2, 3:3}
  if d.copy() != {1:1, 2:2, 3:3}: raise TestFailed, 'dict copy'
  if {}.copy() != {}: raise TestFailed, 'empty dict copy'