| #! /usr/bin/env python | |
| """Test script for the whichdb module | |
| based on test_anydbm.py | |
| """ | |
| import os | |
| import test.test_support | |
| import unittest | |
| import whichdb | |
| import glob | |
| _fname = test.test_support.TESTFN | |
| # Silence Py3k warning | |
| anydbm = test.test_support.import_module('anydbm', deprecated=True) | |
| 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 tearDown(self): | |
| _delete_files() | |
| def setUp(self): | |
| _delete_files() | |
| for name in anydbm._names: | |
| # we define a new test method for each | |
| # candidate database module. | |
| try: | |
| # Silence Py3k warning | |
| mod = test.test_support.import_module(name, deprecated=True) | |
| except unittest.SkipTest: | |
| 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["1"] = "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() | |
| if __name__ == "__main__": | |
| test_main() |