a755f6c0e39fe3161b105c24cd6d48ab77b36b47
[htsworkflow.git] / htsworkflow / submission / test / test_results.py
1 #!/usr/bin/env python
2 from __future__ import absolute_import
3
4 from pprint import pprint
5 import shutil
6
7 from unittest import TestCase, defaultTestLoader
8
9 from htsworkflow.submission.results import ResultMap
10 from .submission_test_common import *
11
12 class TestResultMap(TestCase):
13     def setUp(self):
14         generate_sample_results_tree(self, 'results_test')
15
16     def tearDown(self):
17         shutil.rmtree(self.tempdir)
18
19     def test_dict_like(self):
20         """Make sure the result map works like an ordered dictionary
21         """
22         results = ResultMap()
23         results['1000'] = 'dir1000'
24         results['2000'] = 'dir2000'
25         results['1500'] = 'dir1500'
26
27         self.failUnlessEqual(results.keys(), ['1000', '2000', '1500'])
28         self.failUnlessEqual(list(results.values()),
29                              ['dir1000', 'dir2000', 'dir1500'])
30         self.failUnlessEqual(list(results.items()),
31                              [('1000', 'dir1000'),
32                               ('2000', 'dir2000'),
33                               ('1500', 'dir1500')])
34
35         self.failUnlessEqual(results['1000'], 'dir1000')
36         self.failUnlessEqual(results['1500'], 'dir1500')
37         self.failUnlessEqual(results['2000'], 'dir2000')
38
39         self.assertTrue(u'2000' in results)
40         self.assertTrue('2000' in results)
41         self.assertFalse(u'77777' in results)
42         self.assertFalse('77777' in results)
43
44     def test_make_from_absolute(self):
45         """Test that make from works if ResultMap has absolute paths
46         """
47         results = ResultMap()
48         sample1_dir = os.path.join(self.resultdir, S1_NAME)
49         sample2_dir = os.path.join(self.resultdir, S2_NAME)
50         results['1000'] =  sample1_dir
51         results['2000'] =  sample2_dir
52
53         results.make_tree_from(self.sourcedir, self.resultdir)
54         self.failUnless(os.path.isdir(sample1_dir))
55         self.failUnless(os.path.isdir(sample2_dir))
56
57         for f in S1_FILES + S2_FILES:
58             self.failUnless(
59                 os.path.islink(
60                     os.path.join(self.resultdir, f)))
61
62     def test_make_from_filename(self):
63         """Test that make from works if ResultMap has no path
64         """
65         results = ResultMap()
66         results['1000'] =  S1_NAME
67         results['2000'] =  S2_NAME
68
69         results.make_tree_from(self.sourcedir, self.resultdir)
70         sample1_dir = os.path.join(self.resultdir, S1_NAME)
71         sample2_dir = os.path.join(self.resultdir, S2_NAME)
72         self.failUnless(os.path.isdir(sample1_dir))
73         self.failUnless(os.path.isdir(sample2_dir))
74
75         for f in S1_FILES + S2_FILES:
76             self.failUnless(
77                 os.path.islink(
78                     os.path.join(self.resultdir, f)))
79
80     def test_make_from_shared_directory(self):
81         """Split multiple datasets stored in a single directory
82         """
83         self.skipTest("not implemented yet")
84         results = ResultMap()
85         results['S1'] = os.path.join(SCOMBINED_NAME, 's1*')
86         results['S2'] = os.path.join(SCOMBINED_NAME, 's2*')
87
88 def suite():
89     suite = defaultTestLoader.loadTestsFromTestCase(TestResultMap)
90     return suite
91
92 if __name__ == "__main__":
93     import logging
94     logging.basicConfig(level=logging.DEBUG)
95     from unittest import main
96     main(defaultTest='suite')