def do_test(self, string, **kwargs): p = DBI(None, None) p.flat = True p.parse(string) for kw in kwargs: self.assertTrue(getattr(p, kw) == kwargs[kw], "QUERY: '%s' checking '%s', %s != %s" % ( p.query, kw, getattr(p, kw), kwargs[kw]))
def __init__(self, *args, **kwargs): self.dbi = DBI(SelectTest.DB, None) # no document here self.dbi.flat = True self.dbi.sdb = SimpleAccess(SelectTest.DB) self.pcount = len(SelectTest.DB._tables["Person"]["handles_func"]()) self.john_count = 0 with SelectTest.DB._tables["Person"]["cursor_func"]() as cursor: for handle, person in cursor: name = SelectTest.DB._tables["Person"]["class_func"](person).get_primary_name() if name and "John" in name.first_name: self.john_count += 1 unittest.TestCase.__init__(self, *args, **kwargs)
class SelectTest(unittest.TestCase): DB = import_as_dict(os.environ["GRAMPS_RESOURCES"] + "/example/gramps/data.gramps", User()) def __init__(self, *args, **kwargs): self.dbi = DBI(SelectTest.DB, None) # no document here self.dbi.flat = True self.dbi.sdb = SimpleAccess(SelectTest.DB) self.pcount = len(SelectTest.DB._tables["Person"]["handles_func"]()) self.john_count = 0 with SelectTest.DB._tables["Person"]["cursor_func"]() as cursor: for handle, person in cursor: name = SelectTest.DB._tables["Person"]["class_func"](person).get_primary_name() if name and "John" in name.first_name: self.john_count += 1 unittest.TestCase.__init__(self, *args, **kwargs) def runTest(self): # for python -i pass def do_test(self, test, string, count): self.dbi.parse(string) table = Table() self.dbi.process_table(table) self.assertTrue(len(table.data) == count, "Test #%d, Selected %d records from example.gramps; should have been %d: '%s'" % ( test, len(table.data), count, string)) return table def test_select1(self): self.do_test(1, "select * from person;", self.pcount) def test_select2(self): self.do_test(2, "select primary_name.first_name " "from person " "where 'John' in primary_name.first_name;", self.john_count) def test_select3(self): self.do_test(3, "update person SET primary_name.first_name='XXX' " "where 'John' in primary_name.first_name;", self.john_count) def test_select4(self): self.do_test(4, "select primary_name.first_name " "from person " "where primary_name.first_name == 'XXX';", self.john_count) def test_select5(self): self.do_test(5, "UPDATE person SET private = (False or False) " "from person " "where primary_name.first_name == 'XXX';", self.john_count) def test_select6(self): self.do_test(6, "select private, primary_name " "from person " "where primary_name.first_name == 'XXX' and private;", 0) def test_select7(self): self.do_test(7, "SELECT private, primary_name " "FROM person " "where primary_name.first_name == 'XXX' and not private;", self.john_count) def test_select8(self): self.do_test(8, "UPDATE person SET private = (False or True) " "from person " "where primary_name.first_name == 'XXX';", self.john_count) def test_select9(self): self.do_test(9, "select private, primary_name " "from person " "where primary_name.first_name == 'XXX' and private;", self.john_count) def test_select10(self): self.do_test(10, "select private, primary_name " "from person " "where primary_name.first_name == 'XXX' and not private;", 0) def test_select11(self): self.do_test(11, "SELECT * from person LIMIT 10, 20", 10) def test_select12(self): self.do_test(12, "SELECT * from person LIMIT 5", 5) def test_select13(self): self.do_test(13, "SELECT ROWNUM, random.random() from person LIMIT 5", 5) def test_select14(self): self.do_test(14, "select * from person where not parent_family_list[0].private;", 38) def test_select15(self): self.do_test(15.1, "UPDATE person SET private=True WHERE not parent_family_list[0].private;", 38) self.do_test(15.2, "SELECT * from person WHERE private;", 38) self.do_test(15.3, "UPDATE person SET private=False;", 60) self.do_test(15.4, "UPDATE person SET private=False WHERE private;", 0) self.do_test(15.5, "UPDATE person SET private=True;", 60) self.do_test(15.6, "UPDATE person SET private=True where not private;", 0) def test_select16(self): table = self.do_test(16.1, "SELECT gramps_id as id from person;", self.pcount) self.assertTrue(table.data[0][0] == "I0004", "First row, first col is %s, should be %s" % (table.data[0][0], "I0004")) def test_select17(self): table = self.do_test(17.1, "SELECT gramps_id as id from person where id == 'I0004';", 1) self.assertTrue(table.data[0][0] == "I0004", "First row, first col is %s, should be %s" % (table.data[0][0], "I0004")) table = self.do_test(17.2, "SELECT gramps_id, father_handle.primary_name.first_name " "FROM family WHERE father_handle.primary_name.first_name;", 23) self.assertTrue(table.data[0][0] == "F0005", "First row, first col is %s, should be %s" % (table.data[0][0], "F0005")) self.assertTrue(table.data[0][1] == "Herman Julius", "First row, second col is %s, should be %s" % (table.data[0][1], "Herman Julius")) table = self.do_test(17.3, "UPDATE family SET father_handle.primary_name.first_name='Father' WHERE gramps_id == 'F0005';", 1) self.assertTrue(table.data[0][0] == "F0005", "First row, first col is %s, should be %s" % (table.data[0][0], "F0005")) table = self.do_test(17.4, "SELECT gramps_id, father_handle.primary_name.first_name, father_handle.gramps_id " "FROM family WHERE gramps_id == 'F0005';", 1) self.assertTrue(table.data[0][0] == "F0005", "1 First row, first col is %s, should be %s" % (table.data[0][0], "F0005")) self.assertTrue(table.data[0][1] == "Father", "1 First row, second col is %s, should be %s" % (table.data[0][1], "Father")) self.assertTrue(table.data[0][2] == "I0012", "1 First row, third col is %s, should be %s" % (table.data[0][2], "I0012")) table = self.do_test(17.5, "SELECT gramps_id, primary_name.first_name " "FROM person WHERE gramps_id == 'I0012';", 1) self.assertTrue(table.data[0][0] == "I0012", "First row, first col is %s, should be %s" % (table.data[0][0], "I0012")) self.assertTrue(table.data[0][1] == "Father", "First row, second col is %s, should be %s" % (table.data[0][1], "Father")) def test_select18(self): table = self.do_test(18.1, "SELECT gramps_id, father_handle.GIVEN from family where gramps_id == 'F0005';", 1) self.assertTrue(table.data[0][1] == "Father", "First row, second col is %s, should be %s" % (table.data[0][1], "Father"))