erange version 4.0a dev release
[erange.git] / test / testMarkLinkers.py
1 '''
2 Created on Sep 15, 2010
3
4 @author: sau
5 '''
6 import unittest
7 import os
8 from erange.chiapet import markLinkers
9
10
11 class TestMarkLinkers(unittest.TestCase):
12     linkerFileName = "/Users/sau/Eclipse/erange/source/Erange/chiapet/linkers.fa"
13     inFileName = "linkerTestIn.txt"
14     outFileName = "linkerTestOut.txt"
15
16     def setUp(self):
17         infile = open(self.inFileName, "w")
18         infile.close()
19
20
21     def tearDown(self):
22         try:
23             os.remove(self.inFileName)
24         except OSError:
25             pass
26
27         try:
28             os.remove(self.outFileName)
29         except OSError:
30             pass
31
32
33     def testMarkLinkers(self):
34         markLinkers.markLinkers(self.linkerFileName, self.inFileName, self.outFileName)
35         output = open(self.outFileName)
36         for line in output:
37             self.assertEquals("", line)
38
39         output.close()
40         os.remove(self.outFileName)
41
42         infile = open(self.inFileName, "w")
43         print >> infile, ""
44         print >> infile, "@Linker1"
45         print >> infile, "........................GTTGGATAAGATATCGCGG....."
46         print >> infile, "@NoLinker"
47         print >> infile, "GATTACA.GATTACA.GATTACA.GATTACA.GATTACA.GATTACA."
48         print >> infile, "@Linker2"
49         print >> infile, "........................GTTGGAATGTATATCGCGG....."
50         print >> infile, "@Linker1Short"
51         print >> infile, "..............GTTGGAATGTATATCGCGG..............."
52         print >> infile, "@Linker2Short"
53         print >> infile, "..............GTTGGAATGTATATCGCGG..............."
54         infile.close()
55
56         markLinkers.markLinkers(self.linkerFileName, self.inFileName, self.outFileName)
57         output = open(self.outFileName)
58         self.assertEquals(">L1_Linker1\n", output.readline())
59         self.assertEquals("....................\n", output.readline())
60         self.assertEquals(">NA_NoLinker\n", output.readline())
61         self.assertEquals("GATTACA.GATTACA.GATT\n", output.readline())
62         self.assertEquals(">NA_NoLinker\n", output.readline())
63         self.assertEquals("GATTACA.GATTACA.GATT\n", output.readline())
64         self.assertEquals(">NA_Linker2\n", output.readline())
65         self.assertEquals("....................\n", output.readline())
66         self.assertEquals(">L2_Linker2\n", output.readline())
67         self.assertEquals("....................\n", output.readline())
68         self.assertEquals(">NA_Linker1Short\n", output.readline())
69         self.assertEquals("..............GTTGGA\n", output.readline())
70         self.assertEquals(">NA_Linker1Short\n", output.readline())
71         self.assertEquals("..............GTTGGA\n", output.readline())
72         self.assertEquals(">NA_Linker2Short\n", output.readline())
73         self.assertEquals("..............GTTGGA\n", output.readline())
74         self.assertEquals(">NA_Linker2Short\n", output.readline())
75         self.assertEquals("..............GTTGGA\n", output.readline())
76
77         output.close()
78         #TODO: Check that we really do want to output the same line
79         #multiple times in the case where neither linker is detected.
80         #See if downstream there is a real reason for doing it this way
81         #or if it was handled as a bug introduced at this stage of the
82         #analysis.
83
84
85     def testGetLinkerInformation(self):
86         linkerDict, linkerList = markLinkers.getLinkerInformation([])
87         resultDict = {}
88         resultList = []
89         self.assertEquals(resultDict, linkerDict)
90         self.assertEquals(resultList, linkerList)
91
92         linkerData = [">linker_b.1",
93                       "GTTGGATAAGATATCGCGG",
94                       ">linker_b.2",
95                       "GTTGGAATGTATATCGCGG"
96         ]
97         linkerDict, linkerList = markLinkers.getLinkerInformation(linkerData)
98         resultDict = {"linker_b.1": "GTTGGATAAG",
99                       "linker_b.2": "GTTGGAATGT"
100         }
101         resultList = ["linker_b.1", "linker_b.2"]
102         self.assertEquals(resultDict, linkerDict)
103         self.assertEquals(resultList, linkerList)
104
105
106     def testGetLinkerInformationFromFile(self):
107         linkerDict, linkerList = markLinkers.getLinkerInformationFromFile("bad file name")
108         resultDict = {}
109         resultList = []
110         self.assertEquals(resultDict, linkerDict)
111         self.assertEquals(resultList, linkerList)
112
113         linkerDict, linkerList = markLinkers.getLinkerInformationFromFile(self.linkerFileName)
114         resultDict = {"linker_b.1": "GTTGGATAAG",
115                       "linker_b.2": "GTTGGAATGT"
116         }
117         resultList = ["linker_b.1", "linker_b.2"]
118         self.assertEquals(resultDict, linkerDict)
119         self.assertEquals(resultList, linkerList)
120
121
122     def testMain(self):
123         argv = ["markLinkers", self.linkerFileName, self.inFileName, self.outFileName]
124         markLinkers.main(argv)
125         output = open(self.outFileName)
126         for line in output:
127             self.assertEquals("", line)
128
129         output.close()
130         os.remove(self.outFileName)
131
132
133 def suite():
134     suite = unittest.TestSuite()
135     suite.addTest(unittest.makeSuite(TestMarkLinkers))
136
137     return suite
138
139
140 if __name__ == "__main__":
141     #import sys;sys.argv = ['', 'Test.testName']
142     unittest.main()