erange version 4.0a dev release
[erange.git] / test / testGetSNPs.py
1 '''
2 Created on Jun 4, 2010
3
4 @author: sau
5 '''
6 import os, unittest
7 from erange import ReadDataset
8 from erange import getSNPs
9
10
11 class TestGetSNPs(unittest.TestCase):
12
13     def setUp(self):
14         self.rdsDNA = ReadDataset.ReadDataset("testDNARDSForUnitTests.rds", True, "DNA", verbose=True)
15
16         uniqueInsertList = [("uniqueID1", "chr1", 10, 20, "+", 1.0, "", ""),
17                             ("uniqueID2", "chr1", 100, 200, "+", 1.0, "", ""),
18                             ("uniqueID3", "chr1", 1000, 2000, "+", 1.0, "", "G10A")]
19
20         multiInsertList = [("multiID1", "chr2", 1010, 1020, "+", 0.5, "", ""),
21                            ("multiID1", "chr2", 1010, 1020, "+", 0.5, "", ""),
22                            ("multiID2", "chr2", 10100, 10200, "+", 0.25, "", ""),
23                            ("multiID2", "chr2", 10100, 10200, "+", 0.25, "", ""),
24                            ("multiID2", "chr2", 10100, 10200, "+", 0.25, "", ""),
25                            ("multiID2", "chr2", 10100, 10200, "+", 0.25, "", "")]
26
27         self.rdsDNA.insertUniqs(uniqueInsertList)
28         self.rdsDNA.insertMulti(multiInsertList)
29         self.rdsDNA.insertMetadata([("readsize", 100)])
30
31
32     def tearDown(self):
33         os.remove("./testDNARDSForUnitTests.rds")
34         self.rdsDNA = None
35
36
37     def testGetMatchDict(self):
38         uniqueTestDict = getSNPs.getMatchDict(self.rdsDNA, "chr1", withSplices=False)
39
40         self.assertEqual(uniqueTestDict[10][0], 20, "incorrect result for unique chr position 10")
41         self.assertEqual(uniqueTestDict[100][0], 200, "incorrect result for unique chr position 100")
42         self.assertEqual(uniqueTestDict[1000][0], 2000, "incorrect result for unique chr position 1000")
43
44         self.assertRaises(KeyError, getSNPs.getMatchDict, self.rdsDNA, "chr2", withSplices=False)
45
46
47     def testGetMismatchDict(self):
48         mismatchDict = getSNPs.getMismatchDict(self.rdsDNA, "chr1")
49         result = {1009: {"totalBaseDict": {"A-G": 1},
50                          "uniqueReadCount": 1,
51                          "uniqBaseDict": {"A-G": 1},
52                          "back": "1000:A-G", "totalCount": 1
53                          }
54         }
55         self.assertEquals(result, mismatchDict)
56
57
58     #TODO: write unit test
59     def testGetSNPs(self):
60         pass
61
62
63     #TODO: write unit test
64     def testWriteSNPsToFile(self):
65         pass
66
67
68     def testDoNotProcessChromosome(self):
69         self.assertFalse(getSNPs.doNotProcessChromosome(True, "chr1"))
70         self.assertFalse(getSNPs.doNotProcessChromosome(False, "chr1"))
71         self.assertFalse(getSNPs.doNotProcessChromosome(False, "badName"))
72         self.assertTrue(getSNPs.doNotProcessChromosome(True, "badName"))
73         self.assertTrue(getSNPs.doNotProcessChromosome(True, ""))
74
75
76 def suite():
77     suite = unittest.TestSuite()
78     suite.addTest(unittest.makeSuite(TestGetSNPs))
79
80     return suite
81
82
83 if __name__ == "__main__":
84     #import sys;sys.argv = ['', 'Test.testName']
85     unittest.main()