summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_dbm.py
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2008-05-26 10:30:20 (GMT)
committerGeorg Brandl <georg@python.org>2008-05-26 10:30:20 (GMT)
commit7f986acb0142574d30e5c5460df02fdbb00760e9 (patch)
tree27642743df3f6f6f2dadfa594c3549a278b07ecd /Lib/test/test_dbm.py
parent0a7ac7d70d370544c6a9d118bbbd6886ad4f5ce5 (diff)
downloadcpython-7f986acb0142574d30e5c5460df02fdbb00760e9.zip
cpython-7f986acb0142574d30e5c5460df02fdbb00760e9.tar.gz
cpython-7f986acb0142574d30e5c5460df02fdbb00760e9.tar.bz2
Rename test file to its proper module name.
Diffstat (limited to 'Lib/test/test_dbm.py')
-rw-r--r--Lib/test/test_dbm.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/Lib/test/test_dbm.py b/Lib/test/test_dbm.py
new file mode 100644
index 0000000..aab1388
--- /dev/null
+++ b/Lib/test/test_dbm.py
@@ -0,0 +1,147 @@
+#! /usr/bin/env python
+"""Test script for the dbm.open function based on testdumbdbm.py"""
+
+import os
+import unittest
+import dbm
+import glob
+import test.support
+
+_fname = test.support.TESTFN
+
+#
+# Iterates over every database module supported by dbm currently available,
+# setting dbm to use each in turn, and yielding that module
+#
+def dbm_iterator():
+ old_default = dbm._defaultmod
+ for module in dbm._modules.values():
+ dbm._defaultmod = module
+ yield module
+ dbm._defaultmod = old_default
+
+#
+# Clean up all scratch databases we might have created during testing
+#
+def delete_files():
+ # we don't know the precise name the underlying database uses
+ # so we use glob to locate all names
+ for f in glob.glob(_fname + "*"):
+ test.support.unlink(f)
+
+
+class AnyDBMTestCase(unittest.TestCase):
+ _dict = {'0': b'',
+ 'a': b'Python:',
+ 'b': b'Programming',
+ 'c': b'the',
+ 'd': b'way',
+ 'f': b'Guido',
+ 'g': b'intended',
+ }
+
+ def __init__(self, *args):
+ unittest.TestCase.__init__(self, *args)
+
+ def test_anydbm_creation(self):
+ f = dbm.open(_fname, 'c')
+ self.assertEqual(list(f.keys()), [])
+ for key in self._dict:
+ f[key.encode("ascii")] = self._dict[key]
+ self.read_helper(f)
+ f.close()
+
+ def test_anydbm_modification(self):
+ self.init_db()
+ f = dbm.open(_fname, 'c')
+ self._dict['g'] = f[b'g'] = b"indented"
+ self.read_helper(f)
+ f.close()
+
+ def test_anydbm_read(self):
+ self.init_db()
+ f = dbm.open(_fname, 'r')
+ self.read_helper(f)
+ f.close()
+
+ def test_anydbm_keys(self):
+ self.init_db()
+ f = dbm.open(_fname, 'r')
+ keys = self.keys_helper(f)
+ f.close()
+
+ def test_anydbm_access(self):
+ self.init_db()
+ f = dbm.open(_fname, 'r')
+ key = "a".encode("ascii")
+ assert(key in f)
+ assert(f[key] == b"Python:")
+ f.close()
+
+ def read_helper(self, f):
+ keys = self.keys_helper(f)
+ for key in self._dict:
+ self.assertEqual(self._dict[key], f[key.encode("ascii")])
+
+ def init_db(self):
+ f = dbm.open(_fname, 'n')
+ for k in self._dict:
+ f[k.encode("ascii")] = self._dict[k]
+ f.close()
+
+ def keys_helper(self, f):
+ keys = sorted(k.decode("ascii") for k in f.keys())
+ dkeys = sorted(self._dict.keys())
+ self.assertEqual(keys, dkeys)
+ return keys
+
+ def tearDown(self):
+ delete_files()
+
+ def setUp(self):
+ delete_files()
+
+
+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 == 'dbm.dumb':
+ continue # whichdb can't support dbm.dumb
+ test.support.unlink(_fname)
+ f = module.open(_fname, 'c')
+ f.close()
+ self.assertEqual(name, dbm.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, dbm.whichdb(_fname))
+
+ def tearDown(self):
+ delete_files()
+
+ def setUp(self):
+ delete_files()
+
+
+def test_main():
+ try:
+ for module in dbm_iterator():
+ test.support.run_unittest(AnyDBMTestCase, WhichDBTestCase)
+ finally:
+ delete_files()
+
+if __name__ == "__main__":
+ test_main()