'''
Created on Dec 2, 2010

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


class TestMakeSiteTrack(unittest.TestCase):

    testInputFile = "erangeTestSiteFile"
    testOutputFile = "erangeTestBedFile"


    def setUp(self):
        self.createCompactInputFile()


    def tearDown(self):
        try:
            os.remove(self.testInputFile)
        except OSError:
            print "site file does not exist"

        try:
            os.remove(self.testOutputFile)
        except OSError:
            print "bed file does not exist"


    def createStandardInputFile(self):
        siteFile = open(self.testInputFile, "w")
        siteFile.write("#comment line\n")
        siteFile.write("name\tchr1\t100\t175\t11\t+\t-\n")
        siteFile.close()


    def createCompactInputFile(self):
        siteFile = open(self.testInputFile, "w")
        siteFile.write("#comment line\n")
        siteFile.write("chr1:100-175\t11\t+\t-\n")
        siteFile.close()


    def testMakeSiteTrack(self):
        self.createCompactInputFile()
        makesitetrack.makesitetrack(self.testInputFile, self.testOutputFile)
        bedfile = open(self.testOutputFile)
        header = 'track name="" visibility=4 itemRgb="On"\n'
        self.assertEquals(header, bedfile.readline())
        result = "chr1\t100\t176\t-1\t11\t+\t-\t-\t0,0,0\n"
        self.assertEquals(result, bedfile.readline())

        makesitetrack.makesitetrack(self.testInputFile, self.testOutputFile, append=True, noHeader=True)
        bedfile = open(self.testOutputFile)
        header = bedfile.readline()
        firstEntry = bedfile.readline()
        self.assertEquals(firstEntry, bedfile.readline())


    def testNonCompactMakeSiteTrack(self):
        try:
            os.remove(self.testInputFile)
        except OSError:
            print "site file does not exist"

        self.createStandardInputFile()
        makesitetrack.makesitetrack(self.testInputFile, self.testOutputFile, compact=False, color="255,255,255")
        bedfile = open(self.testOutputFile)
        bedfile.readline()
        result = "chr1\t100\t176\t-1\t1.0\t+\t-\t-\t255,255,255\n"
        self.assertEquals(result, bedfile.readline())


    def testMain(self):
        self.createCompactInputFile()
        argv = ["makesitetrack"]
        self.assertRaises(SystemExit, makesitetrack.main, argv)
        argv = ["makesitetrack", self.testInputFile, self.testOutputFile]
        makesitetrack.main(argv)


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

    return suite


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