Move the code to scan the sequence file archive to its own module so
[htsworkflow.git] / htsworkflow / pipelines / test / test_sequences.py
1 #!/usr/bin/env python
2 import os
3 import unittest
4
5 from htsworkflow.pipelines import sequences
6
7 class SequenceFileTests(unittest.TestCase):
8     """
9     Make sure the sequence archive class works
10     """
11     def test_srf(self):
12         path = '/root/42BW9AAXX/C1-38'
13         name = 'woldlab_090622_HWI-EAS229_0120_42BW9AAXX_4.srf'
14         pathname = os.path.join(path,name)
15         f = sequences.parse_srf(path, name)
16
17         self.failUnlessEqual(f.filetype, 'srf')
18         self.failUnlessEqual(f.path, pathname)
19         self.failUnlessEqual(f.flowcell, '42BW9AAXX')
20         self.failUnlessEqual(f.lane, 4)
21         self.failUnlessEqual(f.read, None)
22         self.failUnlessEqual(f.pf, None)
23         self.failUnlessEqual(f.cycle, None)
24
25     def test_qseq(self):
26         path = '/root/42BW9AAXX/C1-36'
27         name = 'woldlab_090622_HWI-EAS229_0120_42BW9AAXX_l4_r1.tar.bz2'
28         pathname = os.path.join(path,name)
29         f = sequences.parse_qseq(path, name)
30
31         self.failUnlessEqual(f.filetype, 'qseq')
32         self.failUnlessEqual(f.path, pathname)
33         self.failUnlessEqual(f.flowcell, '42BW9AAXX')
34         self.failUnlessEqual(f.lane, 4)
35         self.failUnlessEqual(f.read, 1)
36         self.failUnlessEqual(f.pf, None)
37         self.failUnlessEqual(f.cycle, None)
38
39     def test_fastq(self):
40         path = '/root/42BW9AAXX/C1-38'
41         name = 'woldlab_090622_HWI-EAS229_0120_42BW9AAXX_l4_r1_pass.fastq.bz2'
42         pathname = os.path.join(path,name)
43         f = sequences.parse_fastq(path, name)
44
45         self.failUnlessEqual(f.filetype, 'fastq')
46         self.failUnlessEqual(f.path, pathname)
47         self.failUnlessEqual(f.flowcell, '42BW9AAXX')
48         self.failUnlessEqual(f.lane, 4)
49         self.failUnlessEqual(f.read, 1)
50         self.failUnlessEqual(f.pf, True)
51         self.failUnlessEqual(f.cycle, None)
52
53         name = 'woldlab_090622_HWI-EAS229_0120_42BW9AAXX_l4_r2_nopass.fastq.bz2'
54         pathname = os.path.join(path,name)
55         f = sequences.parse_fastq(path, name)
56
57         self.failUnlessEqual(f.filetype, 'fastq')
58         self.failUnlessEqual(f.path, pathname)
59         self.failUnlessEqual(f.flowcell, '42BW9AAXX')
60         self.failUnlessEqual(f.lane, 4)
61         self.failUnlessEqual(f.read, 2)
62         self.failUnlessEqual(f.pf, False)
63         self.failUnlessEqual(f.cycle, None)
64
65     def test_eland(self):
66         path = '/root/42BW9AAXX/C1-38'
67         name = 's_4_eland_extended.txt.bz2'
68         pathname = os.path.join(path,name)
69         f = sequences.parse_eland(path, name)
70
71         self.failUnlessEqual(f.filetype, 'eland')
72         self.failUnlessEqual(f.path, pathname)
73         self.failUnlessEqual(f.flowcell, '42BW9AAXX')
74         self.failUnlessEqual(f.lane, 4)
75         self.failUnlessEqual(f.read, None)
76         self.failUnlessEqual(f.pf, None)
77         self.failUnlessEqual(f.cycle, 'C1-38')
78
79         path = '/root/42BW9AAXX/C1-152'
80         name = 's_4_1_eland_extended.txt.bz2'
81         pathname = os.path.join(path,name)
82         f = sequences.parse_eland(path, name)
83
84         self.failUnlessEqual(f.filetype, 'eland')
85         self.failUnlessEqual(f.path, pathname)
86         self.failUnlessEqual(f.flowcell, '42BW9AAXX')
87         self.failUnlessEqual(f.lane, 4)
88         self.failUnlessEqual(f.read, 1)
89         self.failUnlessEqual(f.pf, None)
90         self.failUnlessEqual(f.cycle, 'C1-152')
91
92     def test_sequence_file_equality(self):
93         path = '/root/42BW9AAXX/C1-38'
94         name = 'woldlab_090622_HWI-EAS229_0120_42BW9AAXX_l4_r1.tar.bz2'
95
96         f1_qseq = sequences.parse_qseq(path, name)
97         f2_qseq = sequences.parse_qseq(path, name)
98
99         self.failUnlessEqual(f1_qseq, f2_qseq)
100
101 def suite():
102     return unittest.makeSuite(SequenceFileTests,'test')
103
104 if __name__ == "__main__":
105     unittest.main(defaultTest="suite")