test_whichdb.py 1.7 KB

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