Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | #! /usr/bin/env python |
2 | """Test script for the whichdb module | |
3 | based on test_anydbm.py | |
4 | """ | |
5 | ||
6 | import os | |
7 | import test.test_support | |
8 | import unittest | |
9 | import whichdb | |
10 | import anydbm | |
11 | import tempfile | |
12 | import glob | |
13 | ||
14 | _fname = test.test_support.TESTFN | |
15 | ||
16 | def _delete_files(): | |
17 | # we don't know the precise name the underlying database uses | |
18 | # so we use glob to locate all names | |
19 | for f in glob.glob(_fname + "*"): | |
20 | try: | |
21 | os.unlink(f) | |
22 | except OSError: | |
23 | pass | |
24 | ||
25 | class WhichDBTestCase(unittest.TestCase): | |
26 | # Actual test methods are added to namespace | |
27 | # after class definition. | |
28 | def __init__(self, *args): | |
29 | unittest.TestCase.__init__(self, *args) | |
30 | ||
31 | def tearDown(self): | |
32 | _delete_files() | |
33 | ||
34 | def setUp(self): | |
35 | _delete_files() | |
36 | ||
37 | for name in anydbm._names: | |
38 | # we define a new test method for each | |
39 | # candidate database module. | |
40 | try: | |
41 | mod = __import__(name) | |
42 | except ImportError: | |
43 | continue | |
44 | ||
45 | def test_whichdb_name(self, name=name, mod=mod): | |
46 | # Check whether whichdb correctly guesses module name | |
47 | # for databases opened with module mod. | |
48 | # Try with empty files first | |
49 | f = mod.open(_fname, 'c') | |
50 | f.close() | |
51 | self.assertEqual(name, whichdb.whichdb(_fname)) | |
52 | # Now add a key | |
53 | f = mod.open(_fname, 'w') | |
54 | f["1"] = "1" | |
55 | f.close() | |
56 | self.assertEqual(name, whichdb.whichdb(_fname)) | |
57 | setattr(WhichDBTestCase,"test_whichdb_%s" % name, test_whichdb_name) | |
58 | ||
59 | def test_main(): | |
60 | try: | |
61 | test.test_support.run_unittest(WhichDBTestCase) | |
62 | finally: | |
63 | _delete_files() | |
64 | ||
65 | if __name__ == "__main__": | |
66 | test_main() |