'''
Created on Oct 4, 2010

@author: sau
'''
import unittest
import os
from erange import transcripts

inFileName = "testTranscriptsInFile.txt"
outFileName = "testTranscriptsOutFile.txt"


class TestTranscripts(unittest.TestCase):


    def setUp(self):
        self.inFile = open(inFileName, "w")
        self.inFile.write("line1\t3.5\n")
        self.inFile.write("line2\t1.5\n")
        self.inFile.write("line3\tpadding\t3.5\n")
        self.inFile.close()


    def tearDown(self):
        try:
            os.remove(outFileName)
        except OSError:
            pass

        try:
            os.remove(inFileName)
        except OSError:
            pass


    def testTranscripts(self):
        transcripts.transcripts(inFileName, outFileName)
        output = open(outFileName)
        results = output.readlines()
        output.close()
        self.assertEquals(3, len(results))
        self.assertEquals("line1\t700000.0\t2.3\n", results[0])
        self.assertEquals("line2\t300000.0\t1.0\n", results[1])
        self.assertEquals("line3\t700000.0\t2.3\n", results[2])

    def testMain(self):
        argv = ["transcripts.py", inFileName, outFileName]
        transcripts.main(argv)
        output = open(outFileName)
        results = output.readlines()
        output.close()
        self.assertEquals(3, len(results))
        self.assertEquals("line1\t700000.0\t2.3\n", results[0])
        self.assertEquals("line2\t300000.0\t1.0\n", results[1])
        self.assertEquals("line3\t700000.0\t2.3\n", results[2])

        argv = ["transcripts.py", inFileName, outFileName, "--transcriptome", "400000"]
        transcripts.main(argv)
        output = open(outFileName)
        results = output.readlines()
        output.close()
        self.assertEquals(3, len(results))
        self.assertEquals("line1\t1400000.0\t4.7\n", results[0])
        self.assertEquals("line2\t600000.0\t2.0\n", results[1])
        self.assertEquals("line3\t1400000.0\t4.7\n", results[2])

        argv = ["transcripts.py", inFileName, outFileName, "--cells", "5e5"]
        transcripts.main(argv)
        output = open(outFileName)
        results = output.readlines()
        output.close()
        self.assertEquals(3, len(results))
        self.assertEquals("line1\t700000.0\t4.7\n", results[0])
        self.assertEquals("line2\t300000.0\t2.0\n", results[1])
        self.assertEquals("line3\t700000.0\t4.7\n", results[2])

        argv = ["transcripts.py", inFileName, outFileName, "--efficiency", "0.15"]
        transcripts.main(argv)
        output = open(outFileName)
        results = output.readlines()
        output.close()
        self.assertEquals(3, len(results))
        self.assertEquals("line1\t700000.0\t4.7\n", results[0])
        self.assertEquals("line2\t300000.0\t2.0\n", results[1])
        self.assertEquals("line3\t700000.0\t4.7\n", results[2])


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

    return suite


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