This commit was manufactured by cvs2svn to create tag 'r23b1-mac'.
[python/dscho.git] / Lib / test / test_shelve.py
bloba0274d5669d788d5a7697804566e9a8eb6d68673
1 import os
2 import unittest
3 import shelve
4 import glob
5 from test import test_support
7 class TestCase(unittest.TestCase):
9 fn = "shelftemp.db"
11 def test_ascii_file_shelf(self):
12 try:
13 s = shelve.open(self.fn, binary=False)
14 s['key1'] = (1,2,3,4)
15 self.assertEqual(s['key1'], (1,2,3,4))
16 s.close()
17 finally:
18 for f in glob.glob(self.fn+"*"):
19 os.unlink(f)
21 def test_binary_file_shelf(self):
22 try:
23 s = shelve.open(self.fn, binary=True)
24 s['key1'] = (1,2,3,4)
25 self.assertEqual(s['key1'], (1,2,3,4))
26 s.close()
27 finally:
28 for f in glob.glob(self.fn+"*"):
29 os.unlink(f)
31 def test_proto2_file_shelf(self):
32 try:
33 s = shelve.open(self.fn, protocol=2)
34 s['key1'] = (1,2,3,4)
35 self.assertEqual(s['key1'], (1,2,3,4))
36 s.close()
37 finally:
38 for f in glob.glob(self.fn+"*"):
39 os.unlink(f)
41 def test_in_memory_shelf(self):
42 d1 = {}
43 s = shelve.Shelf(d1, binary=False)
44 s['key1'] = (1,2,3,4)
45 self.assertEqual(s['key1'], (1,2,3,4))
46 s.close()
47 d2 = {}
48 s = shelve.Shelf(d2, binary=True)
49 s['key1'] = (1,2,3,4)
50 self.assertEqual(s['key1'], (1,2,3,4))
51 s.close()
53 self.assertEqual(len(d1), 1)
54 self.assertNotEqual(d1, d2)
56 def test_mutable_entry(self):
57 d1 = {}
58 s = shelve.Shelf(d1, protocol=2, writeback=False)
59 s['key1'] = [1,2,3,4]
60 self.assertEqual(s['key1'], [1,2,3,4])
61 s['key1'].append(5)
62 self.assertEqual(s['key1'], [1,2,3,4])
63 s.close()
65 d2 = {}
66 s = shelve.Shelf(d2, protocol=2, writeback=True)
67 s['key1'] = [1,2,3,4]
68 self.assertEqual(s['key1'], [1,2,3,4])
69 s['key1'].append(5)
70 self.assertEqual(s['key1'], [1,2,3,4,5])
71 s.close()
73 self.assertEqual(len(d1), 1)
74 self.assertEqual(len(d2), 1)
77 from test_userdict import TestMappingProtocol
79 class TestShelveBase(TestMappingProtocol):
80 fn = "shelftemp.db"
81 counter = 0
82 def __init__(self, *args, **kw):
83 self._db = []
84 TestMappingProtocol.__init__(self, *args, **kw)
85 _tested_class = shelve.Shelf
86 def _reference(self):
87 return {"key1":"value1", "key2":2, "key3":(1,2,3)}
88 def _empty_mapping(self):
89 if self._in_mem:
90 x= shelve.Shelf({}, **self._args)
91 else:
92 self.counter+=1
93 x= shelve.open(self.fn+str(self.counter), **self._args)
94 self._db.append(x)
95 return x
96 def tearDown(self):
97 for db in self._db:
98 db.close()
99 self._db = []
100 if not self._in_mem:
101 for f in glob.glob(self.fn+"*"):
102 os.unlink(f)
104 class TestAsciiFileShelve(TestShelveBase):
105 _args={'binary':False}
106 _in_mem = False
107 class TestBinaryFileShelve(TestShelveBase):
108 _args={'binary':True}
109 _in_mem = False
110 class TestProto2FileShelve(TestShelveBase):
111 _args={'protocol':2}
112 _in_mem = False
113 class TestAsciiMemShelve(TestShelveBase):
114 _args={'binary':False}
115 _in_mem = True
116 class TestBinaryMemShelve(TestShelveBase):
117 _args={'binary':True}
118 _in_mem = True
119 class TestProto2MemShelve(TestShelveBase):
120 _args={'protocol':2}
121 _in_mem = True
123 def test_main():
124 suite = unittest.TestSuite()
125 suite.addTest(unittest.makeSuite(TestAsciiFileShelve))
126 suite.addTest(unittest.makeSuite(TestBinaryFileShelve))
127 suite.addTest(unittest.makeSuite(TestProto2FileShelve))
128 suite.addTest(unittest.makeSuite(TestAsciiMemShelve))
129 suite.addTest(unittest.makeSuite(TestBinaryMemShelve))
130 suite.addTest(unittest.makeSuite(TestProto2MemShelve))
131 suite.addTest(unittest.makeSuite(TestCase))
132 test_support.run_suite(suite)
134 if __name__ == "__main__":
135 test_main()