SF patch #667730: More DictMixin
* Adds missing pop() methods to weakref.py
* Expands test suite to broaden coverage of objects with
a mapping interface.
Contributed by Sebastien Keim.
diff --git a/Lib/test/test_shelve.py b/Lib/test/test_shelve.py
index e69e311..e7c4b50 100644
--- a/Lib/test/test_shelve.py
+++ b/Lib/test/test_shelve.py
@@ -43,9 +43,54 @@
self.assertEqual(len(d1), 1)
self.assertNotEqual(d1, d2)
-def test_main():
- test_support.run_unittest(TestCase)
+from test_userdict import TestMappingProtocol
+class TestShelveBase(TestMappingProtocol):
+ fn = "shelftemp.db"
+ counter = 0
+ def __init__(self, *args, **kw):
+ self._db = []
+ TestMappingProtocol.__init__(self, *args, **kw)
+ _tested_class = shelve.Shelf
+ def _reference(self):
+ return {"key1":"value1", "key2":2, "key3":(1,2,3)}
+ def _empty_mapping(self):
+ if self._in_mem:
+ x= shelve.Shelf({}, binary = self._binary)
+ else:
+ self.counter+=1
+ x= shelve.open(self.fn+str(self.counter), binary=self._binary)
+ self._db.append(x)
+ return x
+ def tearDown(self):
+ for db in self._db:
+ db.close()
+ self._db = []
+ if not self._in_mem:
+ for f in glob.glob(self.fn+"*"):
+ os.unlink(f)
+
+class TestAsciiFileShelve(TestShelveBase):
+ _binary = False
+ _in_mem = False
+class TestBinaryFileShelve(TestShelveBase):
+ _binary = True
+ _in_mem = False
+class TestAsciiMemShelve(TestShelveBase):
+ _binary = False
+ _in_mem = True
+class TestBinaryMemShelve(TestShelveBase):
+ _binary = True
+ _in_mem = True
+
+def test_main():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestAsciiFileShelve))
+ suite.addTest(unittest.makeSuite(TestBinaryFileShelve))
+ suite.addTest(unittest.makeSuite(TestAsciiMemShelve))
+ suite.addTest(unittest.makeSuite(TestBinaryMemShelve))
+ suite.addTest(unittest.makeSuite(TestCase))
+ test_support.run_suite(suite)
if __name__ == "__main__":
test_main()