blob: e7c4b50cab5d40c88c76b570511f48982372afc2 [file] [log] [blame]
Skip Montanaro3bf99e32002-12-08 18:36:24 +00001import os
2import unittest
3import shelve
4import glob
5from test import test_support
6
7class TestCase(unittest.TestCase):
8
9 fn = "shelftemp.db"
Tim Peters6578dc92002-12-24 18:31:27 +000010
Skip Montanaro3bf99e32002-12-08 18:36:24 +000011 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)
20
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)
30
31 def test_in_memory_shelf(self):
32 d1 = {}
33 s = shelve.Shelf(d1, binary=False)
34 s['key1'] = (1,2,3,4)
35 self.assertEqual(s['key1'], (1,2,3,4))
36 s.close()
37 d2 = {}
38 s = shelve.Shelf(d2, binary=True)
39 s['key1'] = (1,2,3,4)
40 self.assertEqual(s['key1'], (1,2,3,4))
41 s.close()
42
43 self.assertEqual(len(d1), 1)
44 self.assertNotEqual(d1, d2)
45
Raymond Hettinger2c2d3222003-03-09 07:05:43 +000046from test_userdict import TestMappingProtocol
Skip Montanaro3bf99e32002-12-08 18:36:24 +000047
Raymond Hettinger2c2d3222003-03-09 07:05:43 +000048class TestShelveBase(TestMappingProtocol):
49 fn = "shelftemp.db"
50 counter = 0
51 def __init__(self, *args, **kw):
52 self._db = []
53 TestMappingProtocol.__init__(self, *args, **kw)
54 _tested_class = shelve.Shelf
55 def _reference(self):
56 return {"key1":"value1", "key2":2, "key3":(1,2,3)}
57 def _empty_mapping(self):
58 if self._in_mem:
59 x= shelve.Shelf({}, binary = self._binary)
60 else:
61 self.counter+=1
62 x= shelve.open(self.fn+str(self.counter), binary=self._binary)
63 self._db.append(x)
64 return x
65 def tearDown(self):
66 for db in self._db:
67 db.close()
68 self._db = []
69 if not self._in_mem:
70 for f in glob.glob(self.fn+"*"):
71 os.unlink(f)
72
73class TestAsciiFileShelve(TestShelveBase):
74 _binary = False
75 _in_mem = False
76class TestBinaryFileShelve(TestShelveBase):
77 _binary = True
78 _in_mem = False
79class TestAsciiMemShelve(TestShelveBase):
80 _binary = False
81 _in_mem = True
82class TestBinaryMemShelve(TestShelveBase):
83 _binary = True
84 _in_mem = True
85
86def test_main():
87 suite = unittest.TestSuite()
88 suite.addTest(unittest.makeSuite(TestAsciiFileShelve))
89 suite.addTest(unittest.makeSuite(TestBinaryFileShelve))
90 suite.addTest(unittest.makeSuite(TestAsciiMemShelve))
91 suite.addTest(unittest.makeSuite(TestBinaryMemShelve))
92 suite.addTest(unittest.makeSuite(TestCase))
93 test_support.run_suite(suite)
Skip Montanaro3bf99e32002-12-08 18:36:24 +000094
95if __name__ == "__main__":
96 test_main()