summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_dbm_dumb.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_dbm_dumb.py')
-rw-r--r--Lib/test/test_dbm_dumb.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py
index 4f03ae7..dc88ca6 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
@@ -183,6 +185,47 @@ class DumbDBMTestCase(unittest.TestCase):
self.assertEqual(expected, got)
f.close()
+ def test_context_manager(self):
+ with dumbdbm.open(_fname, 'c') as db:
+ db["dumbdbm context manager"] = "context manager"
+
+ with dumbdbm.open(_fname, 'r') as db:
+ self.assertEqual(list(db.keys()), [b"dumbdbm context manager"])
+
+ 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 test_eval(self):
+ with open(_fname + '.dir', 'w') as stream:
+ stream.write("str(print('Hacked!')), 0\n")
+ with support.captured_stdout() as stdout:
+ with self.assertRaises(ValueError):
+ with dumbdbm.open(_fname) as f:
+ pass
+ self.assertEqual(stdout.getvalue(), '')
+
def tearDown(self):
_delete_files()