Skip to content

Commit a26a297

Browse files
bpo-31026: Fix test_dbm if dbm.ndbm is build with Berkeley DB. (GH-6632)
(cherry picked from commit 70af06c) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
1 parent 1b27ec6 commit a26a297

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
@@ -38,8 +38,7 @@ def delete_files():
3838

3939

4040
class AnyDBMTestCase:
41-
_dict = {'0': b'',
42-
'a': b'Python:',
41+
_dict = {'a': b'Python:',
4342
'b': b'Programming',
4443
'c': b'the',
4544
'd': b'way',
@@ -109,6 +108,20 @@ def test_anydbm_keys(self):
109108
keys = self.keys_helper(f)
110109
f.close()
111110

111+
def test_empty_value(self):
112+
if getattr(dbm._defaultmod, 'library', None) == 'Berkeley DB':
113+
self.skipTest("Berkeley DB doesn't distinguish the empty value "
114+
"from the absent one")
115+
f = dbm.open(_fname, 'c')
116+
self.assertEqual(f.keys(), [])
117+
f[b'empty'] = b''
118+
self.assertEqual(f.keys(), [b'empty'])
119+
self.assertIn(b'empty', f)
120+
self.assertEqual(f[b'empty'], b'')
121+
self.assertEqual(f.get(b'empty'), b'')
122+
self.assertEqual(f.setdefault(b'empty'), b'')
123+
f.close()
124+
112125
def test_anydbm_access(self):
113126
self.init_db()
114127
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
@@ -36,6 +36,20 @@ def test_keys(self):
3636
self.assertEqual(self.d[b'xxx'], b'foo')
3737
self.d.close()
3838

39+
def test_empty_value(self):
40+
if dbm.ndbm.library == 'Berkeley DB':
41+
self.skipTest("Berkeley DB doesn't distinguish the empty value "
42+
"from the absent one")
43+
self.d = dbm.ndbm.open(self.filename, 'c')
44+
self.assertEqual(self.d.keys(), [])
45+
self.d['empty'] = ''
46+
self.assertEqual(self.d.keys(), [b'empty'])
47+
self.assertIn(b'empty', self.d)
48+
self.assertEqual(self.d[b'empty'], b'')
49+
self.assertEqual(self.d.get(b'empty'), b'')
50+
self.assertEqual(self.d.setdefault(b'empty'), b'')
51+
self.d.close()
52+
3953
def test_modes(self):
4054
for mode in ['r', 'rw', 'w', 'n']:
4155
try:

0 commit comments

Comments
 (0)