symbian-qemu-0.9.1-12/python-2.6.1/Lib/bsddb/test/test_compat.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """
       
     2 Test cases adapted from the test_bsddb.py module in Python's
       
     3 regression test suite.
       
     4 """
       
     5 
       
     6 import os, string
       
     7 import unittest
       
     8 
       
     9 from test_all import db, hashopen, btopen, rnopen, verbose, \
       
    10         get_new_database_path
       
    11 
       
    12 
       
    13 class CompatibilityTestCase(unittest.TestCase):
       
    14     def setUp(self):
       
    15         self.filename = get_new_database_path()
       
    16 
       
    17     def tearDown(self):
       
    18         try:
       
    19             os.remove(self.filename)
       
    20         except os.error:
       
    21             pass
       
    22 
       
    23 
       
    24     def test01_btopen(self):
       
    25         self.do_bthash_test(btopen, 'btopen')
       
    26 
       
    27     def test02_hashopen(self):
       
    28         self.do_bthash_test(hashopen, 'hashopen')
       
    29 
       
    30     def test03_rnopen(self):
       
    31         data = "The quick brown fox jumped over the lazy dog.".split()
       
    32         if verbose:
       
    33             print "\nTesting: rnopen"
       
    34 
       
    35         f = rnopen(self.filename, 'c')
       
    36         for x in range(len(data)):
       
    37             f[x+1] = data[x]
       
    38 
       
    39         getTest = (f[1], f[2], f[3])
       
    40         if verbose:
       
    41             print '%s %s %s' % getTest
       
    42 
       
    43         self.assertEqual(getTest[1], 'quick', 'data mismatch!')
       
    44 
       
    45         rv = f.set_location(3)
       
    46         if rv != (3, 'brown'):
       
    47             self.fail('recno database set_location failed: '+repr(rv))
       
    48 
       
    49         f[25] = 'twenty-five'
       
    50         f.close()
       
    51         del f
       
    52 
       
    53         f = rnopen(self.filename, 'w')
       
    54         f[20] = 'twenty'
       
    55 
       
    56         def noRec(f):
       
    57             rec = f[15]
       
    58         self.assertRaises(KeyError, noRec, f)
       
    59 
       
    60         def badKey(f):
       
    61             rec = f['a string']
       
    62         self.assertRaises(TypeError, badKey, f)
       
    63 
       
    64         del f[3]
       
    65 
       
    66         rec = f.first()
       
    67         while rec:
       
    68             if verbose:
       
    69                 print rec
       
    70             try:
       
    71                 rec = f.next()
       
    72             except KeyError:
       
    73                 break
       
    74 
       
    75         f.close()
       
    76 
       
    77 
       
    78     def test04_n_flag(self):
       
    79         f = hashopen(self.filename, 'n')
       
    80         f.close()
       
    81 
       
    82 
       
    83     def do_bthash_test(self, factory, what):
       
    84         if verbose:
       
    85             print '\nTesting: ', what
       
    86 
       
    87         f = factory(self.filename, 'c')
       
    88         if verbose:
       
    89             print 'creation...'
       
    90 
       
    91         # truth test
       
    92         if f:
       
    93             if verbose: print "truth test: true"
       
    94         else:
       
    95             if verbose: print "truth test: false"
       
    96 
       
    97         f['0'] = ''
       
    98         f['a'] = 'Guido'
       
    99         f['b'] = 'van'
       
   100         f['c'] = 'Rossum'
       
   101         f['d'] = 'invented'
       
   102         # 'e' intentionally left out
       
   103         f['f'] = 'Python'
       
   104         if verbose:
       
   105             print '%s %s %s' % (f['a'], f['b'], f['c'])
       
   106 
       
   107         if verbose:
       
   108             print 'key ordering...'
       
   109         start = f.set_location(f.first()[0])
       
   110         if start != ('0', ''):
       
   111             self.fail("incorrect first() result: "+repr(start))
       
   112         while 1:
       
   113             try:
       
   114                 rec = f.next()
       
   115             except KeyError:
       
   116                 self.assertEqual(rec, f.last(), 'Error, last <> last!')
       
   117                 f.previous()
       
   118                 break
       
   119             if verbose:
       
   120                 print rec
       
   121 
       
   122         self.assert_(f.has_key('f'), 'Error, missing key!')
       
   123 
       
   124         # test that set_location() returns the next nearest key, value
       
   125         # on btree databases and raises KeyError on others.
       
   126         if factory == btopen:
       
   127             e = f.set_location('e')
       
   128             if e != ('f', 'Python'):
       
   129                 self.fail('wrong key,value returned: '+repr(e))
       
   130         else:
       
   131             try:
       
   132                 e = f.set_location('e')
       
   133             except KeyError:
       
   134                 pass
       
   135             else:
       
   136                 self.fail("set_location on non-existant key did not raise KeyError")
       
   137 
       
   138         f.sync()
       
   139         f.close()
       
   140         # truth test
       
   141         try:
       
   142             if f:
       
   143                 if verbose: print "truth test: true"
       
   144             else:
       
   145                 if verbose: print "truth test: false"
       
   146         except db.DBError:
       
   147             pass
       
   148         else:
       
   149             self.fail("Exception expected")
       
   150 
       
   151         del f
       
   152 
       
   153         if verbose:
       
   154             print 'modification...'
       
   155         f = factory(self.filename, 'w')
       
   156         f['d'] = 'discovered'
       
   157 
       
   158         if verbose:
       
   159             print 'access...'
       
   160         for key in f.keys():
       
   161             word = f[key]
       
   162             if verbose:
       
   163                 print word
       
   164 
       
   165         def noRec(f):
       
   166             rec = f['no such key']
       
   167         self.assertRaises(KeyError, noRec, f)
       
   168 
       
   169         def badKey(f):
       
   170             rec = f[15]
       
   171         self.assertRaises(TypeError, badKey, f)
       
   172 
       
   173         f.close()
       
   174 
       
   175 
       
   176 #----------------------------------------------------------------------
       
   177 
       
   178 
       
   179 def test_suite():
       
   180     return unittest.makeSuite(CompatibilityTestCase)
       
   181 
       
   182 
       
   183 if __name__ == '__main__':
       
   184     unittest.main(defaultTest='test_suite')