Change unittest2 back into unittest.
[htsworkflow.git] / htsworkflow / pipelines / test / test_runfolder_ipar130.py
index c782e4f642920f01ee0cdeac830cb99f6c140101..366f588b8b4472d5248a23ca777195ae656625d2 100644 (file)
@@ -4,13 +4,14 @@ from datetime import datetime, date
 import os
 import tempfile
 import shutil
 import os
 import tempfile
 import shutil
-import unittest
+from unittest import TestCase
 
 
+from htsworkflow.pipelines import eland
 from htsworkflow.pipelines import ipar
 from htsworkflow.pipelines import bustard
 from htsworkflow.pipelines import gerald
 from htsworkflow.pipelines import runfolder
 from htsworkflow.pipelines import ipar
 from htsworkflow.pipelines import bustard
 from htsworkflow.pipelines import gerald
 from htsworkflow.pipelines import runfolder
-from htsworkflow.pipelines.runfolder import ElementTree
+from htsworkflow.pipelines import ElementTree
 
 from htsworkflow.pipelines.test.simulate_runfolder import *
 
 
 from htsworkflow.pipelines.test.simulate_runfolder import *
 
@@ -42,7 +43,9 @@ def make_runfolder(obj=None):
     os.mkdir(gerald_dir)
     make_gerald_config_100(gerald_dir)
     make_summary_ipar130_htm(gerald_dir)
     os.mkdir(gerald_dir)
     make_gerald_config_100(gerald_dir)
     make_summary_ipar130_htm(gerald_dir)
-    make_eland_multi(gerald_dir)
+    make_eland_multi(gerald_dir, lane_list=[1,2,3,4,5,6,])
+    make_scarf(gerald_dir, lane_list=[7,])
+    make_fastq(gerald_dir, lane_list=[8,])
 
     if obj is not None:
         obj.temp_dir = temp_dir
 
     if obj is not None:
         obj.temp_dir = temp_dir
@@ -53,7 +56,7 @@ def make_runfolder(obj=None):
         obj.gerald_dir = gerald_dir
 
 
         obj.gerald_dir = gerald_dir
 
 
-class RunfolderTests(unittest.TestCase):
+class RunfolderTests(TestCase):
     """
     Test components of the runfolder processing code
     which includes firecrest, bustard, and gerald
     """
     Test components of the runfolder processing code
     which includes firecrest, bustard, and gerald
@@ -70,6 +73,7 @@ class RunfolderTests(unittest.TestCase):
         Construct a firecrest object
         """
         i = ipar.ipar(self.image_analysis_dir)
         Construct a firecrest object
         """
         i = ipar.ipar(self.image_analysis_dir)
+        self.failUnlessEqual(i.software, 'IPAR')
         self.failUnlessEqual(i.version, '2.01.192.0')
         self.failUnlessEqual(i.start, 1)
         self.failUnlessEqual(i.stop, 37)
         self.failUnlessEqual(i.version, '2.01.192.0')
         self.failUnlessEqual(i.start, 1)
         self.failUnlessEqual(i.stop, 37)
@@ -79,6 +83,7 @@ class RunfolderTests(unittest.TestCase):
         xml_str = ElementTree.tostring(xml)
 
         i2 = ipar.IPAR(xml=xml)
         xml_str = ElementTree.tostring(xml)
 
         i2 = ipar.IPAR(xml=xml)
+        self.failUnlessEqual(i.software, i2.software)
         self.failUnlessEqual(i.version, i2.version)
         self.failUnlessEqual(i.start,   i2.start)
         self.failUnlessEqual(i.stop,    i2.stop)
         self.failUnlessEqual(i.version, i2.version)
         self.failUnlessEqual(i.start,   i2.start)
         self.failUnlessEqual(i.stop,    i2.stop)
@@ -111,6 +116,7 @@ class RunfolderTests(unittest.TestCase):
             self.failUnlessAlmostEqual(crosstalk.base['G'][3], -0.02)
 
         b = bustard.bustard(self.bustard_dir)
             self.failUnlessAlmostEqual(crosstalk.base['G'][3], -0.02)
 
         b = bustard.bustard(self.bustard_dir)
+        self.failUnlessEqual(b.software, 'Bustard')
         self.failUnlessEqual(b.version, '1.3.2')
         self.failUnlessEqual(b.date,    date(2008,3,15))
         self.failUnlessEqual(b.user,    'diane')
         self.failUnlessEqual(b.version, '1.3.2')
         self.failUnlessEqual(b.date,    date(2008,3,15))
         self.failUnlessEqual(b.user,    'diane')
@@ -120,8 +126,8 @@ class RunfolderTests(unittest.TestCase):
         check_crosstalk(b.crosstalk)
 
         xml = b.get_elements()
         check_crosstalk(b.crosstalk)
 
         xml = b.get_elements()
-        print ElementTree.dump(xml)
         b2 = bustard.Bustard(xml=xml)
         b2 = bustard.Bustard(xml=xml)
+        self.failUnlessEqual(b.software, b2.software)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
         self.failUnlessEqual(b.version, b2.version)
         self.failUnlessEqual(b.date,    b2.date )
         self.failUnlessEqual(b.user,    b2.user)
@@ -139,8 +145,8 @@ class RunfolderTests(unittest.TestCase):
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
         # need to update gerald and make tests for it
         g = gerald.gerald(self.gerald_dir)
 
-        self.failUnlessEqual(g.version,
-            '@(#) Id: GERALD.pl,v 1.171 2008/05/19 17:36:14 mzerara Exp')
+        self.failUnlessEqual(g.software, 'GERALD')
+        self.failUnlessEqual(g.version, '1.171')
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
         self.failUnlessEqual(g.date, datetime(2009,2,22,21,15,59))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.keys()))
         self.failUnlessEqual(len(g.lanes), len(g.lanes.items()))
@@ -150,14 +156,14 @@ class RunfolderTests(unittest.TestCase):
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
         # make_gerald_config.
         # the first None is to offset the genomes list to be 1..9
         # instead of pythons default 0..8
-        genomes = [None, 
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/elegans190', 
+        genomes = [None,
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/elegans190',
                    '/g/arabidopsis01222004',
                    '/g/arabidopsis01222004',
-                   '/g/mm9', 
-                   '/g/mm9', 
-                   '/g/mm9', 
+                   '/g/mm9',
+                   '/g/mm9',
+                   '/g/mm9',
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
                    '/g/mm9', ]
 
         # test lane specific parameters from gerald config file
@@ -193,6 +199,7 @@ class RunfolderTests(unittest.TestCase):
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
         g2 = gerald.Gerald(xml=xml)
 
         # do it all again after extracting from the xml file
+        self.failUnlessEqual(g.software, g2.software)
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
         self.failUnlessEqual(g.version, g2.version)
         self.failUnlessEqual(g.date, g2.date)
         self.failUnlessEqual(len(g.lanes.keys()), len(g2.lanes.keys()))
@@ -217,22 +224,23 @@ class RunfolderTests(unittest.TestCase):
 
             g_eland = g.eland_results
             g2_eland = g2.eland_results
 
             g_eland = g.eland_results
             g2_eland = g2.eland_results
-            for lane in g_eland.results[0].keys():
-                g_results = g_eland.results[0][lane]
-                g2_results = g2_eland.results[0][lane]
+            for key in g_eland:
+                g_results = g_eland[key]
+                g2_results = g2_eland[key]
                 self.failUnlessEqual(g_results.reads,
                                      g2_results.reads)
                 self.failUnlessEqual(g_results.reads,
                                      g2_results.reads)
-                self.failUnlessEqual(len(g_results.mapped_reads),
-                                     len(g2_results.mapped_reads))
-                for k in g_results.mapped_reads.keys():
-                    self.failUnlessEqual(g_results.mapped_reads[k],
-                                         g2_results.mapped_reads[k])
+                if isinstance(g_results, eland.ElandLane):
+                  self.failUnlessEqual(len(g_results.mapped_reads),
+                                       len(g2_results.mapped_reads))
+                  for k in g_results.mapped_reads.keys():
+                      self.failUnlessEqual(g_results.mapped_reads[k],
+                                           g2_results.mapped_reads[k])
 
 
-                self.failUnlessEqual(len(g_results.match_codes),
-                                     len(g2_results.match_codes))
-                for k in g_results.match_codes.keys():
-                    self.failUnlessEqual(g_results.match_codes[k],
-                                         g2_results.match_codes[k])
+                  self.failUnlessEqual(len(g_results.match_codes),
+                                       len(g2_results.match_codes))
+                  for k in g_results.match_codes.keys():
+                      self.failUnlessEqual(g_results.match_codes[k],
+                                           g2_results.match_codes[k])
 
 
     def test_eland(self):
 
 
     def test_eland(self):
@@ -244,46 +252,63 @@ class RunfolderTests(unittest.TestCase):
 
         genome_maps = { 1:hg_map, 2:hg_map, 3:hg_map, 4:hg_map,
                         5:hg_map, 6:hg_map, 7:hg_map, 8:hg_map }
 
         genome_maps = { 1:hg_map, 2:hg_map, 3:hg_map, 4:hg_map,
                         5:hg_map, 6:hg_map, 7:hg_map, 8:hg_map }
-        eland = gerald.eland(self.gerald_dir, genome_maps=genome_maps)
-
-        for i in range(1,9):
-            lane = eland.results[0][i]
-            self.failUnlessEqual(lane.reads, 6)
-            self.failUnlessEqual(lane.sample_name, "s")
-            self.failUnlessEqual(lane.lane_id, i)
-            self.failUnlessEqual(len(lane.mapped_reads), 17)
-            self.failUnlessEqual(lane.mapped_reads['hg18/chr5.fa'], 4)
-            self.failUnlessEqual(lane.match_codes['U0'], 3)
-            self.failUnlessEqual(lane.match_codes['R0'], 2)
-            self.failUnlessEqual(lane.match_codes['U1'], 1)
-            self.failUnlessEqual(lane.match_codes['R1'], 9)
-            self.failUnlessEqual(lane.match_codes['U2'], 0)
-            self.failUnlessEqual(lane.match_codes['R2'], 12)
-            self.failUnlessEqual(lane.match_codes['NM'], 1)
-            self.failUnlessEqual(lane.match_codes['QC'], 0)
-
-        xml = eland.get_elements()
+        eland_container = gerald.eland(self.gerald_dir, genome_maps=genome_maps)
+
+        # I added sequence lanes to the last 2 lanes of this test case
+        for key in eland_container:
+            lane = eland_container[key]
+            if key.lane in [1,2,3,4,5,6]:
+                self.failUnlessEqual(lane.reads, 6)
+                self.failUnlessEqual(lane.sample_name, "s")
+                self.failUnlessEqual(lane.lane_id, key.lane)
+                self.failUnlessEqual(len(lane.mapped_reads), 17)
+                self.failUnlessEqual(lane.mapped_reads['hg18/chr5.fa'], 4)
+                self.failUnlessEqual(lane.match_codes['U0'], 3)
+                self.failUnlessEqual(lane.match_codes['R0'], 2)
+                self.failUnlessEqual(lane.match_codes['U1'], 1)
+                self.failUnlessEqual(lane.match_codes['R1'], 9)
+                self.failUnlessEqual(lane.match_codes['U2'], 0)
+                self.failUnlessEqual(lane.match_codes['R2'], 12)
+                self.failUnlessEqual(lane.match_codes['NM'], 1)
+                self.failUnlessEqual(lane.match_codes['QC'], 0)
+            elif key.lane == 7:
+                self.failUnlessEqual(lane.reads, 5)
+                self.failUnlessEqual(lane.sample_name, 's')
+                self.failUnlessEqual(lane.lane_id, 7)
+                self.failUnlessEqual(lane.sequence_type,
+                                     eland.SequenceLane.SCARF_TYPE)
+            elif key.lane == 8:
+                self.failUnlessEqual(lane.reads, 3)
+                self.failUnlessEqual(lane.sample_name, 's')
+                self.failUnlessEqual(lane.lane_id, 8)
+                self.failUnlessEqual(lane.sequence_type,
+                                     eland.SequenceLane.FASTQ_TYPE)
+
+        xml = eland_container.get_elements()
         # just make sure that element tree can serialize the tree
         xml_str = ElementTree.tostring(xml)
         e2 = gerald.ELAND(xml=xml)
 
         # just make sure that element tree can serialize the tree
         xml_str = ElementTree.tostring(xml)
         e2 = gerald.ELAND(xml=xml)
 
-        for i in range(1,9):
-            l1 = eland.results[0][i]
-            l2 = e2.results[0][i]
+        for key in eland_container:
+            l1 = eland_container[key]
+            l2 = e2[key]
             self.failUnlessEqual(l1.reads, l2.reads)
             self.failUnlessEqual(l1.sample_name, l2.sample_name)
             self.failUnlessEqual(l1.lane_id, l2.lane_id)
             self.failUnlessEqual(l1.reads, l2.reads)
             self.failUnlessEqual(l1.sample_name, l2.sample_name)
             self.failUnlessEqual(l1.lane_id, l2.lane_id)
-            self.failUnlessEqual(len(l1.mapped_reads), len(l2.mapped_reads))
-            self.failUnlessEqual(len(l1.mapped_reads), 17)
-            for k in l1.mapped_reads.keys():
-                self.failUnlessEqual(l1.mapped_reads[k],
-                                     l2.mapped_reads[k])
-
-            self.failUnlessEqual(len(l1.match_codes), 9)
-            self.failUnlessEqual(len(l1.match_codes), len(l2.match_codes))
-            for k in l1.match_codes.keys():
-                self.failUnlessEqual(l1.match_codes[k],
-                                     l2.match_codes[k])
+            if isinstance(l1, eland.ElandLane):
+              self.failUnlessEqual(len(l1.mapped_reads), len(l2.mapped_reads))
+              self.failUnlessEqual(len(l1.mapped_reads), 17)
+              for k in l1.mapped_reads.keys():
+                  self.failUnlessEqual(l1.mapped_reads[k],
+                                       l2.mapped_reads[k])
+
+              self.failUnlessEqual(len(l1.match_codes), 9)
+              self.failUnlessEqual(len(l1.match_codes), len(l2.match_codes))
+              for k in l1.match_codes.keys():
+                  self.failUnlessEqual(l1.match_codes[k],
+                                       l2.match_codes[k])
+            elif isinstance(l1, eland.SequenceLane):
+                self.failUnlessEqual(l1.sequence_type, l2.sequence_type)
 
     def test_runfolder(self):
         runs = runfolder.get_runs(self.runfolder_dir)
 
     def test_runfolder(self):
         runs = runfolder.get_runs(self.runfolder_dir)
@@ -291,29 +316,33 @@ class RunfolderTests(unittest.TestCase):
         # do we get the flowcell id from the filename?
         self.failUnlessEqual(len(runs), 1)
         name = 'run_3021JAAXX_%s.xml' % ( date.today().strftime('%Y-%m-%d'),)
         # do we get the flowcell id from the filename?
         self.failUnlessEqual(len(runs), 1)
         name = 'run_3021JAAXX_%s.xml' % ( date.today().strftime('%Y-%m-%d'),)
-        self.failUnlessEqual(runs[0].name, name)
+        self.failUnlessEqual(runs[0].serialization_filename, name)
 
         # do we get the flowcell id from the FlowcellId.xml file
         make_flowcell_id(self.runfolder_dir, '207BTAAXY')
         runs = runfolder.get_runs(self.runfolder_dir)
         self.failUnlessEqual(len(runs), 1)
         name = 'run_207BTAAXY_%s.xml' % ( date.today().strftime('%Y-%m-%d'),)
 
         # do we get the flowcell id from the FlowcellId.xml file
         make_flowcell_id(self.runfolder_dir, '207BTAAXY')
         runs = runfolder.get_runs(self.runfolder_dir)
         self.failUnlessEqual(len(runs), 1)
         name = 'run_207BTAAXY_%s.xml' % ( date.today().strftime('%Y-%m-%d'),)
-        self.failUnlessEqual(runs[0].name, name)
+        self.failUnlessEqual(runs[0].serialization_filename, name)
 
         r1 = runs[0]
         xml = r1.get_elements()
         xml_str = ElementTree.tostring(xml)
 
         r2 = runfolder.PipelineRun(xml=xml)
 
         r1 = runs[0]
         xml = r1.get_elements()
         xml_str = ElementTree.tostring(xml)
 
         r2 = runfolder.PipelineRun(xml=xml)
-        self.failUnlessEqual(r1.name, r2.name)
+        self.failUnlessEqual(r1.serialization_filename, r2.serialization_filename)
         self.failIfEqual(r2.image_analysis, None)
         self.failIfEqual(r2.bustard, None)
         self.failIfEqual(r2.gerald, None)
 
 
 def suite():
         self.failIfEqual(r2.image_analysis, None)
         self.failIfEqual(r2.bustard, None)
         self.failIfEqual(r2.gerald, None)
 
 
 def suite():
-    return unittest.makeSuite(RunfolderTests,'test')
+    from unittest import TestSuite, defaultTestLoader
+    suite = TestSuite()
+    suite.addTests(defaultTestLoader.loadTestsFromTestCase(RunfolderTests))
+    return suite
 
 
-if __name__ == "__main__":
-    unittest.main(defaultTest="suite")
 
 
+if __name__ == "__main__":
+    from unittest import main
+    main(defaultTest="suite")