Change unittest2 back into unittest.
[htsworkflow.git] / htsworkflow / pipelines / test / test_genomemap.py
1 #!/usr/bin/env python
2 """More direct synthetic test cases for the eland output file processing
3 """
4 import os
5 from StringIO import StringIO
6 import shutil
7 import tempfile
8 from unittest import TestCase
9
10 from htsworkflow.pipelines import ElementTree
11 from htsworkflow.pipelines import genomemap
12
13 MINI_GENOME_XML = '''<sequenceSizes>
14         <chromosome fileName="chr2.fa" contigName="chr2" totalBases="181748087"/>
15         <chromosome fileName="chr1.fa" contigName="chr1" totalBases="197195432"/>
16 </sequenceSizes>
17 '''
18 class TestGenomeMap(TestCase):
19     def test_genomesizes_xml(self):
20         xml = ElementTree.fromstring(MINI_GENOME_XML)
21         g = genomemap.GenomeMap()
22         g.build_map_from_element(xml)
23
24         self.assertTrue('chr1.fa' in g)
25         self.assertEqual(g['chr1.fa'], 'mm9/chr1.fa')
26
27     def test_genomesizes_file(self):
28         g = genomemap.GenomeMap()
29         try:
30             tempdir = tempfile.mkdtemp(prefix='tmp_genome')
31             name = os.path.join(tempdir, '11111_NoIndex_L001_genomesize.xml')
32             stream = open(name, 'w')
33             stream.write(MINI_GENOME_XML)
34             stream.close()
35             g.parse_genomesize(name)
36         finally:
37             shutil.rmtree(tempdir)
38
39         self.assertTrue('chr1.fa' in g)
40         self.assertEqual(len(g), 2)
41         self.assertEqual(g['chr1.fa'], 'mm9/chr1.fa')
42
43     def test_simulated_genome_dir(self):
44         vlds = [genomemap.vldInfo('chr1.fa.vld', False),
45                 genomemap.vldInfo('chr2.fa.vld', False),
46                 genomemap.vldInfo('chr3.fa.vld', False),
47                 genomemap.vldInfo('Lambda.fa.vld', True),]
48
49         g = genomemap.GenomeMap()
50         g.build_map_from_dir('mm9', vlds)
51
52         self.assertTrue('chr1.fa' in g)
53         self.assertEqual(len(g), 4)
54         self.assertEqual(g['chr1.fa'], 'mm9/chr1.fa')
55         self.assertEqual(g['Lambda.fa'], 'Lambda.fa')
56
57     def test_genome_dir(self):
58         g = genomemap.GenomeMap()
59         names = ['chr1', 'chr2', 'chr3']
60         tempdir = None
61         try:
62             tempdir = tempfile.mkdtemp(prefix='tmp_mm9')
63             for base in names:
64                 name = os.path.join(tempdir, base + '.fa.vld')
65                 stream = open(name, 'w')
66                 stream.write(name)
67                 stream.close()
68             g.scan_genome_dir(tempdir)
69         finally:
70             if tempdir is not None:
71                 shutil.rmtree(tempdir)
72
73         temppath, tempgenome = os.path.split(tempdir)
74         self.assertTrue('chr1.fa' in g)
75         self.assertEqual(len(g), 3)
76         self.assertEqual(g['chr1.fa'], '{0}/chr1.fa'.format(tempgenome))
77
78
79 def suite():
80     from unittest import TestSuite, defaultTestLoader
81     suite = TestSuite()
82     suite.addTests(defaultTestLoader.loadTestsFromTestCase(TestGenomeMap))
83     return suite
84
85
86 if __name__ == "__main__":
87     from unittest import main
88     main(defaultTest="suite")