erange version 4.0a dev release
[erange.git] / test / testRNAPATH.py
1 '''
2 Created on Sep 10, 2010
3
4 @author: sau
5 '''
6 import unittest
7 import os
8 from erange.rnapath import RNAPATH
9
10 compDict = {"A": "T",
11             "T": "A",
12             "G": "C",
13             "C": "G",
14             "S": "S",
15             "W": "W",
16             "R": "Y",
17             "Y": "R",
18             "M": "K",
19             "K": "M",
20             "H": "D",
21             "D": "H",
22             "B": "V",
23             "V": "B",
24             "N": "N",
25             "a": "t",
26             "t": "a",
27             "g": "c",
28             "c": "g",
29             "n": "n",
30             "z": "z"
31 }
32
33
34 class TestRNAPATH(unittest.TestCase):
35     incontigfilename = "contigIn.txt"
36     distalPairsfile = "distalPair.txt"
37     outpathfilename = "rnapathOut.txt"
38     outcontigfilename = "contigOut.txt"
39
40     def setUp(self):
41         inContigs = open(self.incontigfilename, "w")
42         inContigs.close()
43
44         distal = open(self.distalPairsfile, "w")
45         distal.close()
46
47
48     def tearDown(self):
49         try:
50             os.remove(self.incontigfilename)
51         except OSError:
52             pass
53
54         try:
55             os.remove(self.distalPairsfile)
56         except OSError:
57             pass
58
59         try:
60             os.remove(self.outpathfilename)
61         except OSError:
62             pass
63
64         try:
65             os.remove(self.outcontigfilename)
66         except OSError:
67             pass
68
69
70     def testCompNT(self):
71         for nt in compDict.keys():
72             self.assertEquals(compDict[nt], RNAPATH.compNT(nt))
73
74         self.assertEquals("N", RNAPATH.compNT("5"))
75         self.assertEquals("N", RNAPATH.compNT("anything"))
76
77
78     def testComplement(self):
79         self.assertEquals("", RNAPATH.complement(""))
80         for nt in compDict.keys():
81             self.assertEquals(compDict[nt], RNAPATH.complement(nt))
82
83         self.assertEquals("TGTAATC", RNAPATH.complement("GATTACA"))
84         self.assertEquals("TGTAATC", RNAPATH.complement("GATTACA", 7))
85         self.assertEquals("TGTAATC", RNAPATH.complement("GATTACA", -75632))
86         self.assertEquals("TGTA", RNAPATH.complement("GATTACA", 4))
87
88         #TODO: do we want to return when length > seqlength?  This is
89         # the current return and it seems very wrong we only N fill
90         # after going more then seqlength in negative direction
91         self.assertEquals("TGTAATCTG", RNAPATH.complement("GATTACA", 9))
92         self.assertEquals("TGTAATCTGTAATCNNNNN", RNAPATH.complement("GATTACA", 19))
93
94     #TODO: write test
95     def testRnaPath(self):
96         RNAPATH.rnaPath(self.incontigfilename, self.distalPairsfile, self.outpathfilename, self.outcontigfilename)
97         outfile = open(self.outpathfilename)
98         self.assertTrue("#settings:" in outfile.readline())
99         self.assertEquals("", outfile.readline())
100         outfile.close()
101         outcontig = open(self.outcontigfilename)
102         self.assertEquals(0, len(outcontig.readlines()))
103         outcontig.close()
104
105         #infile = open(self.incontigfilename, "w")
106         #infile.write(">chr1 stuff\n")
107         #infile.write("GATTACA\n")
108         #infile.close()
109         #RNAPATH.rnaPath(self.incontigfilename, self.distalPairsfile, self.outpathfilename, self.outcontigfilename)
110         #outfile = open(self.outpathfilename)
111         #self.assertTrue("#settings:" in outfile.readline())
112         #self.assertEquals("", outfile.readline())
113         #outfile.close()
114
115
116     #TODO: write test
117     def testGetPath(self):
118         pass
119
120
121     #TODO: write test
122     def testTraverseGraph(self):
123         leafList = []
124         edgeMatrix = RNAPATH.EdgeMatrix(0)
125         pathList, visitedDict = RNAPATH.traverseGraph(leafList, edgeMatrix)
126         self.assertEquals([], pathList)
127         self.assertEquals({}, visitedDict)
128
129         leafList = [1]
130         edgeMatrix = RNAPATH.EdgeMatrix(3)
131         edgeMatrix.edgeArray[2][1] = 3
132         edgeMatrix.edgeArray[1][2] = 3
133         pathList, visitedDict = RNAPATH.traverseGraph(leafList, edgeMatrix)
134         self.assertEquals([ [1, 2] ], pathList)
135         self.assertEquals({1: "", 2: ""}, visitedDict)
136
137         leafList = [1, 2]
138         edgeMatrix = RNAPATH.EdgeMatrix(3)
139         edgeMatrix.edgeArray[2][1] = 3
140         edgeMatrix.edgeArray[1][2] = 3
141         pathList, visitedDict = RNAPATH.traverseGraph(leafList, edgeMatrix)
142         self.assertEquals([ [1, 2] ], pathList)
143         self.assertEquals({1: "", 2: ""}, visitedDict)
144
145
146     #TODO: write test
147     def testGetContigsFromFile(self):
148         contigNum, nameList, contigDict, origSize = RNAPATH.getContigsFromFile(self.incontigfilename)
149         self.assertEquals(0, contigNum)
150         self.assertEquals([], nameList)
151         self.assertEquals({}, contigDict)
152         self.assertEquals([], origSize)
153
154
155     #TODO: check for boundary condition and special cases
156     def testEdgeMatrix(self):
157         edgeMatrix = RNAPATH.EdgeMatrix(0)
158         result = "[]"
159         self.assertEquals(result, str(edgeMatrix.edgeArray))
160
161         edgeMatrix = RNAPATH.EdgeMatrix(3)
162         result = "[[0 0 0]\n [0 0 0]\n [0 0 0]]"
163         self.assertEquals(result, str(edgeMatrix.edgeArray))
164         self.assertEquals([], edgeMatrix.visitLink(0))
165
166         edgeMatrix.edgeArray[0][1] = 1
167         self.assertEquals([], edgeMatrix.visitLink(0))
168
169         edgeMatrix.edgeArray[0][1] = 2
170         result = [0]
171         self.assertEquals(result, edgeMatrix.visitLink(0))
172
173         edgeMatrix.edgeArray[2][1] = 2
174         result = []
175         self.assertEquals(result, edgeMatrix.visitLink(0))
176         edgeMatrix.edgeArray[2][1] = 2
177         result = []
178         self.assertEquals(result, edgeMatrix.visitLink(1))
179         edgeMatrix.edgeArray[2][1] = 2
180         result = [2]
181         self.assertEquals(result, edgeMatrix.visitLink(2))
182
183         edgeMatrix.edgeArray[2][1] = 3
184         edgeMatrix.edgeArray[1][2] = 3
185         result = [1, 2]
186         self.assertEquals(result, edgeMatrix.visitLink(1))
187
188
189     def testMain(self):
190         argv = ["RNAPATH", self.incontigfilename, self.distalPairsfile, self.outpathfilename, self.outcontigfilename]
191         RNAPATH.main(argv)
192         outfile = open(self.outpathfilename)
193         self.assertTrue("#settings:" in outfile.readline())
194         self.assertEquals("", outfile.readline())
195         outfile.close()
196         outcontig = open(self.outcontigfilename)
197         self.assertEquals(0, len(outcontig.readlines()))
198         outcontig.close()
199
200
201 def suite():
202     suite = unittest.TestSuite()
203     suite.addTest(unittest.makeSuite(TestRNAPATH))
204
205     return suite
206
207
208 if __name__ == "__main__":
209     #import sys;sys.argv = ['', 'Test.testName']
210     unittest.main()