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