diff --git a/gramps/gen/db/test/cursor_test.py b/gramps/gen/db/test/cursor_test.py index 6268e5119..683102f0e 100644 --- a/gramps/gen/db/test/cursor_test.py +++ b/gramps/gen/db/test/cursor_test.py @@ -31,6 +31,8 @@ if config.get('preferences.use-bsddb3') or sys.version_info[0] >= 3: else: from bsddb import dbshelve, db +from ..read import DbBsddbTreeCursor + class Data(object): def __init__(self, handle,surname, name): @@ -76,6 +78,7 @@ class CursorTest(unittest.TestCase): os.mkdir(env_name) self.env.open(env_name,env_flags) (self.person_map,self.surnames) = self._open_tables() + (self.place_map, self.placerefs) = self._open_treetables() def _open_tables(self): dbmap = dbshelve.DBShelf(self.env) @@ -100,10 +103,36 @@ class CursorTest(unittest.TestCase): person_map.associate(surnames, find_surname, table_flags) return (person_map,surnames) - + + def _open_treetables(self): + dbmap = dbshelve.DBShelf(self.env) + dbmap.db.set_pagesize(16384) + dbmap.open(self.full_name, 'places', db.DB_HASH, + db.DB_CREATE|db.DB_AUTO_COMMIT, 0o666) + place_map = dbmap + + table_flags = db.DB_CREATE|db.DB_AUTO_COMMIT + + placerefs = db.DB(self.env) + placerefs.set_flags(db.DB_DUP|db.DB_DUPSORT) + placerefs.open(self.full_name, "placerefs", db.DB_BTREE, + flags=table_flags) + + def find_placeref(key,data): + val = data[2] + if isinstance(val, UNITYPE): + val = val.encode('utf-8') + return val + + place_map.associate(placerefs, find_placeref, table_flags) + + return (place_map, placerefs) + def tearDown(self): self.person_map.close() self.surnames.close() + self.place_map.close() + self.placerefs.close() self.env.close() shutil.rmtree(self._tmpdir) @@ -183,7 +212,29 @@ class CursorTest(unittest.TestCase): self.assertEqual(v.handle, data.handle) + def test_treecursor(self): + #fill with data + the_txn = self.env.txn_begin() + data = [(b'1', 'countryA', '' ), + (b'2', 'localityA', '1' ), + (b'3', 'localityB', '1' ), + (b'4', 'countryB', '' ), + (b'5', 'streetA', '2' ), + (b'6', 'countryB', '' )] + for d in data: + self.place_map.put(d[0], d, txn=the_txn) + the_txn.commit() + + cursor_txn = self.env.txn_begin() + cursor = DbBsddbTreeCursor(self.placerefs, self.place_map, False, + cursor_txn) + placenames = set([d[1] for handle, d in cursor]) + cursor.close() + cursor_txn.commit() + pldata = set([d[1] for d in data]) + self.assertEqual(placenames, pldata) + def testSuite(): suite = unittest.makeSuite(CursorTest, 'test') return suite