python-2.5.2/win32/Lib/test/test_dumbdbm.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 #! /usr/bin/env python
       
     2 """Test script for the dumbdbm module
       
     3    Original by Roger E. Masse
       
     4 """
       
     5 
       
     6 import os
       
     7 import unittest
       
     8 import dumbdbm
       
     9 from test import test_support
       
    10 
       
    11 _fname = test_support.TESTFN
       
    12 
       
    13 def _delete_files():
       
    14     for ext in [".dir", ".dat", ".bak"]:
       
    15         try:
       
    16             os.unlink(_fname + ext)
       
    17         except OSError:
       
    18             pass
       
    19 
       
    20 class DumbDBMTestCase(unittest.TestCase):
       
    21     _dict = {'0': '',
       
    22              'a': 'Python:',
       
    23              'b': 'Programming',
       
    24              'c': 'the',
       
    25              'd': 'way',
       
    26              'f': 'Guido',
       
    27              'g': 'intended'
       
    28              }
       
    29 
       
    30     def __init__(self, *args):
       
    31         unittest.TestCase.__init__(self, *args)
       
    32 
       
    33     def test_dumbdbm_creation(self):
       
    34         f = dumbdbm.open(_fname, 'c')
       
    35         self.assertEqual(f.keys(), [])
       
    36         for key in self._dict:
       
    37             f[key] = self._dict[key]
       
    38         self.read_helper(f)
       
    39         f.close()
       
    40 
       
    41     def test_close_twice(self):
       
    42         f = dumbdbm.open(_fname)
       
    43         f['a'] = 'b'
       
    44         self.assertEqual(f['a'], 'b')
       
    45         f.close()
       
    46         f.close()
       
    47 
       
    48     def test_dumbdbm_modification(self):
       
    49         self.init_db()
       
    50         f = dumbdbm.open(_fname, 'w')
       
    51         self._dict['g'] = f['g'] = "indented"
       
    52         self.read_helper(f)
       
    53         f.close()
       
    54 
       
    55     def test_dumbdbm_read(self):
       
    56         self.init_db()
       
    57         f = dumbdbm.open(_fname, 'r')
       
    58         self.read_helper(f)
       
    59         f.close()
       
    60 
       
    61     def test_dumbdbm_keys(self):
       
    62         self.init_db()
       
    63         f = dumbdbm.open(_fname)
       
    64         keys = self.keys_helper(f)
       
    65         f.close()
       
    66 
       
    67     def test_write_write_read(self):
       
    68         # test for bug #482460
       
    69         f = dumbdbm.open(_fname)
       
    70         f['1'] = 'hello'
       
    71         f['1'] = 'hello2'
       
    72         f.close()
       
    73         f = dumbdbm.open(_fname)
       
    74         self.assertEqual(f['1'], 'hello2')
       
    75         f.close()
       
    76 
       
    77     def test_line_endings(self):
       
    78         # test for bug #1172763: dumbdbm would die if the line endings
       
    79         # weren't what was expected.
       
    80         f = dumbdbm.open(_fname)
       
    81         f['1'] = 'hello'
       
    82         f['2'] = 'hello2'
       
    83         f.close()
       
    84 
       
    85         # Mangle the file by adding \r before each newline
       
    86         data = open(_fname + '.dir').read()
       
    87         data = data.replace('\n', '\r\n')
       
    88         open(_fname + '.dir', 'wb').write(data)
       
    89 
       
    90         f = dumbdbm.open(_fname)
       
    91         self.assertEqual(f['1'], 'hello')
       
    92         self.assertEqual(f['2'], 'hello2')
       
    93 
       
    94 
       
    95     def read_helper(self, f):
       
    96         keys = self.keys_helper(f)
       
    97         for key in self._dict:
       
    98             self.assertEqual(self._dict[key], f[key])
       
    99 
       
   100     def init_db(self):
       
   101         f = dumbdbm.open(_fname, 'w')
       
   102         for k in self._dict:
       
   103             f[k] = self._dict[k]
       
   104         f.close()
       
   105 
       
   106     def keys_helper(self, f):
       
   107         keys = f.keys()
       
   108         keys.sort()
       
   109         dkeys = self._dict.keys()
       
   110         dkeys.sort()
       
   111         self.assertEqual(keys, dkeys)
       
   112         return keys
       
   113 
       
   114     # Perform randomized operations.  This doesn't make assumptions about
       
   115     # what *might* fail.
       
   116     def test_random(self):
       
   117         import random
       
   118         d = {}  # mirror the database
       
   119         for dummy in range(5):
       
   120             f = dumbdbm.open(_fname)
       
   121             for dummy in range(100):
       
   122                 k = random.choice('abcdefghijklm')
       
   123                 if random.random() < 0.2:
       
   124                     if k in d:
       
   125                         del d[k]
       
   126                         del f[k]
       
   127                 else:
       
   128                     v = random.choice('abc') * random.randrange(10000)
       
   129                     d[k] = v
       
   130                     f[k] = v
       
   131                     self.assertEqual(f[k], v)
       
   132             f.close()
       
   133 
       
   134             f = dumbdbm.open(_fname)
       
   135             expected = d.items()
       
   136             expected.sort()
       
   137             got = f.items()
       
   138             got.sort()
       
   139             self.assertEqual(expected, got)
       
   140             f.close()
       
   141 
       
   142     def tearDown(self):
       
   143         _delete_files()
       
   144 
       
   145     def setUp(self):
       
   146         _delete_files()
       
   147 
       
   148 def test_main():
       
   149     try:
       
   150         test_support.run_unittest(DumbDBMTestCase)
       
   151     finally:
       
   152         _delete_files()
       
   153 
       
   154 if __name__ == "__main__":
       
   155     test_main()