diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2007-08-24 21:59:45 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2007-08-24 21:59:45 (GMT) |
commit | 178fefb9b5de5aa7db33e691ce2760c54097718b (patch) | |
tree | 99e249eba9f1691cf92e13e63879f0e993f075f1 | |
parent | 41cfce9c2bcfe6153ee2b42e05ff1d782d1d3b91 (diff) | |
download | cpython-178fefb9b5de5aa7db33e691ce2760c54097718b.zip cpython-178fefb9b5de5aa7db33e691ce2760c54097718b.tar.gz cpython-178fefb9b5de5aa7db33e691ce2760c54097718b.tar.bz2 |
applies the better dbm and shelve related unittests. bug 1007 from larryhastings
-rw-r--r-- | Lib/test/test_anydbm.py | 46 | ||||
-rw-r--r-- | Lib/test/test_dumbdbm.py | 6 | ||||
-rw-r--r-- | Lib/test/test_shelve.py | 20 | ||||
-rw-r--r-- | Lib/test/test_whichdb.py | 58 |
4 files changed, 83 insertions, 47 deletions
diff --git a/Lib/test/test_anydbm.py b/Lib/test/test_anydbm.py index 367360f..9399d71 100644 --- a/Lib/test/test_anydbm.py +++ b/Lib/test/test_anydbm.py @@ -11,7 +11,33 @@ from test import test_support _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 @@ class AnyDBMTestCase(unittest.TestCase): 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 @@ class AnyDBMTestCase(unittest.TestCase): 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() diff --git a/Lib/test/test_dumbdbm.py b/Lib/test/test_dumbdbm.py index efdee75..d5a74fb 100644 --- a/Lib/test/test_dumbdbm.py +++ b/Lib/test/test_dumbdbm.py @@ -89,6 +89,12 @@ class DumbDBMTestCase(unittest.TestCase): 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) diff --git a/Lib/test/test_shelve.py b/Lib/test/test_shelve.py index 543afb1..f8fcda9 100644 --- a/Lib/test/test_shelve.py +++ b/Lib/test/test_shelve.py @@ -3,6 +3,7 @@ import shelve 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 @@ class TestProto2MemShelve(TestShelveBase): _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() diff --git a/Lib/test/test_whichdb.py b/Lib/test/test_whichdb.py index 675507a..d3eda84 100644 --- a/Lib/test/test_whichdb.py +++ b/Lib/test/test_whichdb.py @@ -10,57 +10,49 @@ import whichdb 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() - -for name in anydbm._names: - # we define a new test method for each - # candidate database module. - try: - mod = __import__(name) - except ImportError: - continue + delete_files() - 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() |