Change a variable type to avoid signed overflow; replace repeated '19999' constant...
[python.git] / Lib / test / test_gdbm.py
blobe76cc03d650950fbd64af2b1b9c93380115f5e3e
1 import unittest
2 import os
3 from test.test_support import (verbose, TESTFN, run_unittest, unlink,
4 import_module)
5 gdbm = import_module('gdbm')
8 filename = TESTFN
10 class TestGdbm(unittest.TestCase):
12 def setUp(self):
13 self.g = None
15 def tearDown(self):
16 if self.g is not None:
17 self.g.close()
18 unlink(filename)
20 def test_key_methods(self):
21 self.g = gdbm.open(filename, 'c')
22 self.assertEqual(self.g.keys(), [])
23 self.g['a'] = 'b'
24 self.g['12345678910'] = '019237410982340912840198242'
25 key_set = set(self.g.keys())
26 self.assertEqual(key_set, frozenset(['a', '12345678910']))
27 self.assertTrue(self.g.has_key('a'))
28 key = self.g.firstkey()
29 while key:
30 self.assertTrue(key in key_set)
31 key_set.remove(key)
32 key = self.g.nextkey(key)
33 self.assertRaises(KeyError, lambda: self.g['xxx'])
35 def test_error_conditions(self):
36 # Try to open a non-existent database.
37 unlink(filename)
38 self.assertRaises(gdbm.error, gdbm.open, filename, 'r')
39 # Try to access a closed database.
40 self.g = gdbm.open(filename, 'c')
41 self.g.close()
42 self.assertRaises(gdbm.error, lambda: self.g['a'])
43 # try pass an invalid open flag
44 self.assertRaises(gdbm.error, lambda: gdbm.open(filename, 'rx').close())
46 def test_flags(self):
47 # Test the flag parameter open() by trying all supported flag modes.
48 all = set(gdbm.open_flags)
49 # Test standard flags (presumably "crwn").
50 modes = all - set('fsu')
51 for mode in modes:
52 self.g = gdbm.open(filename, mode)
53 self.g.close()
55 # Test additional flags (presumably "fsu").
56 flags = all - set('crwn')
57 for mode in modes:
58 for flag in flags:
59 self.g = gdbm.open(filename, mode + flag)
60 self.g.close()
62 def test_reorganize(self):
63 self.g = gdbm.open(filename, 'c')
64 size0 = os.path.getsize(filename)
66 self.g['x'] = 'x' * 10000
67 size1 = os.path.getsize(filename)
68 self.assertTrue(size0 < size1)
70 del self.g['x']
71 # 'size' is supposed to be the same even after deleting an entry.
72 self.assertEqual(os.path.getsize(filename), size1)
74 self.g.reorganize()
75 size2 = os.path.getsize(filename)
76 self.assertTrue(size1 > size2 >= size0)
79 def test_main():
80 run_unittest(TestGdbm)
82 if __name__ == '__main__':
83 test_main()