Update fastqname code & test code to better support having optional compression exten...
[htsworkflow.git] / htsworkflow / submission / test / test_fastqname.py
1 from unittest2 import TestCase
2 from htsworkflow.submission.fastqname import FastqName
3
4 class TestFastqName(TestCase):
5     def test_init_empty(self):
6         fq = FastqName()
7         self.assertEqual(fq.is_valid, False)
8
9     def test_init_single_filename(self):
10         fq = FastqName(filename="12345_AABBCCDDXX_c100_l1.fastq")
11         self.assertEqual(fq.lib_id, "12345")
12         self.assertEqual(fq['lib_id'], "12345")
13         self.assertEqual(fq.flowcell, "AABBCCDDXX")
14         self.assertEqual(fq['flowcell'], "AABBCCDDXX")
15         self.assertEqual(fq.cycle, "100")
16         self.assertEqual(fq['cycle'], "100")
17         self.assertEqual(fq.lane, "1")
18         self.assertEqual(fq['lane'], "1")
19         self.assertEqual(fq.is_paired, False)
20         self.assertEqual(fq.compression_extension, '')
21
22     def test_init_single_filename_gz(self):
23         fq = FastqName(filename="12345_AABBCCDDXX_c100_l1.fastq.gz")
24         self.assertEqual(fq.lib_id, "12345")
25         self.assertEqual(fq['lib_id'], "12345")
26         self.assertEqual(fq.flowcell, "AABBCCDDXX")
27         self.assertEqual(fq['flowcell'], "AABBCCDDXX")
28         self.assertEqual(fq.cycle, "100")
29         self.assertEqual(fq['cycle'], "100")
30         self.assertEqual(fq.lane, "1")
31         self.assertEqual(fq['lane'], "1")
32         self.assertEqual(fq.is_paired, False)
33         self.assertEqual(fq.compression_extension, '.gz')
34
35     def test_init_single_filename(self):
36         fq = FastqName(filename="12345_AABBCCDDXX_c100_l1_r2.fastq")
37         self.assertEqual(fq.lib_id, "12345")
38         self.assertEqual(fq['lib_id'], "12345")
39         self.assertEqual(fq.flowcell, "AABBCCDDXX")
40         self.assertEqual(fq['flowcell'], "AABBCCDDXX")
41         self.assertEqual(fq.cycle, "100")
42         self.assertEqual(fq['cycle'], "100")
43         self.assertEqual(fq.lane, "1")
44         self.assertEqual(fq['lane'], "1")
45         self.assertEqual(fq.read, "2")
46         self.assertEqual(fq['read'], "2")
47         self.assertEqual(fq.is_paired, True)
48         self.assertEqual(fq.compression_extension, None)
49
50     def test_init_bad_filename(self):
51         attribs = {'filename': 'asdf.bam'}
52         self.assertRaises(ValueError, FastqName, **attribs)
53
54     def test_init_single_attributes(self):
55         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
56                        cycle = "100", lane="1")
57         self.assertEqual(fq.is_valid, True)
58         self.assertEqual(fq.lib_id, "12345")
59         self.assertEqual(fq['lib_id'], "12345")
60         self.assertEqual(fq.flowcell, "AABBCCDDXX")
61         self.assertEqual(fq['flowcell'], "AABBCCDDXX")
62         self.assertEqual(fq.cycle, "100")
63         self.assertEqual(fq['cycle'], "100")
64         self.assertEqual(fq.lane, "1")
65         self.assertEqual(fq['lane'], "1")
66         self.assertEqual(fq.is_paired, False)
67         self.assertEqual(fq.filename, "12345_AABBCCDDXX_c100_l1.fastq")
68         self.assertEqual(fq.compression_extension, None)
69
70     def test_init_single_attributes_set_single(self):
71         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
72                        cycle = "100", lane="1", is_paired=False)
73         self.assertEqual(fq.is_valid, True)
74         self.assertEqual(fq.is_paired, False)
75
76     def test_init_single_attributes_set_paired(self):
77         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
78                        cycle = "100", lane="1", is_paired=True)
79         self.assertEqual(fq.is_valid, False)
80         self.assertEqual(fq.is_paired, True)
81
82     def test_init_single_attributes_set_paired_bzip2(self):
83         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
84                        cycle = "100", lane="1", is_paired=True,
85                        compression_extension='.bzip2')
86         self.assertEqual(fq.is_valid, False)
87         self.assertEqual(fq.is_paired, True)
88         self.assertEqual(fq.compression_extension, '.bzip2')
89
90     def test_init_paired_attributes(self):
91         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
92                        cycle = "100", lane="1", read="2")
93         self.assertEqual(fq.is_valid, True)
94         self.assertEqual(fq.lib_id, "12345")
95         self.assertEqual(fq['lib_id'], "12345")
96         self.assertEqual(fq.flowcell, "AABBCCDDXX")
97         self.assertEqual(fq['flowcell'], "AABBCCDDXX")
98         self.assertEqual(fq.cycle, "100")
99         self.assertEqual(fq['cycle'], "100")
100         self.assertEqual(fq.lane, "1")
101         self.assertEqual(fq['lane'], "1")
102         self.assertEqual(fq.read, "2")
103         self.assertEqual(fq['read'], "2")
104         self.assertEqual(fq.is_paired, True)
105         self.assertEqual(fq.filename, "12345_AABBCCDDXX_c100_l1_r2.fastq")
106
107     def test_init_paired_attributes_set_single(self):
108         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
109                        cycle = "100", lane="1", read="2", is_paired=False)
110         self.assertEqual(fq.is_valid, True)
111         self.assertEqual(fq.is_paired, False)
112
113     def test_init_paired_attributes_set_paired(self):
114         fq = FastqName(lib_id="12345", flowcell="AABBCCDDXX",
115                        cycle = "100", lane="1", read="2", is_paired=True)
116         self.assertEqual(fq.is_valid, True)
117         self.assertEqual(fq.is_paired, True)
118
119     def test_init_insufficient_attributes(self):
120         attribs = dict(lib_id="12345", flowcell="AABBCCDDXX")
121         fq = FastqName(**attribs)
122         self.assertEqual(fq.is_valid, False)
123
124
125 def suite():
126     from unittest2 import TestSuite, defaultTestLoader
127     suite = TestSuite()
128     suite.addTests(defaultTestLoader.loadTestsFromTestCase(TestFastqName))
129     return suite
130
131 if __name__ == "__main__":
132     from unittest2 import main
133     main(defaultTest='suite')