Home | History | Annotate | Download | only in test
      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 glob
     11 
     12 _fname = test.test_support.TESTFN
     13 
     14 # Silence Py3k warning
     15 anydbm = test.test_support.import_module('anydbm', deprecated=True)
     16 
     17 def _delete_files():
     18     # we don't know the precise name the underlying database uses
     19     # so we use glob to locate all names
     20     for f in glob.glob(_fname + "*"):
     21         try:
     22             os.unlink(f)
     23         except OSError:
     24             pass
     25 
     26 class WhichDBTestCase(unittest.TestCase):
     27     # Actual test methods are added to namespace
     28     # after class definition.
     29     def __init__(self, *args):
     30         unittest.TestCase.__init__(self, *args)
     31 
     32     def tearDown(self):
     33         _delete_files()
     34 
     35     def setUp(self):
     36         _delete_files()
     37 
     38 for name in anydbm._names:
     39     # we define a new test method for each
     40     # candidate database module.
     41     try:
     42         # Silence Py3k warning
     43         mod = test.test_support.import_module(name, deprecated=True)
     44     except unittest.SkipTest:
     45         continue
     46 
     47     def test_whichdb_name(self, name=name, mod=mod):
     48         # Check whether whichdb correctly guesses module name
     49         # for databases opened with module mod.
     50         # Try with empty files first
     51         f = mod.open(_fname, 'c')
     52         f.close()
     53         self.assertEqual(name, whichdb.whichdb(_fname))
     54         # Now add a key
     55         f = mod.open(_fname, 'w')
     56         f["1"] = "1"
     57         f.close()
     58         self.assertEqual(name, whichdb.whichdb(_fname))
     59     setattr(WhichDBTestCase,"test_whichdb_%s" % name, test_whichdb_name)
     60 
     61 def test_main():
     62     try:
     63         test.test_support.run_unittest(WhichDBTestCase)
     64     finally:
     65         _delete_files()
     66 
     67 if __name__ == "__main__":
     68     test_main()
     69