bpo-31026: Fix test_dbm if dbm.ndbm is build with Berkeley DB. (GH-6632) · python/cpython@70af06c

2 files changed

lines changed

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')

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: