Home | History | Annotate | Download | only in test
      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.assertTrue(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-existent 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')
    185