class BaseFileTests(unittest.TestCase): BF = BaseFile(verbosity=-1) def open(self): self.done() self.BF.openFile("test.dp") def done(self): if self.BF.isOpen(): self.BF.closeFile() def testCreation(self): self.BF.createNewFile("test.dp", "testing_db", "1.0", force=True) self.done() def testFileType(self): self.open() self.assertTrue(self.BF.getFileType() == "testing_db") self.done() def testVersioning(self): self.open() self.assertTrue(self.BF.getVersion() == "1.0") self.BF.logVersion("1.1") self.assertTrue(self.BF.getVersion() == "1.1") self.done() def testHistory(self): self.open() self.BF.logMessage("test message") (message, message_time) = self.BF.getMessages()[-1] self.assertTrue(message == "test message") time.sleep(1) self.BF.logMessage("test message2") messages = self.BF.getMessages(fromTime=message_time + 1) self.assertTrue(len(messages) == 1) (message, message_time) = messages[0] self.assertTrue(message == "test message2") self.done() def testAddTable(self): self.open() self.BF._addTable("testing", { "time": "INT", "thing": "TEXT", "size": "INT" }, force=True) self.done() def testInsert(self): self.open() IF = Interface("test.dp") IF.db = self.BF to_db = [(1, "cat", 5), (2, "dog", 6), (2, "fish", 8), (4, "goat", 0), (5, "fish", 12)] IF.insert('testing', ['time', 'thing', 'size'], to_db) self.done() def testSelect(self): self.open() IF = Interface("test.dp") IF.db = self.BF C = Condition("thing", "=", "'fish'") rows = IF.select("testing", ['time'], condition=C) self.assertTrue(len(rows) == 2) C = Condition("thing", "=", "'dog'") rows = IF.select("testing", ['time'], condition=C) self.assertTrue(len(rows) == 1) self.done() def testSelectCondition(self): """ DB looks like: 1 cat 5 2 dog 6 3 fish 8 4 goat 0 5 fish 12 """ self.open() IF = Interface("test.dp") IF.db = self.BF C = Condition(Condition("thing", "="), "or", Condition("size", "<")) values = ("fish", 6) rows = IF.select("testing", ['*'], condition=C, values=values) self.assertTrue(len(rows) == 4) self.done() def testUpdate(self): self.open() IF = Interface("test.dp") IF.db = self.BF to_db = [("frog", 18, 2), ("yak", 20, 5)] C = Condition("time", "=") IF.update('testing', ['thing', 'size'], to_db, C) """ DB looks like: 1 cat 5 2 frog 18 2 frog 18 4 goat 0 5 yak 20 """ C = Condition("thing", "=", "'fish'") rows = IF.select("testing", ['time'], condition=C) self.assertTrue(len(rows) == 0) C = Condition("size", ">=", "'18'") rows = IF.select("testing", ['time'], condition=C) self.assertTrue(len(rows) == 3) # more complex updates (proxy as test for more complex selects s1 = Condition("size", ">=", "'18'") s2 = Condition("thing", "!=") C = Condition(s1, "and", s2) data = [(7, 'frog')] IF.update('testing', ['time'], data, C) C = Condition("thing", "=", "'yak'") rows = IF.select("testing", ['time'], condition=C) # should affect 1 row self.assertTrue(len(rows) == 1) # should be the yak row which should now have time = 7 self.assertTrue(rows[0][0] == 7) data = [(7, 8, "pig")] IF.update('testing', ['time', 'size', 'thing'], data, 1) C = Condition("time", "=", 7) rows = IF.select("testing", ['time'], condition=C) # should affect 1 row self.assertTrue(len(rows) == 5) self.done()