blob: 367360f95e1fac6bab1abd5b222c48bc282a1819 [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
14def _delete_files():
15 # we don't know the precise name the underlying database uses
16 # so we use glob to locate all names
17 for f in glob.glob(_fname + "*"):
18 try:
19 os.unlink(f)
20 except OSError:
21 pass
22
23class AnyDBMTestCase(unittest.TestCase):
Martin v. Löwisca8dd912007-08-07 07:15:50 +000024 _dict = {'0': b'',
25 'a': b'Python:',
26 'b': b'Programming',
27 'c': b'the',
28 'd': b'way',
29 'f': b'Guido',
30 'g': b'intended',
Skip Montanaro4894a972002-03-18 03:00:37 +000031 }
32
33 def __init__(self, *args):
34 unittest.TestCase.__init__(self, *args)
35
36 def test_anydbm_creation(self):
37 f = anydbm.open(_fname, 'c')
Guido van Rossum49dc35b2007-03-08 01:17:51 +000038 self.assertEqual(list(f.keys()), [])
Skip Montanaro4894a972002-03-18 03:00:37 +000039 for key in self._dict:
Martin v. Löwisca8dd912007-08-07 07:15:50 +000040 f[key.encode("ascii")] = self._dict[key]
Skip Montanaro4894a972002-03-18 03:00:37 +000041 self.read_helper(f)
42 f.close()
43
44 def test_anydbm_modification(self):
45 self.init_db()
46 f = anydbm.open(_fname, 'c')
Martin v. Löwisca8dd912007-08-07 07:15:50 +000047 self._dict['g'] = f[b'g'] = b"indented"
Skip Montanaro4894a972002-03-18 03:00:37 +000048 self.read_helper(f)
49 f.close()
50
51 def test_anydbm_read(self):
52 self.init_db()
53 f = anydbm.open(_fname, 'r')
54 self.read_helper(f)
55 f.close()
56
57 def test_anydbm_keys(self):
58 self.init_db()
59 f = anydbm.open(_fname, 'r')
60 keys = self.keys_helper(f)
61 f.close()
62
63 def read_helper(self, f):
64 keys = self.keys_helper(f)
65 for key in self._dict:
Martin v. Löwisca8dd912007-08-07 07:15:50 +000066 self.assertEqual(self._dict[key], f[key.encode("ascii")])
Skip Montanaro4894a972002-03-18 03:00:37 +000067
68 def init_db(self):
69 f = anydbm.open(_fname, 'n')
70 for k in self._dict:
Martin v. Löwisca8dd912007-08-07 07:15:50 +000071 f[k.encode("ascii")] = self._dict[k]
Skip Montanaro4894a972002-03-18 03:00:37 +000072 f.close()
73
74 def keys_helper(self, f):
Martin v. Löwisca8dd912007-08-07 07:15:50 +000075 keys = sorted(k.decode("ascii") for k in f.keys())
Guido van Rossumcc2b0162007-02-11 06:12:03 +000076 dkeys = sorted(self._dict.keys())
Skip Montanaro4894a972002-03-18 03:00:37 +000077 self.assertEqual(keys, dkeys)
78 return keys
79
80 def tearDown(self):
81 _delete_files()
82
83 def setUp(self):
84 _delete_files()
85
86def test_main():
87 try:
88 test_support.run_unittest(AnyDBMTestCase)
89 finally:
90 _delete_files()
91
92if __name__ == "__main__":
93 test_main()