'''
Created on Oct 20, 2010

@author: sau
'''
import unittest
from erange import geneMrnaCountsWeighted


class TestGeneMrnaCountsWeighted(unittest.TestCase):


    def setUp(self):
        pass


    def tearDown(self):
        pass


    #TODO: write test
    def testMain(self):
        pass


    #TODO: write test
    def testGeneMrnaCountsWeighted(self):
        pass


    def testDoNotProcessChromosome(self):
        chromosomeList = []
        self.assertTrue(geneMrnaCountsWeighted.doNotProcessChromosome("chr1", chromosomeList))

        chromosomeList = ["chr1"]
        self.assertFalse(geneMrnaCountsWeighted.doNotProcessChromosome("chr1", chromosomeList))

        chromosomeList = ["chr2"]
        self.assertTrue(geneMrnaCountsWeighted.doNotProcessChromosome("chr1", chromosomeList))


    #TODO: write test
    def testGetReadGIDs(self):
        pass


    def testGetGeneSymbolEmptyDicts(self):
        geneinfoDict = {}
        geneannotDict = {}
        genome = "hsapien"
        self.assertEquals("FARGene", geneMrnaCountsWeighted.getGeneSymbol("FARGene", genome, geneinfoDict, geneannotDict))
        self.assertEquals("LOCGene", geneMrnaCountsWeighted.getGeneSymbol("Gene", genome, geneinfoDict, geneannotDict))


    def testGetGeneSymbolFromInfoDict(self):
        geneinfoDict = {"Gene": [("GeneName", "AltGeneName")]}
        geneannotDict = {}
        self.assertEquals("GeneName", geneMrnaCountsWeighted.getGeneSymbol("Gene", "hsapien", geneinfoDict, geneannotDict))
        self.assertEquals("AltGeneName", geneMrnaCountsWeighted.getGeneSymbol("Gene", "celegans", geneinfoDict, geneannotDict))


    def testGetGeneSymbolFromAnnotDict(self):
        geneinfoDict = {}
        geneannotDict = {("hsapien", "Gene"): ["GeneName", "AltGeneName"]}
        self.assertEquals("GeneName", geneMrnaCountsWeighted.getGeneSymbol("Gene", "hsapien", geneinfoDict, geneannotDict))
        self.assertEquals("LOCGene", geneMrnaCountsWeighted.getGeneSymbol("Gene", "celegans", geneinfoDict, geneannotDict))


    #TODO: write test
    def testWriteCountsToFile(self):
        pass


    def testGetTagCount(self):
        self.assertEquals(0.0, geneMrnaCountsWeighted.getTagCount({}, "gene", {"gene": ""}, {}))

        uniqueCountDict = {"gene": 1,
                           "related1": 1,
                           "related2": 1
        }
        gidReadDict = {"gene": ["read1"]}
        read2GidDict = {"read1": ["related1", "related2"]}
        self.assertEquals(0.5, geneMrnaCountsWeighted.getTagCount(uniqueCountDict, "gene", gidReadDict, read2GidDict))
        self.assertEquals(0.5, geneMrnaCountsWeighted.getTagCount({}, "gene", gidReadDict, read2GidDict))

        uniqueCountDict["gene"] = 2
        self.assertEquals(1.0, geneMrnaCountsWeighted.getTagCount(uniqueCountDict, "gene", gidReadDict, read2GidDict))


def suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestGeneMrnaCountsWeighted))

    return suite


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()