#! /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 anydbm
import tempfile
import glob
from test.test_anydbm import delete_files, dbm_iterator

_fname = test.test_support.TESTFN

class WhichDBTestCase(unittest.TestCase):
    # Actual test methods are added to namespace
    # after class definition.
    def __init__(self, *args):
        unittest.TestCase.__init__(self, *args)

    def test_whichdb(self):
        for module in dbm_iterator():
            # Check whether whichdb correctly guesses module name
            # for databases opened with "module" module.
            # Try with empty files first
            name = module.__name__
            if name == 'dumbdbm':
                continue   # whichdb can't support dumbdbm
            test.test_support.unlink(_fname)
            f = module.open(_fname, 'c')
            f.close()
            self.assertEqual(name, whichdb.whichdb(_fname))
            # Now add a key
            f = module.open(_fname, 'w')
            f[b"1"] = b"1"
            # and test that we can find it
            self.assertTrue(b"1" in f)
            # and read it
            self.assertTrue(f[b"1"] == b"1")
            f.close()
            self.assertEqual(name, whichdb.whichdb(_fname))

    def tearDown(self):
        delete_files()

    def setUp(self):
        delete_files()


def test_main():
    try:
        test.test_support.run_unittest(WhichDBTestCase)
    finally:
        delete_files()

if __name__ == "__main__":
    test_main()
