'''
Created on Jun 10, 2010

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


class TestMakeRdsFromBam(unittest.TestCase):


    def testGetMismatches(self):
        querySequence = "GATTACA"
        
        resultString = "A3T"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2A", querySequence, "+"))
        resultString = "T3A"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2A", querySequence, "-"))
        resultString = "T7A"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("6T", querySequence, "+"))

        resultString = "A3T,T7A"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2A3T0", querySequence, "+"))

        resultString = ""
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2^T", querySequence, "+"))

        resultString = "T5A"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2^TT2T", querySequence, "+"))
        resultString = "A5T"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2^TT2T", querySequence, "-"))

        resultString = "A3N"
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2A", "", "+"))
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("2A"))

        resultString = ""
        self.assertEquals(resultString, MakeRdsFromBam.getMismatches("badMismatchTagData", querySequence, "+"))


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


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


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


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


    def testGetReadSense(self):
        reverse = False
        self.assertEqual("+", MakeRdsFromBam.getReadSense(reverse))
        reverse = True
        self.assertEqual("-", MakeRdsFromBam.getReadSense(reverse))


    def testGetSpliceBounds(self):
        start, startR, stopL, stopR = MakeRdsFromBam.getSpliceBounds(0, 10, [(1,2), (3,6), (1,2)])

        self.assertEqual(start, 0, "incorrect start position for 262")
        self.assertEqual(startR, 8, "incorrect right start position for 262")
        self.assertEqual(stopL, 2, "incorrect left stop position for 262")
        self.assertEqual(stopR, 10, "incorrect right stop position for 262")


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


    def testIsSpliceEntry(self):
        self.assertTrue(MakeRdsFromBam.isSpliceEntry([(1,6), (3, 4), (1, 2)]))
        self.assertFalse(MakeRdsFromBam.isSpliceEntry([(1,6), (2, 4), (1, 2)]))
        self.assertFalse(MakeRdsFromBam.isSpliceEntry([]))
        self.assertFalse(MakeRdsFromBam.isSpliceEntry(""))


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


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


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

    return suite


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