PageRenderTime 48ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/SiRFLive/PythonStdLib/test/test_shelve.py

https://bitbucket.org/x893/sirflive
Python | 135 lines | 119 code | 16 blank | 0 comment | 15 complexity | bd34c41cc3c4b47b1bde69a22636432d MD5 | raw file
  1. import os
  2. import unittest
  3. import shelve
  4. import glob
  5. from test import test_support
  6. class TestCase(unittest.TestCase):
  7. fn = "shelftemp" + os.extsep + "db"
  8. def test_ascii_file_shelf(self):
  9. try:
  10. s = shelve.open(self.fn, binary=False)
  11. s['key1'] = (1,2,3,4)
  12. self.assertEqual(s['key1'], (1,2,3,4))
  13. s.close()
  14. finally:
  15. for f in glob.glob(self.fn+"*"):
  16. os.unlink(f)
  17. def test_binary_file_shelf(self):
  18. try:
  19. s = shelve.open(self.fn, binary=True)
  20. s['key1'] = (1,2,3,4)
  21. self.assertEqual(s['key1'], (1,2,3,4))
  22. s.close()
  23. finally:
  24. for f in glob.glob(self.fn+"*"):
  25. os.unlink(f)
  26. def test_proto2_file_shelf(self):
  27. try:
  28. s = shelve.open(self.fn, protocol=2)
  29. s['key1'] = (1,2,3,4)
  30. self.assertEqual(s['key1'], (1,2,3,4))
  31. s.close()
  32. finally:
  33. for f in glob.glob(self.fn+"*"):
  34. os.unlink(f)
  35. def test_in_memory_shelf(self):
  36. d1 = {}
  37. s = shelve.Shelf(d1, binary=False)
  38. s['key1'] = (1,2,3,4)
  39. self.assertEqual(s['key1'], (1,2,3,4))
  40. s.close()
  41. d2 = {}
  42. s = shelve.Shelf(d2, binary=True)
  43. s['key1'] = (1,2,3,4)
  44. self.assertEqual(s['key1'], (1,2,3,4))
  45. s.close()
  46. self.assertEqual(len(d1), 1)
  47. self.assertNotEqual(d1, d2)
  48. def test_mutable_entry(self):
  49. d1 = {}
  50. s = shelve.Shelf(d1, protocol=2, writeback=False)
  51. s['key1'] = [1,2,3,4]
  52. self.assertEqual(s['key1'], [1,2,3,4])
  53. s['key1'].append(5)
  54. self.assertEqual(s['key1'], [1,2,3,4])
  55. s.close()
  56. d2 = {}
  57. s = shelve.Shelf(d2, protocol=2, writeback=True)
  58. s['key1'] = [1,2,3,4]
  59. self.assertEqual(s['key1'], [1,2,3,4])
  60. s['key1'].append(5)
  61. self.assertEqual(s['key1'], [1,2,3,4,5])
  62. s.close()
  63. self.assertEqual(len(d1), 1)
  64. self.assertEqual(len(d2), 1)
  65. from test import mapping_tests
  66. class TestShelveBase(mapping_tests.BasicTestMappingProtocol):
  67. fn = "shelftemp.db"
  68. counter = 0
  69. def __init__(self, *args, **kw):
  70. self._db = []
  71. mapping_tests.BasicTestMappingProtocol.__init__(self, *args, **kw)
  72. type2test = shelve.Shelf
  73. def _reference(self):
  74. return {"key1":"value1", "key2":2, "key3":(1,2,3)}
  75. def _empty_mapping(self):
  76. if self._in_mem:
  77. x= shelve.Shelf({}, **self._args)
  78. else:
  79. self.counter+=1
  80. x= shelve.open(self.fn+str(self.counter), **self._args)
  81. self._db.append(x)
  82. return x
  83. def tearDown(self):
  84. for db in self._db:
  85. db.close()
  86. self._db = []
  87. if not self._in_mem:
  88. for f in glob.glob(self.fn+"*"):
  89. os.unlink(f)
  90. class TestAsciiFileShelve(TestShelveBase):
  91. _args={'binary':False}
  92. _in_mem = False
  93. class TestBinaryFileShelve(TestShelveBase):
  94. _args={'binary':True}
  95. _in_mem = False
  96. class TestProto2FileShelve(TestShelveBase):
  97. _args={'protocol':2}
  98. _in_mem = False
  99. class TestAsciiMemShelve(TestShelveBase):
  100. _args={'binary':False}
  101. _in_mem = True
  102. class TestBinaryMemShelve(TestShelveBase):
  103. _args={'binary':True}
  104. _in_mem = True
  105. class TestProto2MemShelve(TestShelveBase):
  106. _args={'protocol':2}
  107. _in_mem = True
  108. def test_main():
  109. test_support.run_unittest(
  110. TestAsciiFileShelve,
  111. TestBinaryFileShelve,
  112. TestProto2FileShelve,
  113. TestAsciiMemShelve,
  114. TestBinaryMemShelve,
  115. TestProto2MemShelve,
  116. TestCase
  117. )
  118. if __name__ == "__main__":
  119. test_main()