blob: 9399d711cffcb6a0b49e1ddc547eb8f6e9012fee [file] [log] [blame]
Skip Montanaro4894a972002-03-18 03:00:37 +00001#! /usr/bin/env python
2"""Test script for the anydbm module
3 based on testdumbdbm.py
4"""
5
6import os
Skip Montanaro4894a972002-03-18 03:00:37 +00007import unittest
8import anydbm
Skip Montanaro4894a972002-03-18 03:00:37 +00009import glob
Barry Warsaw04f357c2002-07-23 19:04:11 +000010from test import test_support
Skip Montanaro4894a972002-03-18 03:00:37 +000011
Guido van Rossum3b0a3292002-08-09 16:38:32 +000012_fname = test_support.TESTFN
Skip Montanaro4894a972002-03-18 03:00:37 +000013
Gregory P. Smith178fefb2007-08-24 21:59:45 +000014_all_modules = []
15
16for _name in anydbm._names:
17 try:
18 _module = __import__(_name)
19 except ImportError:
20 continue
21 _all_modules.append(_module)
22
23
24#
25# Iterates over every database module supported by anydbm
26# currently available, setting anydbm to use each in turn,
27# and yielding that module
28#
29def dbm_iterator():
30 old_default = anydbm._defaultmod
31 for module in _all_modules:
32 anydbm._defaultmod = module
33 yield module
34 anydbm._defaultmod = old_default
35
36#
37# Clean up all scratch databases we might have created
38# during testing
39#
40def delete_files():
Skip Montanaro4894a972002-03-18 03:00:37 +000041 # we don't know the precise name the underlying database uses
42 # so we use glob to locate all names
43 for f in glob.glob(_fname + "*"):
44 try:
45 os.unlink(f)
46 except OSError:
47 pass
48
49class AnyDBMTestCase(unittest.TestCase):
Martin v. Löwisca8dd912007-08-07 07:15:50 +000050 _dict = {'0': b'',
51 'a': b'Python:',
52 'b': b'Programming',
53 'c': b'the',
54 'd': b'way',
55 'f': b'Guido',
56 'g': b'intended',
Skip Montanaro4894a972002-03-18 03:00:37 +000057 }
58
59 def __init__(self, *args):
60 unittest.TestCase.__init__(self, *args)
61
62 def test_anydbm_creation(self):
63 f = anydbm.open(_fname, 'c')
Guido van Rossum49dc35b2007-03-08 01:17:51 +000064 self.assertEqual(list(f.keys()), [])
Skip Montanaro4894a972002-03-18 03:00:37 +000065 for key in self._dict:
Martin v. Löwisca8dd912007-08-07 07:15:50 +000066 f[key.encode("ascii")] = self._dict[key]
Skip Montanaro4894a972002-03-18 03:00:37 +000067 self.read_helper(f)
68 f.close()
69
70 def test_anydbm_modification(self):
71 self.init_db()
72 f = anydbm.open(_fname, 'c')
Martin v. Löwisca8dd912007-08-07 07:15:50 +000073 self._dict['g'] = f[b'g'] = b"indented"
Skip Montanaro4894a972002-03-18 03:00:37 +000074 self.read_helper(f)
75 f.close()
76
77 def test_anydbm_read(self):
78 self.init_db()
79 f = anydbm.open(_fname, 'r')
80 self.read_helper(f)
81 f.close()
82
83 def test_anydbm_keys(self):
84 self.init_db()
85 f = anydbm.open(_fname, 'r')
86 keys = self.keys_helper(f)
87 f.close()
88
Gregory P. Smith178fefb2007-08-24 21:59:45 +000089 def test_anydbm_access(self):
90 self.init_db()
91 f = anydbm.open(_fname, 'r')
92 key = "a".encode("ascii")
93 assert(key in f)
94 assert(f[key] == b"Python:")
95 f.close()
96
Skip Montanaro4894a972002-03-18 03:00:37 +000097 def read_helper(self, f):
98 keys = self.keys_helper(f)
99 for key in self._dict:
Martin v. Löwisca8dd912007-08-07 07:15:50 +0000100 self.assertEqual(self._dict[key], f[key.encode("ascii")])
Skip Montanaro4894a972002-03-18 03:00:37 +0000101
102 def init_db(self):
103 f = anydbm.open(_fname, 'n')
104 for k in self._dict:
Martin v. Löwisca8dd912007-08-07 07:15:50 +0000105 f[k.encode("ascii")] = self._dict[k]
Skip Montanaro4894a972002-03-18 03:00:37 +0000106 f.close()
107
108 def keys_helper(self, f):
Martin v. Löwisca8dd912007-08-07 07:15:50 +0000109 keys = sorted(k.decode("ascii") for k in f.keys())
Guido van Rossumcc2b0162007-02-11 06:12:03 +0000110 dkeys = sorted(self._dict.keys())
Skip Montanaro4894a972002-03-18 03:00:37 +0000111 self.assertEqual(keys, dkeys)
112 return keys
113
114 def tearDown(self):
Gregory P. Smith178fefb2007-08-24 21:59:45 +0000115 delete_files()
Skip Montanaro4894a972002-03-18 03:00:37 +0000116
117 def setUp(self):
Gregory P. Smith178fefb2007-08-24 21:59:45 +0000118 delete_files()
119
Skip Montanaro4894a972002-03-18 03:00:37 +0000120
121def test_main():
122 try:
Gregory P. Smith178fefb2007-08-24 21:59:45 +0000123 for module in dbm_iterator():
124 test_support.run_unittest(AnyDBMTestCase)
Skip Montanaro4894a972002-03-18 03:00:37 +0000125 finally:
Gregory P. Smith178fefb2007-08-24 21:59:45 +0000126 delete_files()
Skip Montanaro4894a972002-03-18 03:00:37 +0000127
128if __name__ == "__main__":
129 test_main()