summaryrefslogtreecommitdiff
path: root/lib/python2.7/test/test_shelve.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/test/test_shelve.py')
-rw-r--r--lib/python2.7/test/test_shelve.py163
1 files changed, 163 insertions, 0 deletions
diff --git a/lib/python2.7/test/test_shelve.py b/lib/python2.7/test/test_shelve.py
new file mode 100644
index 0000000..df56625
--- /dev/null
+++ b/lib/python2.7/test/test_shelve.py
@@ -0,0 +1,163 @@
+import os
+import unittest
+import shelve
+import glob
+from test import test_support
+
+test_support.import_module('anydbm', deprecated=True)
+
+class TestCase(unittest.TestCase):
+
+ fn = "shelftemp" + os.extsep + "db"
+
+ def test_close(self):
+ d1 = {}
+ s = shelve.Shelf(d1, protocol=2, writeback=False)
+ s['key1'] = [1,2,3,4]
+ self.assertEqual(s['key1'], [1,2,3,4])
+ self.assertEqual(len(s), 1)
+ s.close()
+ self.assertRaises(ValueError, len, s)
+ try:
+ s['key1']
+ except ValueError:
+ pass
+ else:
+ self.fail('Closed shelf should not find a key')
+
+ def test_ascii_file_shelf(self):
+ try:
+ s = shelve.open(self.fn, protocol=0)
+ s['key1'] = (1,2,3,4)
+ self.assertEqual(s['key1'], (1,2,3,4))
+ s.close()
+ finally:
+ for f in glob.glob(self.fn+"*"):
+ os.unlink(f)
+
+ def test_binary_file_shelf(self):
+ try:
+ s = shelve.open(self.fn, protocol=1)
+ s['key1'] = (1,2,3,4)
+ self.assertEqual(s['key1'], (1,2,3,4))
+ s.close()
+ finally:
+ for f in glob.glob(self.fn+"*"):
+ os.unlink(f)
+
+ def test_proto2_file_shelf(self):
+ try:
+ s = shelve.open(self.fn, protocol=2)
+ s['key1'] = (1,2,3,4)
+ self.assertEqual(s['key1'], (1,2,3,4))
+ s.close()
+ finally:
+ for f in glob.glob(self.fn+"*"):
+ os.unlink(f)
+
+ def test_in_memory_shelf(self):
+ d1 = {}
+ s = shelve.Shelf(d1, protocol=0)
+ s['key1'] = (1,2,3,4)
+ self.assertEqual(s['key1'], (1,2,3,4))
+ s.close()
+ d2 = {}
+ s = shelve.Shelf(d2, protocol=1)
+ s['key1'] = (1,2,3,4)
+ self.assertEqual(s['key1'], (1,2,3,4))
+ s.close()
+
+ self.assertEqual(len(d1), 1)
+ self.assertNotEqual(d1, d2)
+
+ def test_mutable_entry(self):
+ d1 = {}
+ s = shelve.Shelf(d1, protocol=2, writeback=False)
+ s['key1'] = [1,2,3,4]
+ self.assertEqual(s['key1'], [1,2,3,4])
+ s['key1'].append(5)
+ self.assertEqual(s['key1'], [1,2,3,4])
+ s.close()
+
+ d2 = {}
+ s = shelve.Shelf(d2, protocol=2, writeback=True)
+ s['key1'] = [1,2,3,4]
+ self.assertEqual(s['key1'], [1,2,3,4])
+ s['key1'].append(5)
+ self.assertEqual(s['key1'], [1,2,3,4,5])
+ s.close()
+
+ self.assertEqual(len(d1), 1)
+ self.assertEqual(len(d2), 1)
+
+ def test_writeback_also_writes_immediately(self):
+ # Issue 5754
+ d = {}
+ s = shelve.Shelf(d, writeback=True)
+ s['key'] = [1]
+ p1 = d['key'] # Will give a KeyError if backing store not updated
+ s['key'].append(2)
+ s.close()
+ p2 = d['key']
+ self.assertNotEqual(p1, p2) # Write creates new object in store
+
+
+from test import mapping_tests
+
+class TestShelveBase(mapping_tests.BasicTestMappingProtocol):
+ fn = "shelftemp.db"
+ counter = 0
+ def __init__(self, *args, **kw):
+ self._db = []
+ mapping_tests.BasicTestMappingProtocol.__init__(self, *args, **kw)
+ type2test = shelve.Shelf
+ def _reference(self):
+ return {"key1":"value1", "key2":2, "key3":(1,2,3)}
+ def _empty_mapping(self):
+ if self._in_mem:
+ x= shelve.Shelf({}, **self._args)
+ else:
+ self.counter+=1
+ x= shelve.open(self.fn+str(self.counter), **self._args)
+ self._db.append(x)
+ return x
+ def tearDown(self):
+ for db in self._db:
+ db.close()
+ self._db = []
+ if not self._in_mem:
+ for f in glob.glob(self.fn+"*"):
+ test_support.unlink(f)
+
+class TestAsciiFileShelve(TestShelveBase):
+ _args={'protocol':0}
+ _in_mem = False
+class TestBinaryFileShelve(TestShelveBase):
+ _args={'protocol':1}
+ _in_mem = False
+class TestProto2FileShelve(TestShelveBase):
+ _args={'protocol':2}
+ _in_mem = False
+class TestAsciiMemShelve(TestShelveBase):
+ _args={'protocol':0}
+ _in_mem = True
+class TestBinaryMemShelve(TestShelveBase):
+ _args={'protocol':1}
+ _in_mem = True
+class TestProto2MemShelve(TestShelveBase):
+ _args={'protocol':2}
+ _in_mem = True
+
+def test_main():
+ test_support.run_unittest(
+ TestAsciiFileShelve,
+ TestBinaryFileShelve,
+ TestProto2FileShelve,
+ TestAsciiMemShelve,
+ TestBinaryMemShelve,
+ TestProto2MemShelve,
+ TestCase
+ )
+
+if __name__ == "__main__":
+ test_main()