10a8c90248264a8b26970b4473770bcc3df8515fJosh Gao"""TestCases for exercising a Recno DB. 20a8c90248264a8b26970b4473770bcc3df8515fJosh Gao""" 30a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 40a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport os, sys 50a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport errno 60a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom pprint import pprint 70a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoimport unittest 80a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 90a8c90248264a8b26970b4473770bcc3df8515fJosh Gaofrom test_all import db, test_support, verbose, get_new_environment_path, get_new_database_path 100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 110a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoletters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao#---------------------------------------------------------------------- 150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 160a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoclass SimpleRecnoTestCase(unittest.TestCase): 170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if (sys.version_info < (2, 7)) or ((sys.version_info >= (3, 0)) and 180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao (sys.version_info < (3, 2))) : 190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def assertIsInstance(self, obj, datatype, msg=None) : 200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self.assertEqual(type(obj), datatype, msg=msg) 210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def assertGreaterEqual(self, a, b, msg=None) : 220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return self.assertTrue(a>=b, msg=msg) 230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def setUp(self): 260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.filename = get_new_database_path() 270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.homeDir = None 280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def tearDown(self): 300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao test_support.unlink(self.filename) 310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if self.homeDir: 320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao test_support.rmtree(self.homeDir) 330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test01_basic(self): 350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d = db.DB() 360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao get_returns_none = d.set_get_returns_none(2) 380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_get_returns_none(get_returns_none) 390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.open(self.filename, db.DB_RECNO, db.DB_CREATE) 410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for x in letters: 430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao recno = d.append(x * 60) 440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(recno, int) 450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertGreaterEqual(recno, 1) 460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print recno, 480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: print 500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao stat = d.stat() 520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pprint(stat) 540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for recno in range(1, len(d)+1): 560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = d[recno] 570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print data 590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(data, str) 610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(data, d.get(recno)) 620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: 640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = d[0] # This should raise a KeyError!?!?! 650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except db.DBInvalidArgError, val: 660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if sys.version_info < (2, 6) : 670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(val[0], db.EINVAL) 680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else : 690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(val.args[0], db.EINVAL) 700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: print val 710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("expected exception") 730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # test that has_key raises DB exceptions (fixed in pybsddb 4.3.2) 750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: 760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.has_key(0) 770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except db.DBError, val: 780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("has_key did not raise a proper exception") 810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: 830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = d[100] 840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except KeyError: 850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("expected exception") 880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: 900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = d.get(100) 910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except db.DBNotFoundError, val: 920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if get_returns_none: 930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("unexpected exception") 940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(data, None) 960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao keys = d.keys() 980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print keys 1000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(keys, list) 1010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(keys[0], int) 1020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(keys), len(d)) 1030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao items = d.items() 1050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pprint(items) 1070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(items, list) 1080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(items[0], tuple) 1090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(items[0]), 2) 1100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(items[0][0], int) 1110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertIsInstance(items[0][1], str) 1120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(len(items), len(d)) 1130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertTrue(d.has_key(25)) 1150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao del d[25] 1170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertFalse(d.has_key(25)) 1180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.delete(13) 1200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertFalse(d.has_key(13)) 1210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = d.get_both(26, "z" * 60) 1230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(data, "z" * 60, 'was %r' % data) 1240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print data 1260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao fd = d.fd() 1280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print fd 1300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c = d.cursor() 1320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.first() 1330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao while rec: 1340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 1360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.next() 1370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c.set(50) 1390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.current() 1400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 1420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c.put(-1, "a replacement record", db.DB_CURRENT) 1440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c.set(50) 1460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.current() 1470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(rec, (50, "a replacement record")) 1480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 1500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.set_range(30) 1520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 1540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # test that non-existent key lookups work (and that 1560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # DBC_set_range doesn't have a memleak under valgrind) 1570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.set_range(999999) 1580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(rec, None) 1590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 1610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c.close() 1630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.close() 1640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d = db.DB() 1660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.open(self.filename) 1670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c = d.cursor() 1680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # put a record beyond the consecutive end of the recno's 1700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d[100] = "way out there" 1710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(d[100], "way out there") 1720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: 1740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = d[99] 1750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except KeyError: 1760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao pass 1770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 1780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("expected exception") 1790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: 1810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.get(99) 1820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except db.DBKeyEmptyError, val: 1830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if get_returns_none: 1840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("unexpected DBKeyEmptyError exception") 1850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 1860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if sys.version_info < (2, 6) : 1870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(val[0], db.DB_KEYEMPTY) 1880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else : 1890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(val.args[0], db.DB_KEYEMPTY) 1900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: print val 1910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 1920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if not get_returns_none: 1930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("expected exception") 1940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 1950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.set(40) 1960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao while rec: 1970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 1980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 1990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.next() 2000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c.close() 2020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.close() 2030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test02_WithSource(self): 2050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """ 2060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao A Recno file that is given a "backing source file" is essentially a 2070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao simple ASCII file. Normally each record is delimited by \n and so is 2080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao just a line in the file, but you can set a different record delimiter 2090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if needed. 2100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao """ 2110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao homeDir = get_new_environment_path() 2120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.homeDir = homeDir 2130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao source = os.path.join(homeDir, 'test_recno.txt') 2140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if not os.path.isdir(homeDir): 2150a8c90248264a8b26970b4473770bcc3df8515fJosh Gao os.mkdir(homeDir) 2160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = open(source, 'w') # create the file 2170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f.close() 2180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2190a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d = db.DB() 2200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # This is the default value, just checking if both int 2210a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_delim(0x0A) 2220a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_delim('\n') # and char can be used... 2230a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_source(source) 2240a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.open(self.filename, db.DB_RECNO, db.DB_CREATE) 2250a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2260a8c90248264a8b26970b4473770bcc3df8515fJosh Gao data = "The quick brown fox jumped over the lazy dog".split() 2270a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for datum in data: 2280a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.append(datum) 2290a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.sync() 2300a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.close() 2310a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2320a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # get the text from the backing source 2330a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = open(source, 'r') 2340a8c90248264a8b26970b4473770bcc3df8515fJosh Gao text = f.read() 2350a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f.close() 2360a8c90248264a8b26970b4473770bcc3df8515fJosh Gao text = text.strip() 2370a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 2380a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print text 2390a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print data 2400a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print text.split('\n') 2410a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2420a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(text.split('\n'), data) 2430a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2440a8c90248264a8b26970b4473770bcc3df8515fJosh Gao # open as a DB again 2450a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d = db.DB() 2460a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_source(source) 2470a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.open(self.filename, db.DB_RECNO) 2480a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2490a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d[3] = 'reddish-brown' 2500a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d[8] = 'comatose' 2510a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2520a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.sync() 2530a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.close() 2540a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2550a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f = open(source, 'r') 2560a8c90248264a8b26970b4473770bcc3df8515fJosh Gao text = f.read() 2570a8c90248264a8b26970b4473770bcc3df8515fJosh Gao f.close() 2580a8c90248264a8b26970b4473770bcc3df8515fJosh Gao text = text.strip() 2590a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 2600a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print text 2610a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print text.split('\n') 2620a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2630a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(text.split('\n'), 2640a8c90248264a8b26970b4473770bcc3df8515fJosh Gao "The quick reddish-brown fox jumped over the comatose dog".split()) 2650a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2660a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test03_FixedLength(self): 2670a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d = db.DB() 2680a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_len(40) # fixed length records, 40 bytes long 2690a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_pad('-') # sets the pad character... 2700a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.set_re_pad(45) # ...test both int and char 2710a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.open(self.filename, db.DB_RECNO, db.DB_CREATE) 2720a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2730a8c90248264a8b26970b4473770bcc3df8515fJosh Gao for x in letters: 2740a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.append(x * 35) # These will be padded 2750a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2760a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.append('.' * 40) # this one will be exact 2770a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2780a8c90248264a8b26970b4473770bcc3df8515fJosh Gao try: # this one will fail 2790a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.append('bad' * 20) 2800a8c90248264a8b26970b4473770bcc3df8515fJosh Gao except db.DBInvalidArgError, val: 2810a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if sys.version_info < (2, 6) : 2820a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(val[0], db.EINVAL) 2830a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else : 2840a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(val.args[0], db.EINVAL) 2850a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: print val 2860a8c90248264a8b26970b4473770bcc3df8515fJosh Gao else: 2870a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.fail("expected exception") 2880a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2890a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c = d.cursor() 2900a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.first() 2910a8c90248264a8b26970b4473770bcc3df8515fJosh Gao while rec: 2920a8c90248264a8b26970b4473770bcc3df8515fJosh Gao if verbose: 2930a8c90248264a8b26970b4473770bcc3df8515fJosh Gao print rec 2940a8c90248264a8b26970b4473770bcc3df8515fJosh Gao rec = c.next() 2950a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2960a8c90248264a8b26970b4473770bcc3df8515fJosh Gao c.close() 2970a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.close() 2980a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 2990a8c90248264a8b26970b4473770bcc3df8515fJosh Gao def test04_get_size_empty(self) : 3000a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d = db.DB() 3010a8c90248264a8b26970b4473770bcc3df8515fJosh Gao d.open(self.filename, dbtype=db.DB_RECNO, flags=db.DB_CREATE) 3020a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3030a8c90248264a8b26970b4473770bcc3df8515fJosh Gao row_id = d.append(' ') 3040a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(1, d.get_size(key=row_id)) 3050a8c90248264a8b26970b4473770bcc3df8515fJosh Gao row_id = d.append('') 3060a8c90248264a8b26970b4473770bcc3df8515fJosh Gao self.assertEqual(0, d.get_size(key=row_id)) 3070a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3080a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3090a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3100a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3110a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3120a8c90248264a8b26970b4473770bcc3df8515fJosh Gao#---------------------------------------------------------------------- 3130a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3140a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3150a8c90248264a8b26970b4473770bcc3df8515fJosh Gaodef test_suite(): 3160a8c90248264a8b26970b4473770bcc3df8515fJosh Gao return unittest.makeSuite(SimpleRecnoTestCase) 3170a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3180a8c90248264a8b26970b4473770bcc3df8515fJosh Gao 3190a8c90248264a8b26970b4473770bcc3df8515fJosh Gaoif __name__ == '__main__': 3200a8c90248264a8b26970b4473770bcc3df8515fJosh Gao unittest.main(defaultTest='test_suite') 321