def testWeightDB(self):
        #test setup
        class DummyCallback():
            def __init__(self):
                self.entries = []

            def __call__(self, weight, extra):
                self.entries.append((weight, extra))

        expected_weights = expected_weights_results()
        expected_extra = expected_extra_results()

        weight_db = WeightDBUtilities.WeightDB("tests/_td/test.db")

        #load gene data
        extra = weight_db.loadExtraColumnData("A")
        self.assertExtra(extra, [expected_extra[0]])

        extra = weight_db.loadExtraColumnData("B")
        self.assertExtra(extra, [expected_extra[1]])

        extra = weight_db.loadExtraColumnData("C")
        self.assertExtra(extra, [expected_extra[2]])

        extra = weight_db.loadExtraColumnData("D")
        self.assertExtra(extra, [expected_extra[3]])

        extra = weight_db.loadExtraColumnData()
        self.assertExtra(extra, expected_extra)

        #load db
        callback = DummyCallback()
        weights = weight_db.loadFromDB(callback, "A")
        self.assertWeights(
            weights,
            [expected_weights[0], expected_weights[1], expected_weights[2]])
        self.assertEqual(len(callback.entries), 3)
        callback_weights = [e[0] for e in callback.entries]
        self.assertEqual(callback_weights, weights)

        callback = DummyCallback()
        weights = weight_db.loadFromDB(callback, "B")
        self.assertWeights(weights, [expected_weights[3], expected_weights[4]])
        self.assertEqual(len(callback.entries), 2)
        callback_weights = [e[0] for e in callback.entries]
        self.assertEqual(callback_weights, weights)

        callback = DummyCallback()
        weights = weight_db.loadFromDB(callback, "C")
        self.assertWeights(weights, [expected_weights[5]])
        self.assertEqual(len(callback.entries), 1)
        callback_weights = [e[0] for e in callback.entries]
        self.assertEqual(callback_weights, weights)

        callback = DummyCallback()
        weights = weight_db.loadFromDB(callback, "D")
        self.assertWeights(weights, [expected_weights[6]])
        self.assertEqual(len(callback.entries), 1)
        callback_weights = [e[0] for e in callback.entries]
        self.assertEqual(callback_weights, weights)

        callback = DummyCallback()
        weights = weight_db.loadFromDB(callback)
        self.assertWeights(weights, expected_weights)
        self.assertEqual(len(callback.entries), 7)
        callback_weights = [e[0] for e in callback.entries]
        self.assertEqual(callback_weights, weights)

        #gene names
        gene_names = weight_db.loadGeneNamesFromDB()
        self.assertEqual(gene_names, ["A", "B", "C", "D"])
    def testWeightDBInvalidPath(self):
        weight_db = WeightDBUtilities.WeightDB("tests/kk.db")

        with self.assertRaises(RuntimeError):
            weight_db.openDBIfNecessary()