From e57d3e3a13d1d4c6a057e47db8361695194bb5ab Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Sun, 29 Apr 2018 06:37:21 -0700 Subject: [PATCH] bpo-31026: Fix test_dbm if dbm.ndbm is build with Berkeley DB. (GH-6632) (cherry picked from commit 70af06cdc4e8fbee0b9d7d46bdc193097d4bc71f) Co-authored-by: Serhiy Storchaka --- Lib/test/test_dbm.py | 17 +++++++++++++++-- Lib/test/test_dbm_ndbm.py | 14 ++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_dbm.py b/Lib/test/test_dbm.py index fb8980780f..78c32c4c93 100644 --- a/Lib/test/test_dbm.py +++ b/Lib/test/test_dbm.py @@ -38,8 +38,7 @@ def delete_files(): class AnyDBMTestCase: - _dict = {'0': b'', - 'a': b'Python:', + _dict = {'a': b'Python:', 'b': b'Programming', 'c': b'the', 'd': b'way', @@ -109,6 +108,20 @@ class AnyDBMTestCase: keys = self.keys_helper(f) f.close() + def test_empty_value(self): + if getattr(dbm._defaultmod, 'library', None) == 'Berkeley DB': + self.skipTest("Berkeley DB doesn't distinguish the empty value " + "from the absent one") + f = dbm.open(_fname, 'c') + self.assertEqual(f.keys(), []) + f[b'empty'] = b'' + self.assertEqual(f.keys(), [b'empty']) + self.assertIn(b'empty', f) + self.assertEqual(f[b'empty'], b'') + self.assertEqual(f.get(b'empty'), b'') + self.assertEqual(f.setdefault(b'empty'), b'') + f.close() + def test_anydbm_access(self): self.init_db() f = dbm.open(_fname, 'r') diff --git a/Lib/test/test_dbm_ndbm.py b/Lib/test/test_dbm_ndbm.py index f921167ca4..49b88f5ccc 100644 --- a/Lib/test/test_dbm_ndbm.py +++ b/Lib/test/test_dbm_ndbm.py @@ -36,6 +36,20 @@ class DbmTestCase(unittest.TestCase): self.assertEqual(self.d[b'xxx'], b'foo') self.d.close() + def test_empty_value(self): + if dbm.ndbm.library == 'Berkeley DB': + self.skipTest("Berkeley DB doesn't distinguish the empty value " + "from the absent one") + self.d = dbm.ndbm.open(self.filename, 'c') + self.assertEqual(self.d.keys(), []) + self.d['empty'] = '' + self.assertEqual(self.d.keys(), [b'empty']) + self.assertIn(b'empty', self.d) + self.assertEqual(self.d[b'empty'], b'') + self.assertEqual(self.d.get(b'empty'), b'') + self.assertEqual(self.d.setdefault(b'empty'), b'') + self.d.close() + def test_modes(self): for mode in ['r', 'rw', 'w', 'n']: try: -- 2.40.0