Index: Lib/test/test_dbm_base.py |
=================================================================== |
--- Lib/test/test_dbm_base.py (revision 0) |
+++ Lib/test/test_dbm_base.py (revision 0) |
@@ -0,0 +1,291 @@ |
+from test import support |
+import os |
+import unittest |
+from test.support import verbose, TESTFN, run_unittest, unlink |
+from collections import MutableMapping, KeysView, ItemsView, ValuesView |
+ |
+ |
+# We need three dbm objects at most at the same time to test. |
+filenames = filename, filename2, filenam3 = TESTFN, TESTFN + '2', TESTFN + '3' |
+ |
+ |
+class TestDbmBase(unittest.TestCase): |
+ |
+ _module = None |
+ |
+ def __init__(self, *args): |
+ super().__init__(*args) |
+ self.openner = lambda x=filename: self._module.open(x, 'c') |
+ |
+ def setUp(self): |
+ self.d, self.d2, self.d3 = None, None, None |
+ |
+ def _delete_db(self, file_name=filename): |
+ for suffix in ['', '.pag', '.dir', '.dat', '.db']: |
+ support.unlink(file_name + suffix) |
+ |
+ def tearDown(self): |
+ for d in (self.d, self.d2, self.d3): |
+ if d is not None: |
+ self.d.close() |
+ for fn in filenames: |
+ self._delete_db(fn) |
+ |
+ def test_get(self): |
+ self.d = self.openner() |
+ self.d['a'] = 'b' |
+ self.assertEqual(self.d.get('a'), b'b') |
+ self.assertEqual(self.d.get(b'a'), b'b') |
+ self.assertEqual(self.d.get('a', None), b'b') |
+ self.assertIsNone(self.d.get('b')) |
+ self.assertIsNone(self.d.get(b'b')) |
+ self.assertEqual(self.d.get('b', 'c'), 'c') |
+ |
+ def test_contains(self): |
+ self.d = self.openner() |
+ self.d['a'] = 'b' |
+ self.assertIn('a', self.d) |
+ self.assertIn(b'a', self.d) |
+ self.assertNotIn('b', self.d) |
+ |
+ def test_items(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.items(), set()) |
+ self.assertEqual(len(self.d.items()), 0) |
+ self.assertNotIn(('a', 'b'), self.d.items()) |
+ self.d['a'] = 'b' |
+ self.d['c'] = 'd' |
+ self.assertIn(('a', b'b'), self.d.items()) |
+ self.assertIn((b'a', b'b'), self.d.items()) |
+ self.assertIn((b'a', 'b'), self.d.items()) |
+ self.assertIn(('a', 'b'), self.d.items()) |
+ self.assertNotIn((b'a', 'c'), self.d.items()) |
+ self.assertNotIn(('a', 'c'), self.d.items()) |
+ self.assertNotIn(('a', None), self.d.items()) |
+ self.assertEqual(self.d.items(), set(((b'a', b'b'), (b'c', b'd')))) |
+ self.assertEqual(len(self.d.items()), 2) |
+ |
+ def test_items_set_operations(self): |
+ self.d, self.d2, self.d3 = map(self.openner, filenames) |
+ self.d.update({'a': '1', 'b': '2'}) |
+ self.d2.update({'a': '2', 'b': '2'}) |
+ self.d3.update({'d': '4', 'e': '5'}) |
+ self.assertEqual( |
+ self.d.items() & self.d.items(), {(b'a', b'1'), (b'b', b'2')}) |
+ self.assertEqual(self.d.items() & self.d2.items(), {(b'b', b'2')}) |
+ self.assertEqual(self.d.items() & self.d3.items(), set()) |
+ self.assertEqual(self.d.items() & set(self.d.items()), |
+ {(b'a', b'1'), (b'b', b'2')}) |
+ self.assertEqual(self.d.items() & set(self.d2.items()), {(b'b', b'2')}) |
+ self.assertEqual(self.d.items() & set(self.d3.items()), set()) |
+ |
+ self.assertEqual(self.d.items() | self.d.items(), |
+ {(b'a', b'1'), (b'b', b'2')}) |
+ self.assertEqual(self.d.items() | self.d2.items(), |
+ {(b'a', b'1'), (b'a', b'2'), (b'b', b'2')}) |
+ self.assertEqual(self.d.items() | self.d3.items(), |
+ {(b'a', b'1'), (b'b', b'2'), (b'd', b'4'), (b'e', b'5')}) |
+ self.assertEqual(self.d.items() | set(self.d.items()), |
+ {(b'a', b'1'), (b'b', b'2')}) |
+ self.assertEqual(self.d.items() | set(self.d2.items()), |
+ {(b'a', b'1'), (b'a', b'2'), (b'b', b'2')}) |
+ self.assertEqual(self.d.items() | set(self.d3.items()), |
+ {(b'a', b'1'), (b'b', b'2'), (b'd', b'4'), (b'e', b'5')}) |
+ |
+ self.assertEqual(self.d.items() ^ self.d.items(), set()) |
+ self.assertEqual(self.d.items() ^ self.d2.items(), |
+ {(b'a', b'1'), (b'a', b'2')}) |
+ self.assertEqual(self.d.items() ^ self.d3.items(), |
+ {(b'a', b'1'), (b'b', b'2'), (b'd', b'4'), (b'e', b'5')}) |
+ |
+ self.assertFalse(self.d.items().isdisjoint(self.d.items())) |
+ self.assertFalse(self.d.items().isdisjoint(self.d2.items())) |
+ self.assertFalse(self.d.items().isdisjoint(list(self.d2.items()))) |
+ self.assertFalse(self.d.items().isdisjoint(set(self.d2.items()))) |
+ self.assertTrue(self.d.items().isdisjoint({'x', 'y', 'z'})) |
+ self.assertTrue(self.d.items().isdisjoint(['x', 'y', 'z'])) |
+ self.assertTrue(self.d.items().isdisjoint(set(['x', 'y', 'z']))) |
+ self.assertTrue(self.d.items().isdisjoint(set(['x', 'y']))) |
+ self.assertTrue(self.d.items().isdisjoint({})) |
+ self.assertTrue(self.d.items().isdisjoint(self.d3.items())) |
+ |
+ self.d.clear() |
+ self.assertTrue(self.d.items().isdisjoint(set())) |
+ self.assertTrue(self.d.items().isdisjoint([])) |
+ self.assertTrue(self.d.items().isdisjoint(self.d.items())) |
+ self.assertTrue(self.d.items().isdisjoint([1])) |
+ |
+ def test_pop(self): |
+ self.d = self.openner() |
+ ar = self.d.pop('a') |
+ self.assertIsNone(self.d.pop('a')) |
+ self.d['a'] = 'b' |
+ self.d['c'] = 'd' |
+ self.assertIsNone(self.d.pop('e')) |
+ self.assertEqual(self.d.keys(), set((b'a', b'c'))) |
+ self.assertIsNone(self.d.pop('e', None)) |
+ self.assertEqual(self.d.keys(), set((b'a', b'c'))) |
+ self.assertEqual(self.d.pop('a'), b'b') |
+ self.assertEqual(set(self.d.keys()), {b'c'}) |
+ self.assertEqual(self.d.pop('c', None), b'd') |
+ self.assertEqual(self.d.keys(), set()) |
+ |
+ def test_popitem(self): |
+ self.d = self.openner() |
+ self.assertRaises(KeyError, self.d.popitem) |
+ self.d['a'] = 'b' |
+ self.assertEqual(self.d.popitem(), (b'a', b'b')) |
+ self.assertEqual(len(self.d), 0) |
+ self.assertRaises(KeyError, self.d.popitem) |
+ |
+ def test_clear(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.keys(), set()) |
+ self.d['a'] = 'b' |
+ self.d['c'] = 'c' |
+ self.d.clear() |
+ self.assertEqual(self.d.keys(), set()) |
+ |
+ def test_iteration(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.keys(), set()) |
+ self.assertRaises(StopIteration, next, iter(self.d)) |
+ self.d['a'] = 'b' |
+ self.d['c'] = 'd' |
+ gi = iter(self.d) |
+ self.assertEqual(set((next(gi), next(gi))), set((b'a', b'c'))) |
+ self.assertRaises(StopIteration, next, gi) |
+ |
+ def test_keys(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.keys(), set()) |
+ self.assertEqual(len(self.d.keys()), 0) |
+ self.d['a'] = 'b' |
+ self.d[b'bytes'] = b'data' |
+ self.d['12345678910'] = '019237410982340912840198242' |
+ self.assertEqual(len(self.d.keys()), 3) |
+ self.assertIn(b'a', self.d) |
+ self.assertNotIn(b'b', self.d) |
+ self.assertEqual(self.d[b'bytes'], b'data') |
+ |
+ def test_keys_set_operations(self): |
+ self.d, self.d2, self.d3 = map(self.openner, filenames) |
+ self.d.update({'a': '1', 'b': '2'}) |
+ self.d2.update({'b': '3', 'c': '2'}) |
+ self.d3.update({'d': '4', 'e': '5'}) |
+ self.assertEqual(self.d.keys() & self.d.keys(), {b'a', b'b'}) |
+ self.assertEqual(self.d.keys() & self.d2.keys(), {b'b'}) |
+ self.assertEqual(self.d.keys() & self.d3.keys(), set()) |
+ self.assertEqual(self.d.keys() & set(self.d.keys()), {b'a', b'b'}) |
+ self.assertEqual(self.d.keys() & set(self.d2.keys()), {b'b'}) |
+ self.assertEqual(self.d.keys() & set(self.d3.keys()), set()) |
+ |
+ self.assertEqual(self.d.keys() | self.d.keys(), {b'a', b'b'}) |
+ self.assertEqual(self.d.keys() | self.d2.keys(), {b'a', b'b', b'c'}) |
+ self.assertEqual(self.d.keys() | self.d3.keys(), {b'a', b'b', b'd', b'e'}) |
+ self.assertEqual(self.d.keys() | set(self.d.keys()), {b'a', b'b'}) |
+ self.assertEqual(self.d.keys() | set(self.d2.keys()), {b'a', b'b', b'c'}) |
+ self.assertEqual(self.d.keys() | set(self.d3.keys()), |
+ {b'a', b'b', b'd', b'e'}) |
+ |
+ self.assertEqual(self.d.keys() ^ self.d.keys(), set()) |
+ self.assertEqual(self.d.keys() ^ self.d2.keys(), {b'a', b'c'}) |
+ self.assertEqual(self.d.keys() ^ self.d3.keys(), {b'a', b'b', b'd', b'e'}) |
+ self.assertEqual(self.d.keys() ^ set(self.d.keys()), set()) |
+ self.assertEqual(self.d.keys() ^ set(self.d2.keys()), {b'a', b'c'}) |
+ self.assertEqual(self.d.keys() ^ set(self.d3.keys()), |
+ {b'a', b'b', b'd', b'e'}) |
+ |
+ self.assertFalse(self.d.keys().isdisjoint(self.d.keys())) |
+ self.assertFalse(self.d.keys().isdisjoint(self.d2.keys())) |
+ self.assertFalse(self.d.keys().isdisjoint(list(self.d2.keys()))) |
+ self.assertFalse(self.d.keys().isdisjoint(set(self.d2.keys()))) |
+ self.assertTrue(self.d.keys().isdisjoint({b'x', b'y', b'z'})) |
+ self.assertTrue(self.d.keys().isdisjoint([b'x', b'y', b'z'])) |
+ self.assertTrue(self.d.keys().isdisjoint(set([b'x', b'y', b'z']))) |
+ self.assertTrue(self.d.keys().isdisjoint(set([b'x', b'y']))) |
+ self.assertTrue(self.d.keys().isdisjoint([b'x', b'y'])) |
+ self.assertTrue(self.d.keys().isdisjoint({})) |
+ self.assertTrue(self.d.keys().isdisjoint(self.d3.keys())) |
+ |
+ self.d.clear() |
+ self.assertTrue(self.d.keys().isdisjoint(set())) |
+ self.assertTrue(self.d.keys().isdisjoint([])) |
+ self.assertTrue(self.d.keys().isdisjoint(self.d.keys())) |
+ self.assertTrue(self.d.keys().isdisjoint(['1'])) |
+ |
+ def test_keys_richcompare(self): |
+ self.d, self.d2 = map(self.openner, filenames[:2]) |
+ self.d['a'] = 'a' |
+ self.d2['a'] = 'a' |
+ keys1, keys2 = self.d.keys(), self.d2.keys() |
+ self.assertEqual(keys1, keys2) |
+ self.d['b'] = 'b' |
+ self.assertNotEqual(keys1, keys2) |
+ self.assertGreater(keys1, keys2) |
+ self.assertGreaterEqual(keys1, keys2) |
+ self.assertLess(keys2, keys1) |
+ self.assertLessEqual(keys2, keys1) |
+ |
+ def test_values(self): |
+ self.d = self.openner() |
+ self.assertEqual(set(self.d.values()), set()) |
+ self.assertEqual(len(self.d.values()), 0) |
+ self.d['a'] = 'b' |
+ self.d['c'] = 'd' |
+ self.assertSameElements((b'b', b'd'), self.d.values()) |
+ self.assertEqual(len(self.d.values()), 2) |
+ |
+ def test_abc(self): |
+ self.d = self.openner() |
+ self.assertIsInstance(self.d, MutableMapping) |
+ self.assertIsInstance(self.d.keys(), KeysView) |
+ self.assertIsInstance(self.d.values(), ValuesView) |
+ self.assertIsInstance(self.d.items(), ItemsView) |
+ |
+ def test_update1(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.keys(), set()) |
+ self.d['a'] = 'a' |
+ self.d.update({'b':'b', 'c':'c'}) |
+ self.assertRaises(TypeError, self.d.update, None) |
+ self.assertRaises(TypeError, self.d.update, {1:1}) |
+ self.assertRaises(TypeError, self.d.update, {'b':1}) |
+ self.assertEqual(self.d.items(), set(((b'a', b'a'), (b'b', b'b'), |
+ (b'c', b'c')))) |
+ |
+ def test_update2(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.keys(), set()) |
+ self.d['a'] = 'a' |
+ class Other(): |
+ def __init__(self, dic): |
+ self._dict = dic |
+ def keys(self): |
+ return self._dict.keys() |
+ def __getitem__(self, key): |
+ return self._dict[key] |
+ |
+ self.d.update(Other({'b':'b', 'c':'c'})) |
+ self.assertEqual(self.d.items(), set(((b'a', b'a'), (b'b', b'b'), |
+ (b'c', b'c')))) |
+ |
+ def test_update3(self): |
+ self.d = self.openner() |
+ self.assertEqual(self.d.keys(), set()) |
+ self.d['a'] = 'a' |
+ self.d.update({b'b':b'b', b'c':b'c'}.items()) |
+ self.assertEqual(self.d.items(), set(((b'a', b'a'), (b'b', b'b'), |
+ (b'c', b'c')))) |
+ |
+ def test_error_conditions(self): |
+ # Try to open a non-existent database. |
+ self._delete_db() |
+ self.assertRaises(self._module.error, self._module.open, filename, 'r') |
+ # Try to access a closed database. |
+ self.d = self.openner() |
+ self.d.close() |
+ self.assertRaises(self._module.error, lambda: self.d['a']) |
+ # try pass an invalid open flag |
+ self.assertRaises(self._module.error, |
+ lambda: self._module.open(filename, 'rx').close()) |
Property changes on: Lib/test/test_dbm_base.py |
___________________________________________________________________ |
Added: svn:executable |
+ * |