Skip to content

Commit d7b336f

Browse files
serhiy-storchakalarryhastings
authored andcommitted
[3.5] bpo-31026: Fix test_dbm if dbm.ndbm is build with Berkeley DB. (GH-6632)
(cherry picked from commit 70af06c)
1 parent 3fe1b19 commit d7b336f

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

Lib/test/test_dbm.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ def delete_files():
3939

4040

4141
class AnyDBMTestCase:
42-
_dict = {'0': b'',
43-
'a': b'Python:',
42+
_dict = {'a': b'Python:',
4443
'b': b'Programming',
4544
'c': b'the',
4645
'd': b'way',
@@ -101,6 +100,20 @@ def test_anydbm_keys(self):
101100
keys = self.keys_helper(f)
102101
f.close()
103102

103+
def test_empty_value(self):
104+
if getattr(dbm._defaultmod, 'library', None) == 'Berkeley DB':
105+
self.skipTest("Berkeley DB doesn't distinguish the empty value "
106+
"from the absent one")
107+
f = dbm.open(_fname, 'c')
108+
self.assertEqual(f.keys(), [])
109+
f[b'empty'] = b''
110+
self.assertEqual(f.keys(), [b'empty'])
111+
self.assertIn(b'empty', f)
112+
self.assertEqual(f[b'empty'], b'')
113+
self.assertEqual(f.get(b'empty'), b'')
114+
self.assertEqual(f.setdefault(b'empty'), b'')
115+
f.close()
116+
104117
def test_anydbm_access(self):
105118
self.init_db()
106119
f = dbm.open(_fname, 'r')

Lib/test/test_dbm_ndbm.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,20 @@ def test_keys(self):
2929
self.assertEqual(self.d[b'bytes'], b'data')
3030
self.d.close()
3131

32+
def test_empty_value(self):
33+
if dbm.ndbm.library == 'Berkeley DB':
34+
self.skipTest("Berkeley DB doesn't distinguish the empty value "
35+
"from the absent one")
36+
self.d = dbm.ndbm.open(self.filename, 'c')
37+
self.assertEqual(self.d.keys(), [])
38+
self.d['empty'] = ''
39+
self.assertEqual(self.d.keys(), [b'empty'])
40+
self.assertIn(b'empty', self.d)
41+
self.assertEqual(self.d[b'empty'], b'')
42+
self.assertEqual(self.d.get(b'empty'), b'')
43+
self.assertEqual(self.d.setdefault(b'empty'), b'')
44+
self.d.close()
45+
3246
def test_modes(self):
3347
for mode in ['r', 'rw', 'w', 'n']:
3448
try:

0 commit comments

Comments
 (0)