[Python-3000-checkins] r57419 - python/branches/py3k/Lib/test/test_anydbm.py python/branches/py3k/Lib/test/test_dumbdbm.py python/branches/py3k/Lib/test/test_shelve.py python/branches/py3k/Lib/test/test_whichdb.py

gregory.p.smith python-3000-checkins at python.org
Fri Aug 24 23:59:45 CEST 2007


Author: gregory.p.smith
Date: Fri Aug 24 23:59:45 2007
New Revision: 57419

Modified:
   python/branches/py3k/Lib/test/test_anydbm.py
   python/branches/py3k/Lib/test/test_dumbdbm.py
   python/branches/py3k/Lib/test/test_shelve.py
   python/branches/py3k/Lib/test/test_whichdb.py
Log:
applies the better dbm and shelve related unittests.  bug 1007 from larryhastings


Modified: python/branches/py3k/Lib/test/test_anydbm.py
==============================================================================
--- python/branches/py3k/Lib/test/test_anydbm.py	(original)
+++ python/branches/py3k/Lib/test/test_anydbm.py	Fri Aug 24 23:59:45 2007
@@ -11,7 +11,33 @@
 
 _fname = test_support.TESTFN
 
-def _delete_files():
+_all_modules = []
+
+for _name in anydbm._names:
+    try:
+        _module = __import__(_name)
+    except ImportError:
+        continue
+    _all_modules.append(_module)
+
+
+#
+# Iterates over every database module supported by anydbm
+# currently available, setting anydbm to use each in turn,
+# and yielding that module
+#
+def dbm_iterator():
+    old_default = anydbm._defaultmod
+    for module in _all_modules:
+        anydbm._defaultmod = module
+        yield module
+    anydbm._defaultmod = old_default
+
+#
+# Clean up all scratch databases we might have created
+# during testing
+#
+def delete_files():
     # we don't know the precise name the underlying database uses
     # so we use glob to locate all names
     for f in glob.glob(_fname + "*"):
@@ -60,6 +86,14 @@
         keys = self.keys_helper(f)
         f.close()
 
+    def test_anydbm_access(self):
+        self.init_db()
+        f = anydbm.open(_fname, 'r')
+        key = "a".encode("ascii")
+        assert(key in f)
+        assert(f[key] == b"Python:")
+        f.close()
+
     def read_helper(self, f):
         keys = self.keys_helper(f)
         for key in self._dict:
@@ -78,16 +112,18 @@
         return keys
 
     def tearDown(self):
-        _delete_files()
+        delete_files()
 
     def setUp(self):
-        _delete_files()
+        delete_files()
+
 
 def test_main():
     try:
-        test_support.run_unittest(AnyDBMTestCase)
+        for module in dbm_iterator():
+            test_support.run_unittest(AnyDBMTestCase)
     finally:
-        _delete_files()
+        delete_files()
 
 if __name__ == "__main__":
     test_main()

Modified: python/branches/py3k/Lib/test/test_dumbdbm.py
==============================================================================
--- python/branches/py3k/Lib/test/test_dumbdbm.py	(original)
+++ python/branches/py3k/Lib/test/test_dumbdbm.py	Fri Aug 24 23:59:45 2007
@@ -89,6 +89,12 @@
         keys = self.keys_helper(f)
         f.close()
 
+    def test_write_contains(self):
+        f = dumbdbm.open(_fname)
+        f[b'1'] = b'hello'
+        assert b'1' in f
+        f.close()
+
     def test_write_write_read(self):
         # test for bug #482460
         f = dumbdbm.open(_fname)

Modified: python/branches/py3k/Lib/test/test_shelve.py
==============================================================================
--- python/branches/py3k/Lib/test/test_shelve.py	(original)
+++ python/branches/py3k/Lib/test/test_shelve.py	Fri Aug 24 23:59:45 2007
@@ -3,6 +3,7 @@
 import glob
 from test import test_support
 from UserDict import DictMixin
+from test.test_anydbm import dbm_iterator
 
 def L1(s):
     return s.decode("latin-1")
@@ -148,15 +149,16 @@
     _in_mem = True
 
 def test_main():
-    test_support.run_unittest(
-        TestAsciiFileShelve,
-        TestBinaryFileShelve,
-        TestProto2FileShelve,
-        TestAsciiMemShelve,
-        TestBinaryMemShelve,
-        TestProto2MemShelve,
-        TestCase
-    )
+    for module in dbm_iterator():
+        test_support.run_unittest(
+            TestAsciiFileShelve,
+            TestBinaryFileShelve,
+            TestProto2FileShelve,
+            TestAsciiMemShelve,
+            TestBinaryMemShelve,
+            TestProto2MemShelve,
+            TestCase
+        )
 
 if __name__ == "__main__":
     test_main()

Modified: python/branches/py3k/Lib/test/test_whichdb.py
==============================================================================
--- python/branches/py3k/Lib/test/test_whichdb.py	(original)
+++ python/branches/py3k/Lib/test/test_whichdb.py	Fri Aug 24 23:59:45 2007
@@ -10,57 +10,49 @@
 import anydbm
 import tempfile
 import glob
+from test.test_anydbm import delete_files, dbm_iterator
 
 _fname = test.test_support.TESTFN
 
-def _delete_files():
-    # we don't know the precise name the underlying database uses
-    # so we use glob to locate all names
-    for f in glob.glob(_fname + "*"):
-        try:
-            os.unlink(f)
-        except OSError:
-            pass
-
 class WhichDBTestCase(unittest.TestCase):
     # Actual test methods are added to namespace
     # after class definition.
     def __init__(self, *args):
         unittest.TestCase.__init__(self, *args)
 
+    def test_whichdb(self):
+        for module in dbm_iterator():
+            # Check whether whichdb correctly guesses module name
+            # for databases opened with "module" module.
+            # Try with empty files first
+            name = module.__name__
+            if name == 'dumbdbm':
+                continue   # whichdb can't support dumbdbm
+            f = module.open(_fname, 'c')
+            f.close()
+            self.assertEqual(name, whichdb.whichdb(_fname))
+            # Now add a key
+            f = module.open(_fname, 'w')
+            f[b"1"] = b"1"
+            # and test that we can find it
+            assert b"1" in f
+            # and read it
+            assert f[b"1"] == b"1"
+            f.close()
+            self.assertEqual(name, whichdb.whichdb(_fname))
+
     def tearDown(self):
-        _delete_files()
+        delete_files()
 
     def setUp(self):
-        _delete_files()
+        delete_files()
 
-for name in anydbm._names:
-    # we define a new test method for each
-    # candidate database module.
-    try:
-        mod = __import__(name)
-    except ImportError:
-        continue
-
-    def test_whichdb_name(self, name=name, mod=mod):
-        # Check whether whichdb correctly guesses module name
-        # for databases opened with module mod.
-        # Try with empty files first
-        f = mod.open(_fname, 'c')
-        f.close()
-        self.assertEqual(name, whichdb.whichdb(_fname))
-        # Now add a key
-        f = mod.open(_fname, 'w')
-        f[b"1"] = b"1"
-        f.close()
-        self.assertEqual(name, whichdb.whichdb(_fname))
-    setattr(WhichDBTestCase,"test_whichdb_%s" % name, test_whichdb_name)
 
 def test_main():
     try:
         test.test_support.run_unittest(WhichDBTestCase)
     finally:
-        _delete_files()
+        delete_files()
 
 if __name__ == "__main__":
     test_main()


More information about the Python-3000-checkins mailing list