snapshot of 4.0a development. initial git repo commit
[erange.git] / test / testProcessVelvet.py
1 '''
2 Created on Sep 15, 2010
3
4 @author: sau
5 '''
6 import unittest
7 import os
8 from Erange.rnapath import processvelvet
9
10
11 class TestProcessVelvet(unittest.TestCase):
12     inFileName = "testProcessVelvetIn.txt"
13     filterFileName = "testProcessVelvetFilter.txt"
14     outFileName = "testProcessVelvetOut.txt"
15
16
17     def setUp(self):
18         infile = open(self.inFileName, "w")
19         infile.close()
20         filter = open(self.filterFileName, "w")
21         filter.write("0\t1\t2\t3\t4\t5\t6\t7\t8\tNODE1-1_0\n")
22         filter.close()
23
24
25     def tearDown(self):
26         try:
27             os.remove(self.inFileName)
28         except OSError:
29             pass
30
31         try:
32             os.remove(self.filterFileName)
33         except OSError:
34             pass
35
36         try:
37             os.remove(self.outFileName)
38         except OSError:
39             pass
40
41
42     def testProcessVelvet(self):
43         processvelvet.processvelvet(self.inFileName, self.outFileName)
44         outfile = open(self.outFileName)
45         for line in outfile:
46             self.assertEquals("", line)
47
48         os.remove(self.outFileName)
49
50         infile = open(self.inFileName, "w")
51         print >> infile, ">NODE1-1_0"
52         print >> infile, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
53         infile.close()
54
55         processvelvet.processvelvet(self.inFileName, self.outFileName)
56         outfile = open(self.outFileName)
57         self.assertEquals(">chr0\n", outfile.readline())
58         self.assertEquals("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", outfile.readline())
59         self.assertEquals("", outfile.readline())
60         outfile.close()
61         os.remove(self.outFileName)
62         processvelvet.processvelvet(self.inFileName, self.outFileName, filterFileName=self.filterFileName)
63         outfile = open(self.outFileName)
64         self.assertEquals("", outfile.readline())
65         outfile.close()
66         os.remove(self.outFileName)
67
68         infile = open(self.inFileName, "w")
69         print >> infile, ">NODE1-1_1"
70         print >> infile, "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
71         print >> infile, ">NODE1-1_0"
72         print >> infile, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
73         infile.close()
74
75         processvelvet.processvelvet(self.inFileName, self.outFileName)
76         outfile = open(self.outFileName)
77         self.assertEquals(">chr1\n", outfile.readline())
78         self.assertEquals("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n", outfile.readline())
79         self.assertEquals(">chr0\n", outfile.readline())
80         self.assertEquals("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", outfile.readline())
81         self.assertEquals("", outfile.readline())
82         outfile.close()
83         os.remove(self.outFileName)
84         processvelvet.processvelvet(self.inFileName, self.outFileName, filterFileName=self.filterFileName)
85         outfile = open(self.outFileName)
86         self.assertEquals(">chr1\n", outfile.readline())
87         self.assertEquals("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n", outfile.readline())
88         self.assertEquals("", outfile.readline())
89         outfile.close()
90         os.remove(self.outFileName)
91
92         infile = open(self.inFileName, "w")
93         print >> infile, ">NODE1-1_1"
94         print >> infile, "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT"
95         print >> infile, ">NODE1-1_0"
96         print >> infile, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
97         print >> infile, ">NODE1-1_2"
98         print >> infile, "GATTACA"
99         infile.close()
100
101         processvelvet.processvelvet(self.inFileName, self.outFileName)
102         outfile = open(self.outFileName)
103         self.assertEquals(">chr1\n", outfile.readline())
104         self.assertEquals("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n", outfile.readline())
105         self.assertEquals(">chr0\n", outfile.readline())
106         self.assertEquals("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n", outfile.readline())
107         self.assertEquals(">chr2\n", outfile.readline())
108         self.assertEquals("GATTACA\n", outfile.readline())
109         self.assertEquals("", outfile.readline())
110         outfile.close()
111         os.remove(self.outFileName)
112         processvelvet.processvelvet(self.inFileName, self.outFileName, filterFileName=self.filterFileName)
113         outfile = open(self.outFileName)
114         self.assertEquals(">chr1\n", outfile.readline())
115         self.assertEquals("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n", outfile.readline())
116         self.assertEquals(">chr2\n", outfile.readline())
117         self.assertEquals("GATTACA\n", outfile.readline())
118         self.assertEquals("", outfile.readline())
119         outfile.close()
120         os.remove(self.outFileName)
121         processvelvet.processvelvet(self.inFileName, self.outFileName, filterFileName=self.filterFileName, minSize=10)
122         outfile = open(self.outFileName)
123         self.assertEquals(">chr1\n", outfile.readline())
124         self.assertEquals("TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n", outfile.readline())
125         self.assertEquals("", outfile.readline())
126         outfile.close()
127
128
129     def testGetFilterList(self):
130         self.assertEquals([], processvelvet.getFilterList())
131         self.assertEquals(["NODE1-1_0"], processvelvet.getFilterList(self.filterFileName))
132         self.assertEquals([], processvelvet.getFilterList("whatfile?"))
133
134         filter = open(self.filterFileName, "a")
135         filter.write("some fields without the key trigger string\n")
136         filter.close()
137         self.assertEquals(["NODE1-1_0"], processvelvet.getFilterList(self.filterFileName))
138
139         filter = open(self.filterFileName, "a")
140         filter.write("0\t1\t2\t3\t4\t5\t6\t7\t8\tNODEAnything\n")
141         filter.close()
142         self.assertEquals(["NODE1-1_0", "NODEAnything"], processvelvet.getFilterList(self.filterFileName))
143
144         filter = open(self.filterFileName, "a")
145         filter.write("0\tNODEWrongField\n")
146         filter.close()
147         self.assertEquals(["NODE1-1_0", "NODEAnything"], processvelvet.getFilterList(self.filterFileName))
148
149         filter = open(self.filterFileName, "a")
150         filter.write("0\t1\t2\t3\t4\t5\t6\t7\t8\tNODEAnything\n")
151         filter.close()
152         self.assertEquals(["NODE1-1_0", "NODEAnything"], processvelvet.getFilterList(self.filterFileName))
153
154
155     def testWriteNode(self):
156         node = {"contigPrefix": "chr",
157                 "completeID": "",
158                 "currentSeq": ""
159         }
160
161         counts = {"acceptedSize": 0,
162                   "nSize": 0,
163                   "contigsAccepted": 0,
164                   "filteredSize": 0
165         }
166
167         filterList = []
168
169         outfile = open(self.outFileName, "w")
170         processvelvet.writeNode(outfile, node, filterList, counts, minSize=0, keepCoverage=False)
171         outfile.close()
172         results = open(self.outFileName)
173         self.assertEquals("", results.readline())
174         results.close()
175         os.remove(self.outFileName)
176
177         node["completeID"] = "<5"
178         node["currentSeq"] = "GATTACA\n"
179         outfile = open(self.outFileName, "w")
180         processvelvet.writeNode(outfile, node, filterList, counts, minSize=0, keepCoverage=False)
181         self.assertEquals(counts["filteredSize"], 7)
182         counts["filteredSize"] = 0
183         outfile.close()
184         results = open(self.outFileName)
185         self.assertEquals("", results.readline())
186         results.close()
187         os.remove(self.outFileName)
188
189         node["completeID"] = "NODE1_1"
190         node["currentSeq"] = "GATTACA\n"
191         filterList = ["NODE1_1"]
192         outfile = open(self.outFileName, "w")
193         processvelvet.writeNode(outfile, node, filterList, counts, minSize=0, keepCoverage=False)
194         self.assertEquals(counts["filteredSize"], 7)
195         counts["filteredSize"] = 0
196         outfile.close()
197         results = open(self.outFileName)
198         self.assertEquals("", results.readline())
199         results.close()
200         os.remove(self.outFileName)
201
202         node["completeID"] = "NODE1_1"
203         node["currentSeq"] = "GATTACA\n"
204         filterList = []
205         outfile = open(self.outFileName, "w")
206         processvelvet.writeNode(outfile, node, filterList, counts, minSize=0, keepCoverage=False)
207         self.assertEquals(counts["acceptedSize"], 7)
208         outfile.close()
209         results = open(self.outFileName)
210         self.assertEquals(">chr1\n", results.readline())
211         self.assertEquals("GATTACA\n", results.readline())
212         self.assertEquals("", results.readline())
213         results.close()
214         os.remove(self.outFileName)
215
216
217     def testMain(self):
218         argv = ["processVelvet", self.inFileName, self.outFileName]
219         processvelvet.main(argv)
220         outfile = open(self.outFileName)
221         for line in outfile:
222             self.assertEquals("", line)
223
224         os.remove(self.outFileName)
225
226
227 def suite():
228     suite = unittest.TestSuite()
229     suite.addTest(unittest.makeSuite(TestProcessVelvet))
230
231     return suite
232
233
234 if __name__ == "__main__":
235     #import sys;sys.argv = ['', 'Test.testName']
236     unittest.main()