diff options
Diffstat (limited to 'lib/python2.7/bsddb/test/test_compat.py')
-rw-r--r-- | lib/python2.7/bsddb/test/test_compat.py | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/lib/python2.7/bsddb/test/test_compat.py b/lib/python2.7/bsddb/test/test_compat.py new file mode 100644 index 0000000..7679f19 --- /dev/null +++ b/lib/python2.7/bsddb/test/test_compat.py @@ -0,0 +1,184 @@ +""" +Test cases adapted from the test_bsddb.py module in Python's +regression test suite. +""" + +import os, string +import unittest + +from test_all import db, hashopen, btopen, rnopen, verbose, \ + get_new_database_path + + +class CompatibilityTestCase(unittest.TestCase): + def setUp(self): + self.filename = get_new_database_path() + + def tearDown(self): + try: + os.remove(self.filename) + except os.error: + pass + + + def test01_btopen(self): + self.do_bthash_test(btopen, 'btopen') + + def test02_hashopen(self): + self.do_bthash_test(hashopen, 'hashopen') + + def test03_rnopen(self): + data = "The quick brown fox jumped over the lazy dog.".split() + if verbose: + print "\nTesting: rnopen" + + f = rnopen(self.filename, 'c') + for x in range(len(data)): + f[x+1] = data[x] + + getTest = (f[1], f[2], f[3]) + if verbose: + print '%s %s %s' % getTest + + self.assertEqual(getTest[1], 'quick', 'data mismatch!') + + rv = f.set_location(3) + if rv != (3, 'brown'): + self.fail('recno database set_location failed: '+repr(rv)) + + f[25] = 'twenty-five' + f.close() + del f + + f = rnopen(self.filename, 'w') + f[20] = 'twenty' + + def noRec(f): + rec = f[15] + self.assertRaises(KeyError, noRec, f) + + def badKey(f): + rec = f['a string'] + self.assertRaises(TypeError, badKey, f) + + del f[3] + + rec = f.first() + while rec: + if verbose: + print rec + try: + rec = f.next() + except KeyError: + break + + f.close() + + + def test04_n_flag(self): + f = hashopen(self.filename, 'n') + f.close() + + + def do_bthash_test(self, factory, what): + if verbose: + print '\nTesting: ', what + + f = factory(self.filename, 'c') + if verbose: + print 'creation...' + + # truth test + if f: + if verbose: print "truth test: true" + else: + if verbose: print "truth test: false" + + f['0'] = '' + f['a'] = 'Guido' + f['b'] = 'van' + f['c'] = 'Rossum' + f['d'] = 'invented' + # 'e' intentionally left out + f['f'] = 'Python' + if verbose: + print '%s %s %s' % (f['a'], f['b'], f['c']) + + if verbose: + print 'key ordering...' + start = f.set_location(f.first()[0]) + if start != ('0', ''): + self.fail("incorrect first() result: "+repr(start)) + while 1: + try: + rec = f.next() + except KeyError: + self.assertEqual(rec, f.last(), 'Error, last <> last!') + f.previous() + break + if verbose: + print rec + + self.assertTrue(f.has_key('f'), 'Error, missing key!') + + # test that set_location() returns the next nearest key, value + # on btree databases and raises KeyError on others. + if factory == btopen: + e = f.set_location('e') + if e != ('f', 'Python'): + self.fail('wrong key,value returned: '+repr(e)) + else: + try: + e = f.set_location('e') + except KeyError: + pass + else: + self.fail("set_location on non-existent key did not raise KeyError") + + f.sync() + f.close() + # truth test + try: + if f: + if verbose: print "truth test: true" + else: + if verbose: print "truth test: false" + except db.DBError: + pass + else: + self.fail("Exception expected") + + del f + + if verbose: + print 'modification...' + f = factory(self.filename, 'w') + f['d'] = 'discovered' + + if verbose: + print 'access...' + for key in f.keys(): + word = f[key] + if verbose: + print word + + def noRec(f): + rec = f['no such key'] + self.assertRaises(KeyError, noRec, f) + + def badKey(f): + rec = f[15] + self.assertRaises(TypeError, badKey, f) + + f.close() + + +#---------------------------------------------------------------------- + + +def test_suite(): + return unittest.makeSuite(CompatibilityTestCase) + + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') |