Skip to content

Commit fec9dec

Browse files
committed
Consolidate setdefault tests and improve test coverage
1 parent 3fdf79d commit fec9dec

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

Lib/test/test_dbm.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,22 @@ def test_anydbm_modification(self):
9393
# setdefault() works as in the dict interface
9494
self.assertEqual(f.setdefault(b'xxx', b'foo'), b'foo')
9595
self.assertEqual(f[b'xxx'], b'foo')
96+
self.assertEqual(f.setdefault(b'g', b'bar'), b"indented")
97+
self.assertEqual(f[b'g'], b"indented")
98+
self.assertNotEqual(f[b'g'], b'bar')
99+
with self.assertRaises(TypeError):
100+
f.setdefault(b'key_without_default')
101+
with self.assertRaises(TypeError):
102+
f.setdefault(b'g', b'value', b'extra')
103+
if self.module.__name__ in ('dbm.dumb', 'dbm.gnu', 'dbm.ndbm'):
104+
with self.assertRaises(TypeError):
105+
f.setdefault(b'new_key', 123)
106+
f.setdefault(b'g', 123)
107+
if self.module.__name__ == "dbm.sqlite3":
108+
f.setdefault(b'new_key', 123)
109+
self.assertEqual(f[b'new_key'], b'123')
110+
f.setdefault(b'g', 123)
111+
self.assertNotEqual(f[b'g'], b'123')
96112
f.close()
97113

98114
def test_anydbm_read(self):
@@ -105,6 +121,11 @@ def test_anydbm_read(self):
105121
self.assertIsNone(f.get(b'xxx'))
106122
with self.assertRaises(KeyError):
107123
f[b'xxx']
124+
with self.assertRaises(dbm.error):
125+
f.setdefault(b'readonly_key', b'readonly_value')
126+
f.setdefault(b'a', b'foo')
127+
self.assertEqual(f[b'a'], b'Python:')
128+
self.assertNotEqual(f[b'a'], b'foo')
108129
f.close()
109130

110131
def test_anydbm_keys(self):
@@ -124,9 +145,7 @@ def test_empty_value(self):
124145
self.assertIn(b'empty', f)
125146
self.assertEqual(f[b'empty'], b'')
126147
self.assertEqual(f.get(b'empty'), b'')
127-
# setdefault raises TypeError when missing default argument
128-
with self.assertRaises(TypeError):
129-
f.setdefault(b'empty')
148+
self.assertEqual(f.setdefault(b'empty', b'x'), b'')
130149
f.close()
131150

132151
def test_anydbm_access(self):

Lib/test/test_dbm_ndbm.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@ def test_empty_value(self):
4848
self.assertIn(b'empty', self.d)
4949
self.assertEqual(self.d[b'empty'], b'')
5050
self.assertEqual(self.d.get(b'empty'), b'')
51-
# setdefault raises TypeError when missing default argument
52-
with self.assertRaises(TypeError):
53-
self.d.setdefault(b'empty')
51+
self.assertEqual(self.d.setdefault(b'empty', b'x'), b'')
5452
self.d.close()
5553

5654
def test_modes(self):

0 commit comments

Comments
 (0)