summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2014-04-26 20:56:52 (GMT)
committerBenjamin Peterson <benjamin@python.org>2014-04-26 20:56:52 (GMT)
commite3083d3ad541432e2420869c7ed56fb9aff7a453 (patch)
treec1bffd6775a90a4e341e13c5fd8a2a6229461e5a /Lib/test
parentd4992dccfb52ef4c0f4f9417b3e18fd7bd56476b (diff)
downloadcpython-e3083d3ad541432e2420869c7ed56fb9aff7a453.zip
cpython-e3083d3ad541432e2420869c7ed56fb9aff7a453.tar.gz
cpython-e3083d3ad541432e2420869c7ed56fb9aff7a453.tar.bz2
make operations on closed dumb databases raise a consistent exception (closes #19385)
Patch by Claudiu Popa.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_dbm_dumb.py29
1 files changed, 25 insertions, 4 deletions
diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py
index 7601e64..29f48a3 100644
--- a/Lib/test/test_dbm_dumb.py
+++ b/Lib/test/test_dbm_dumb.py
@@ -3,10 +3,12 @@
"""
import io
+import operator
import os
import unittest
import dbm.dumb as dumbdbm
from test import support
+from functools import partial
_fname = support.TESTFN
@@ -190,12 +192,31 @@ class DumbDBMTestCase(unittest.TestCase):
with dumbdbm.open(_fname, 'r') as db:
self.assertEqual(list(db.keys()), [b"dumbdbm context manager"])
- # This currently just raises AttributeError rather than a specific
- # exception like the GNU or NDBM based implementations. See
- # http://bugs.python.org/issue19385 for details.
- with self.assertRaises(Exception):
+ with self.assertRaises(dumbdbm.error):
db.keys()
+ def test_check_closed(self):
+ f = dumbdbm.open(_fname, 'c')
+ f.close()
+
+ for meth in (partial(operator.delitem, f),
+ partial(operator.setitem, f, 'b'),
+ partial(operator.getitem, f),
+ partial(operator.contains, f)):
+ with self.assertRaises(dumbdbm.error) as cm:
+ meth('test')
+ self.assertEqual(str(cm.exception),
+ "DBM object has already been closed")
+
+ for meth in (operator.methodcaller('keys'),
+ operator.methodcaller('iterkeys'),
+ operator.methodcaller('items'),
+ len):
+ with self.assertRaises(dumbdbm.error) as cm:
+ meth(f)
+ self.assertEqual(str(cm.exception),
+ "DBM object has already been closed")
+
def tearDown(self):
_delete_files()