blob: 802462c41121f1b59f98a1f739e0cdaf4ee133d2 [file] [log] [blame]
Skip Montanaro3bf99e32002-12-08 18:36:24 +00001import unittest
2import shelve
3import glob
4from test import test_support
5
6class TestCase(unittest.TestCase):
7
Guido van Rossum94b59bb2007-05-18 22:12:08 +00008 fn = "shelftemp.db"
Tim Peters6578dc92002-12-24 18:31:27 +00009
Guido van Rossum8d9db042007-05-18 21:57:09 +000010 def tearDown(self):
11 for f in glob.glob(self.fn+"*"):
Guido van Rossum94b59bb2007-05-18 22:12:08 +000012 test_support.unlink(f)
Guido van Rossum8d9db042007-05-18 21:57:09 +000013
Skip Montanaro3bf99e32002-12-08 18:36:24 +000014 def test_ascii_file_shelf(self):
Guido van Rossum8d9db042007-05-18 21:57:09 +000015 s = shelve.open(self.fn, protocol=0)
Skip Montanaro3bf99e32002-12-08 18:36:24 +000016 try:
Skip Montanaro3bf99e32002-12-08 18:36:24 +000017 s['key1'] = (1,2,3,4)
18 self.assertEqual(s['key1'], (1,2,3,4))
Skip Montanaro3bf99e32002-12-08 18:36:24 +000019 finally:
Guido van Rossum8d9db042007-05-18 21:57:09 +000020 s.close()
Skip Montanaro3bf99e32002-12-08 18:36:24 +000021
22 def test_binary_file_shelf(self):
Guido van Rossum8d9db042007-05-18 21:57:09 +000023 s = shelve.open(self.fn, protocol=1)
Skip Montanaro3bf99e32002-12-08 18:36:24 +000024 try:
Skip Montanaro3bf99e32002-12-08 18:36:24 +000025 s['key1'] = (1,2,3,4)
26 self.assertEqual(s['key1'], (1,2,3,4))
Skip Montanaro3bf99e32002-12-08 18:36:24 +000027 finally:
Guido van Rossum8d9db042007-05-18 21:57:09 +000028 s.close()
Skip Montanaro3bf99e32002-12-08 18:36:24 +000029
Martin v. Löwis153c9e42003-04-19 20:59:03 +000030 def test_proto2_file_shelf(self):
Guido van Rossum8d9db042007-05-18 21:57:09 +000031 s = shelve.open(self.fn, protocol=2)
Martin v. Löwis153c9e42003-04-19 20:59:03 +000032 try:
Martin v. Löwis153c9e42003-04-19 20:59:03 +000033 s['key1'] = (1,2,3,4)
34 self.assertEqual(s['key1'], (1,2,3,4))
Martin v. Löwis153c9e42003-04-19 20:59:03 +000035 finally:
Guido van Rossum8d9db042007-05-18 21:57:09 +000036 s.close()
Martin v. Löwis153c9e42003-04-19 20:59:03 +000037
Skip Montanaro3bf99e32002-12-08 18:36:24 +000038 def test_in_memory_shelf(self):
39 d1 = {}
Raymond Hettinger1bc82f82004-12-05 03:58:17 +000040 s = shelve.Shelf(d1, protocol=0)
Skip Montanaro3bf99e32002-12-08 18:36:24 +000041 s['key1'] = (1,2,3,4)
42 self.assertEqual(s['key1'], (1,2,3,4))
43 s.close()
44 d2 = {}
Raymond Hettinger1bc82f82004-12-05 03:58:17 +000045 s = shelve.Shelf(d2, protocol=1)
Skip Montanaro3bf99e32002-12-08 18:36:24 +000046 s['key1'] = (1,2,3,4)
47 self.assertEqual(s['key1'], (1,2,3,4))
48 s.close()
49
50 self.assertEqual(len(d1), 1)
51 self.assertNotEqual(d1, d2)
52
Martin v. Löwis153c9e42003-04-19 20:59:03 +000053 def test_mutable_entry(self):
54 d1 = {}
55 s = shelve.Shelf(d1, protocol=2, writeback=False)
56 s['key1'] = [1,2,3,4]
57 self.assertEqual(s['key1'], [1,2,3,4])
58 s['key1'].append(5)
59 self.assertEqual(s['key1'], [1,2,3,4])
60 s.close()
61
62 d2 = {}
63 s = shelve.Shelf(d2, protocol=2, writeback=True)
64 s['key1'] = [1,2,3,4]
65 self.assertEqual(s['key1'], [1,2,3,4])
66 s['key1'].append(5)
67 self.assertEqual(s['key1'], [1,2,3,4,5])
68 s.close()
69
70 self.assertEqual(len(d1), 1)
71 self.assertEqual(len(d2), 1)
72
73
Walter Dörwald0a6d0ff2004-05-31 16:29:04 +000074from test import mapping_tests
Skip Montanaro3bf99e32002-12-08 18:36:24 +000075
Walter Dörwald0a6d0ff2004-05-31 16:29:04 +000076class TestShelveBase(mapping_tests.BasicTestMappingProtocol):
Raymond Hettinger2c2d3222003-03-09 07:05:43 +000077 fn = "shelftemp.db"
78 counter = 0
79 def __init__(self, *args, **kw):
80 self._db = []
Walter Dörwald0a6d0ff2004-05-31 16:29:04 +000081 mapping_tests.BasicTestMappingProtocol.__init__(self, *args, **kw)
Walter Dörwald118f9312004-06-02 18:42:25 +000082 type2test = shelve.Shelf
Raymond Hettinger2c2d3222003-03-09 07:05:43 +000083 def _reference(self):
84 return {"key1":"value1", "key2":2, "key3":(1,2,3)}
85 def _empty_mapping(self):
86 if self._in_mem:
Martin v. Löwis153c9e42003-04-19 20:59:03 +000087 x= shelve.Shelf({}, **self._args)
Raymond Hettinger2c2d3222003-03-09 07:05:43 +000088 else:
89 self.counter+=1
Martin v. Löwis153c9e42003-04-19 20:59:03 +000090 x= shelve.open(self.fn+str(self.counter), **self._args)
Raymond Hettinger2c2d3222003-03-09 07:05:43 +000091 self._db.append(x)
92 return x
93 def tearDown(self):
94 for db in self._db:
95 db.close()
96 self._db = []
97 if not self._in_mem:
98 for f in glob.glob(self.fn+"*"):
Guido van Rossum94b59bb2007-05-18 22:12:08 +000099 test_support.unlink(f)
Raymond Hettinger2c2d3222003-03-09 07:05:43 +0000100
101class TestAsciiFileShelve(TestShelveBase):
Raymond Hettinger1bc82f82004-12-05 03:58:17 +0000102 _args={'protocol':0}
Raymond Hettinger2c2d3222003-03-09 07:05:43 +0000103 _in_mem = False
104class TestBinaryFileShelve(TestShelveBase):
Raymond Hettinger1bc82f82004-12-05 03:58:17 +0000105 _args={'protocol':1}
Martin v. Löwis153c9e42003-04-19 20:59:03 +0000106 _in_mem = False
107class TestProto2FileShelve(TestShelveBase):
108 _args={'protocol':2}
Raymond Hettinger2c2d3222003-03-09 07:05:43 +0000109 _in_mem = False
110class TestAsciiMemShelve(TestShelveBase):
Raymond Hettinger1bc82f82004-12-05 03:58:17 +0000111 _args={'protocol':0}
Raymond Hettinger2c2d3222003-03-09 07:05:43 +0000112 _in_mem = True
113class TestBinaryMemShelve(TestShelveBase):
Raymond Hettinger1bc82f82004-12-05 03:58:17 +0000114 _args={'protocol':1}
Martin v. Löwis153c9e42003-04-19 20:59:03 +0000115 _in_mem = True
116class TestProto2MemShelve(TestShelveBase):
117 _args={'protocol':2}
Raymond Hettinger2c2d3222003-03-09 07:05:43 +0000118 _in_mem = True
119
120def test_main():
Walter Dörwald21d3a322003-05-01 17:45:56 +0000121 test_support.run_unittest(
122 TestAsciiFileShelve,
123 TestBinaryFileShelve,
124 TestProto2FileShelve,
125 TestAsciiMemShelve,
126 TestBinaryMemShelve,
127 TestProto2MemShelve,
128 TestCase
129 )
Skip Montanaro3bf99e32002-12-08 18:36:24 +0000130
131if __name__ == "__main__":
132 test_main()