'''
Created on Aug 25, 2010

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


class TestMakeSNPTrack(unittest.TestCase):

    baseColor = {"A": "200, 0, 255",
                 "T": "200, 0, 255",
                 "C": "200, 0, 255",
                 "G": "200, 0, 255"
    }

    specialColors = {"A-G": "255, 0, 0",
                     "T-C": "0, 0, 255"
    }


    def setUp(self):
        pass


    def tearDown(self):
        pass


    def testGetHeader(self):
        track = "test track"
        header = "track name=%s description=%s visibility=2 itemRgb=\"On\"\n" % (track, track)
        self.assertEquals(header, makeSNPtrack.getHeader(track))


    def testDoNotProcessLine(self):
        self.assertTrue(makeSNPtrack.doNotProcessLine("#anything"))
        self.assertFalse(makeSNPtrack.doNotProcessLine("line to process"))


    def testGetBedOutputLine(self):
        chromosome = "chr1"
        readStart = 10
        readStop = 11
        readName = "A"
        score = "0"
        sense = "+"
        color = self.baseColor[readName]
        snpPropertiesList = ["0", "1", chromosome, 11, "4", "5", "6", readName]
        outline = "%s\t%d\t%d\t%s\t%s\t%s\t-\t-\t\t%s\n" % (chromosome, readStart, readStop, readName, score, sense, color)
        self.assertEquals(outline, makeSNPtrack.getBedOutputLine(snpPropertiesList))

        snpPropertiesList = ["0", "1", chromosome, 11, "4", "5", "6"]
        self.assertRaises(IndexError, makeSNPtrack.getBedOutputLine, snpPropertiesList)

        snpPropertiesList = []
        self.assertRaises(IndexError, makeSNPtrack.getBedOutputLine, snpPropertiesList)

        snpPropertiesList = ["0", "1", chromosome, "some string", "4", "5", "6", readName]
        self.assertRaises(ValueError, makeSNPtrack.getBedOutputLine, snpPropertiesList)


    def testGetSNPColor(self):
        for base in self.baseColor.keys():
            self.assertEquals(self.baseColor[base], makeSNPtrack.getSNPColor(base))

        for base in self.specialColors.keys():
            self.assertEquals(self.specialColors[base], makeSNPtrack.getSNPColor(base))

        defaultColor = "200, 0, 255"
        self.assertEquals(defaultColor, makeSNPtrack.getSNPColor(""))
        self.assertEquals(defaultColor, makeSNPtrack.getSNPColor("V"))


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

    return suite


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