5 from test
import test_support
7 test_support
.import_module('anydbm', deprecated
=True)
9 class TestCase(unittest
.TestCase
):
11 fn
= "shelftemp" + os
.extsep
+ "db"
15 s
= shelve
.Shelf(d1
, protocol
=2, writeback
=False)
17 self
.assertEqual(s
['key1'], [1,2,3,4])
18 self
.assertEqual(len(s
), 1)
20 self
.assertRaises(ValueError, len, s
)
26 self
.fail('Closed shelf should not find a key')
28 def test_ascii_file_shelf(self
):
30 s
= shelve
.open(self
.fn
, protocol
=0)
32 self
.assertEqual(s
['key1'], (1,2,3,4))
35 for f
in glob
.glob(self
.fn
+"*"):
38 def test_binary_file_shelf(self
):
40 s
= shelve
.open(self
.fn
, protocol
=1)
42 self
.assertEqual(s
['key1'], (1,2,3,4))
45 for f
in glob
.glob(self
.fn
+"*"):
48 def test_proto2_file_shelf(self
):
50 s
= shelve
.open(self
.fn
, protocol
=2)
52 self
.assertEqual(s
['key1'], (1,2,3,4))
55 for f
in glob
.glob(self
.fn
+"*"):
58 def test_in_memory_shelf(self
):
60 s
= shelve
.Shelf(d1
, protocol
=0)
62 self
.assertEqual(s
['key1'], (1,2,3,4))
65 s
= shelve
.Shelf(d2
, protocol
=1)
67 self
.assertEqual(s
['key1'], (1,2,3,4))
70 self
.assertEqual(len(d1
), 1)
71 self
.assertNotEqual(d1
, d2
)
73 def test_mutable_entry(self
):
75 s
= shelve
.Shelf(d1
, protocol
=2, writeback
=False)
77 self
.assertEqual(s
['key1'], [1,2,3,4])
79 self
.assertEqual(s
['key1'], [1,2,3,4])
83 s
= shelve
.Shelf(d2
, protocol
=2, writeback
=True)
85 self
.assertEqual(s
['key1'], [1,2,3,4])
87 self
.assertEqual(s
['key1'], [1,2,3,4,5])
90 self
.assertEqual(len(d1
), 1)
91 self
.assertEqual(len(d2
), 1)
93 def test_writeback_also_writes_immediately(self
):
96 s
= shelve
.Shelf(d
, writeback
=True)
98 p1
= d
['key'] # Will give a KeyError if backing store not updated
102 self
.assertNotEqual(p1
, p2
) # Write creates new object in store
105 from test
import mapping_tests
107 class TestShelveBase(mapping_tests
.BasicTestMappingProtocol
):
110 def __init__(self
, *args
, **kw
):
112 mapping_tests
.BasicTestMappingProtocol
.__init
__(self
, *args
, **kw
)
113 type2test
= shelve
.Shelf
114 def _reference(self
):
115 return {"key1":"value1", "key2":2, "key3":(1,2,3)}
116 def _empty_mapping(self
):
118 x
= shelve
.Shelf({}, **self
._args
)
121 x
= shelve
.open(self
.fn
+str(self
.counter
), **self
._args
)
129 for f
in glob
.glob(self
.fn
+"*"):
130 test_support
.unlink(f
)
132 class TestAsciiFileShelve(TestShelveBase
):
135 class TestBinaryFileShelve(TestShelveBase
):
138 class TestProto2FileShelve(TestShelveBase
):
141 class TestAsciiMemShelve(TestShelveBase
):
144 class TestBinaryMemShelve(TestShelveBase
):
147 class TestProto2MemShelve(TestShelveBase
):
152 test_support
.run_unittest(
154 TestBinaryFileShelve
,
155 TestProto2FileShelve
,
162 if __name__
== "__main__":