]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add a test that was added in Python 2.2: test Weak*Dictionary.setdefault().
authorFred Drake <fdrake@acm.org>
Wed, 13 Mar 2002 05:49:06 +0000 (05:49 +0000)
committerFred Drake <fdrake@acm.org>
Wed, 13 Mar 2002 05:49:06 +0000 (05:49 +0000)
The purpose is to avoid regression on SF bug #529273.
This test is stronger than the one submitted with the bug report.

Lib/test/test_weakref.py

index 470c5cac38e6fbb804c4e1c32a07654b5b47ea1f..7b47165c5ace944068087f90c1b39113db2af99b 100644 (file)
@@ -280,6 +280,31 @@ class MappingTestCase(TestBase):
         self.assert_(len(dict) == 0,
                      "deleting the keys did not clear the dictionary")
 
+    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):
         weakdict = klass()
         weakdict.update(dict)