2 """Test script for the bsddb C module by Roger E. Masse
3 Adapted to unittest format and expanded scope by Raymond Hettinger
7 import dbhash
# Just so we know it's imported
9 from test
import test_support
12 class TestBSDDB(unittest
.TestCase
):
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():
23 if self
.fname
is None:
30 def test_getitem(self
):
31 for k
, v
in self
.d
.iteritems():
32 self
.assertEqual(self
.f
[k
], v
)
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
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
):
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
):
84 self
.assert_(k
in self
.f
)
85 self
.assert_('not here' not in self
.f
)
87 def test_has_key(self
):
89 self
.assert_(self
.f
.has_key(k
))
90 self
.assert_(not self
.f
.has_key('not here'))
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
))
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
))
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')
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
:
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
):
144 openmethod
= [bsddb
.btopen
]
146 class TestHashTable(TestBSDDB
):
147 fname
= test_support
.TESTFN
148 openmethod
= [bsddb
.hashopen
]
150 class TestHashTable_InMemory(TestBSDDB
):
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(
163 TestHashTable_InMemory
,
166 if __name__
== "__main__":
167 test_main(verbose
=True)