Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(17)

Unified Diff: Lib/test/test_dbm_base.py

Issue 4185044: Improve dbm modules — Python #9523 Base URL: http://svn.python.org/view/*checkout*/python/branches/py3k/
Patch Set:   Created 14 years, 2 months ago , Downloaded from: http://bugs.python.org/file20783/issue_9523.diff
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Lib/test/test_dbm.py ('k') | Lib/test/test_dbm_dumb.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
+ *
« no previous file with comments | « Lib/test/test_dbm.py ('k') | Lib/test/test_dbm_dumb.py » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b