3 from test
.test_support
import (verbose
, TESTFN
, run_unittest
, unlink
,
5 gdbm
= import_module('gdbm')
10 class TestGdbm(unittest
.TestCase
):
16 if self
.g
is not None:
20 def test_key_methods(self
):
21 self
.g
= gdbm
.open(filename
, 'c')
22 self
.assertEqual(self
.g
.keys(), [])
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()
30 self
.assertTrue(key
in key_set
)
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.
38 self
.assertRaises(gdbm
.error
, gdbm
.open, filename
, 'r')
39 # Try to access a closed database.
40 self
.g
= gdbm
.open(filename
, 'c')
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())
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')
52 self
.g
= gdbm
.open(filename
, mode
)
55 # Test additional flags (presumably "fsu").
56 flags
= all
- set('crwn')
59 self
.g
= gdbm
.open(filename
, mode
+ flag
)
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
)
71 # 'size' is supposed to be the same even after deleting an entry.
72 self
.assertEqual(os
.path
.getsize(filename
), size1
)
75 size2
= os
.path
.getsize(filename
)
76 self
.assertTrue(size1
> size2
>= size0
)
80 run_unittest(TestGdbm
)
82 if __name__
== '__main__':