[Python-checkins] CVS: python/dist/src/Lib/test test_weakref.py,1.8,1.9

Fred L. Drake fdrake@users.sourceforge.net
Thu, 10 May 2001 10:16:40 -0700


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

Modified Files:
	test_weakref.py 
Log Message:

Extend the weakref test suite to cover the complete mapping interface for
both weakref.Weak*Dictionary classes.

This closes SF bug #416480.


Index: test_weakref.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_weakref.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** test_weakref.py	2001/05/02 05:44:22	1.8
--- test_weakref.py	2001/05/10 17:16:38	1.9
***************
*** 293,309 ****
          for item in dict.iteritems():
              items.remove(item)
!         self.assert_(len(items) == 0, "iterator did not touch all items")
  
!         # key iterator:
          keys = dict.keys()
          for k in dict:
              keys.remove(k)
!         self.assert_(len(keys) == 0, "iterator did not touch all keys")
  
          # value iterator:
          values = dict.values()
          for v in dict.itervalues():
              values.remove(v)
!         self.assert_(len(values) == 0, "iterator did not touch all values")
  
      def make_weak_keyed_dict(self):
--- 293,315 ----
          for item in dict.iteritems():
              items.remove(item)
!         self.assert_(len(items) == 0, "iteritems() did not touch all items")
  
!         # key iterator, via __iter__():
          keys = dict.keys()
          for k in dict:
              keys.remove(k)
!         self.assert_(len(keys) == 0, "__iter__() did not touch all keys")
  
+         # key iterator, via iterkeys():
+         keys = dict.keys()
+         for k in dict.iterkeys():
+             keys.remove(k)
+         self.assert_(len(keys) == 0, "iterkeys() did not touch all keys")
+ 
          # value iterator:
          values = dict.values()
          for v in dict.itervalues():
              values.remove(v)
!         self.assert_(len(values) == 0, "itervalues() did not touch all values")
  
      def make_weak_keyed_dict(self):
***************
*** 320,323 ****
--- 326,380 ----
              dict[o.arg] = o
          return dict, objects
+ 
+     def check_popitem(self, klass, key1, value1, key2, value2):
+         weakdict = klass()
+         weakdict[key1] = value1
+         weakdict[key2] = value2
+         self.assert_(len(weakdict) == 2)
+         k, v = weakdict.popitem()
+         self.assert_(len(weakdict) == 1)
+         if k is key1:
+             self.assert_(v is value1)
+         else:
+             self.assert_(v is value2)
+         k, v = weakdict.popitem()
+         self.assert_(len(weakdict) == 0)
+         if k is key1:
+             self.assert_(v is value1)
+         else:
+             self.assert_(v is value2)
+ 
+     def test_weak_valued_dict_popitem(self):
+         self.check_popitem(weakref.WeakValueDictionary,
+                            "key1", C(), "key2", C())
+ 
+     def test_weak_keyed_dict_popitem(self):
+         self.check_popitem(weakref.WeakKeyDictionary,
+                            C(), "value 1", C(), "value 2")
+ 
+     def check_setdefault(self, klass, key, value1, value2):
+         self.assert_(value1 is not value2,
+                      "invalid test"
+                      " -- value parameters must be distinct objects")
+         weakdict = klass()
+         o = weakdict.setdefault(key, value1)
+         self.assert_(o is value1)
+         self.assert_(weakdict.has_key(key))
+         self.assert_(weakdict.get(key) is value1)
+         self.assert_(weakdict[key] is value1)
+ 
+         o = weakdict.setdefault(key, value2)
+         self.assert_(o is value1)
+         self.assert_(weakdict.has_key(key))
+         self.assert_(weakdict.get(key) is value1)
+         self.assert_(weakdict[key] is value1)
+ 
+     def test_weak_valued_dict_setdefault(self):
+         self.check_setdefault(weakref.WeakValueDictionary,
+                               "key", C(), C())
+ 
+     def test_weak_keyed_dict_setdefault(self):
+         self.check_setdefault(weakref.WeakKeyDictionary,
+                               C(), "value 1", "value 2")
  
      def check_update(self, klass, dict):