This commit was manufactured by cvs2svn to create tag 'r234c1'.
[python/dscho.git] / Lib / test / test_bsddb.py
blob73a2d966057f606aa2fb6f0f9493fa8d66671900
1 #! /usr/bin/env python
2 """Test script for the bsddb C module by Roger E. Masse
3 Adapted to unittest format and expanded scope by Raymond Hettinger
4 """
5 import os
6 import bsddb
7 import dbhash # Just so we know it's imported
8 import unittest
9 from test import test_support
10 from sets import Set
12 class TestBSDDB(unittest.TestCase):
14 def setUp(self):
15 self.f = self.openmethod[0](self.fname, 'c')
16 self.d = dict(q='Guido', w='van', e='Rossum', r='invented', t='Python', y='')
17 for k, v in self.d.iteritems():
18 self.f[k] = v
20 def tearDown(self):
21 self.f.sync()
22 self.f.close()
23 if self.fname is None:
24 return
25 try:
26 os.remove(self.fname)
27 except os.error:
28 pass
30 def test_getitem(self):
31 for k, v in self.d.iteritems():
32 self.assertEqual(self.f[k], v)
34 def test_len(self):
35 self.assertEqual(len(self.f), len(self.d))
37 def test_change(self):
38 self.f['r'] = 'discovered'
39 self.assertEqual(self.f['r'], 'discovered')
40 self.assert_('r' in self.f.keys())
41 self.assert_('discovered' in self.f.values())
43 def test_close_and_reopen(self):
44 if self.fname is None:
45 # if we're using an in-memory only db, we can't reopen it
46 # so finish here.
47 return
48 self.f.close()
49 self.f = self.openmethod[0](self.fname, 'w')
50 for k, v in self.d.iteritems():
51 self.assertEqual(self.f[k], v)
53 def assertSetEquals(self, seqn1, seqn2):
54 self.assertEqual(Set(seqn1), Set(seqn2))
56 def test_mapping_iteration_methods(self):
57 f = self.f
58 d = self.d
59 self.assertSetEquals(d, f)
60 self.assertSetEquals(d.keys(), f.keys())
61 self.assertSetEquals(d.values(), f.values())
62 self.assertSetEquals(d.items(), f.items())
63 self.assertSetEquals(d.iterkeys(), f.iterkeys())
64 self.assertSetEquals(d.itervalues(), f.itervalues())
65 self.assertSetEquals(d.iteritems(), f.iteritems())
67 def test_first_next_looping(self):
68 items = [self.f.first()]
69 for i in xrange(1, len(self.f)):
70 items.append(self.f.next())
71 self.assertSetEquals(items, self.d.items())
73 def test_previous_last_looping(self):
74 items = [self.f.last()]
75 for i in xrange(1, len(self.f)):
76 items.append(self.f.previous())
77 self.assertSetEquals(items, self.d.items())
79 def test_set_location(self):
80 self.assertEqual(self.f.set_location('e'), ('e', self.d['e']))
82 def test_contains(self):
83 for k in self.d:
84 self.assert_(k in self.f)
85 self.assert_('not here' not in self.f)
87 def test_has_key(self):
88 for k in self.d:
89 self.assert_(self.f.has_key(k))
90 self.assert_(not self.f.has_key('not here'))
92 def test_clear(self):
93 self.f.clear()
94 self.assertEqual(len(self.f), 0)
96 def test_popitem(self):
97 k, v = self.f.popitem()
98 self.assert_(k in self.d)
99 self.assert_(v in self.d.values())
100 self.assert_(k not in self.f)
101 self.assertEqual(len(self.d)-1, len(self.f))
103 def test_pop(self):
104 k = 'w'
105 v = self.f.pop(k)
106 self.assertEqual(v, self.d[k])
107 self.assert_(k not in self.f)
108 self.assert_(v not in self.f.values())
109 self.assertEqual(len(self.d)-1, len(self.f))
111 def test_get(self):
112 self.assertEqual(self.f.get('NotHere'), None)
113 self.assertEqual(self.f.get('NotHere', 'Default'), 'Default')
114 self.assertEqual(self.f.get('q', 'Default'), self.d['q'])
116 def test_setdefault(self):
117 self.assertEqual(self.f.setdefault('new', 'dog'), 'dog')
118 self.assertEqual(self.f.setdefault('r', 'cat'), self.d['r'])
120 def test_update(self):
121 new = dict(y='life', u='of', i='brian')
122 self.f.update(new)
123 self.d.update(new)
124 for k, v in self.d.iteritems():
125 self.assertEqual(self.f[k], v)
127 def test_keyordering(self):
128 if self.openmethod[0] is not bsddb.btopen:
129 return
130 keys = self.d.keys()
131 keys.sort()
132 self.assertEqual(self.f.first()[0], keys[0])
133 self.assertEqual(self.f.next()[0], keys[1])
134 self.assertEqual(self.f.last()[0], keys[-1])
135 self.assertEqual(self.f.previous()[0], keys[-2])
136 self.assertEqual(list(self.f), keys)
138 class TestBTree(TestBSDDB):
139 fname = test_support.TESTFN
140 openmethod = [bsddb.btopen]
142 class TestBTree_InMemory(TestBSDDB):
143 fname = None
144 openmethod = [bsddb.btopen]
146 class TestHashTable(TestBSDDB):
147 fname = test_support.TESTFN
148 openmethod = [bsddb.hashopen]
150 class TestHashTable_InMemory(TestBSDDB):
151 fname = None
152 openmethod = [bsddb.hashopen]
154 ## # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85
155 ## # appears broken... at least on
156 ## # Solaris Intel - rmasse 1/97
158 def test_main(verbose=None):
159 test_support.run_unittest(
160 TestBTree,
161 TestHashTable,
162 TestBTree_InMemory,
163 TestHashTable_InMemory,
166 if __name__ == "__main__":
167 test_main(verbose=True)