From 608ac19b4933fed5f8e5a96ffb91fedae6743ba1 Mon Sep 17 00:00:00 2001
From: Stefan Reck <stefan.reck@fau.de>
Date: Fri, 16 Apr 2021 14:59:17 +0200
Subject: [PATCH] add tests

---
 ...neturino_mc.toml => orcasong_example.toml} |  5 ++-
 orcasong/from_toml.py                         | 15 ++++----
 tests/test_from_toml.py                       | 36 +++++++++++++++++++
 3 files changed, 48 insertions(+), 8 deletions(-)
 rename examples/{orcasong_neturino_mc.toml => orcasong_example.toml} (62%)
 create mode 100644 tests/test_from_toml.py

diff --git a/examples/orcasong_neturino_mc.toml b/examples/orcasong_example.toml
similarity index 62%
rename from examples/orcasong_neturino_mc.toml
rename to examples/orcasong_example.toml
index 4f54ca0..5ab2719 100644
--- a/examples/orcasong_neturino_mc.toml
+++ b/examples/orcasong_example.toml
@@ -1,8 +1,11 @@
 # the mode to run orcasong in; either 'graph' or 'image'
 mode="graph"
-# arguments for running orcasong (see FileGraph or FileBinner in orcasong.core).
+# arguments for FileGraph or FileBinner (see orcasong.core)
 max_n_hits = 2000
 time_window = [-100, 5000]
+# can also give the arguments of orcasong.core.BaseProcessor,
+# which are shared between modes
+chunksize=16
 # built-in extractor function to use
 extractor = "neutrino_mc"
 
diff --git a/orcasong/from_toml.py b/orcasong/from_toml.py
index 9958fd1..09e0a8e 100644
--- a/orcasong/from_toml.py
+++ b/orcasong/from_toml.py
@@ -1,4 +1,3 @@
-import os
 import toml
 import orcasong.core
 import orcasong.extractors as extractors
@@ -31,15 +30,17 @@ def add_parser_run(subparsers):
 
 
 def run_orcasong(infile, toml_file, detx_file=None, outfile=None):
-    if outfile is None:
-        outfile = f"{os.path.splitext(os.path.basename(infile))[0]}_dl.h5"
+    setup_processor(infile, toml_file, detx_file).run(
+        infile=infile, outfile=outfile)
 
+
+def setup_processor(infile, toml_file, detx_file=None):
     cfg = toml.load(toml_file)
-    processor = _get_verbose(cfg["mode"], MODES)
+    processor = _get_verbose(cfg.pop("mode"), MODES)
 
     if "detx_file" in cfg:
         if detx_file is not None:
-            raise ValueError("detx_file passed to function AND defined in toml")
+            raise ValueError("detx_file passed to run AND defined in toml")
         detx_file = cfg.pop("detx_file")
 
     if "extractor" in cfg:
@@ -48,11 +49,11 @@ def run_orcasong(infile, toml_file, detx_file=None, outfile=None):
     else:
         extractor = None
 
-    processor(
+    return processor(
         det_file=detx_file,
         extractor=extractor,
         **cfg,
-    ).run(infile=infile, outfile=outfile)
+    )
 
 
 def _get_verbose(key, d):
diff --git a/tests/test_from_toml.py b/tests/test_from_toml.py
new file mode 100644
index 0000000..5ee6fb6
--- /dev/null
+++ b/tests/test_from_toml.py
@@ -0,0 +1,36 @@
+from unittest import TestCase
+import os
+import orcasong
+import orcasong.from_toml as from_toml
+
+EXAMPLES = os.path.join(
+    os.path.dirname(os.path.dirname(orcasong.__file__)), "examples"
+)
+
+
+def test_extr(infile):
+    return infile + "_extr"
+
+
+orcasong.from_toml.EXTRACTORS["neutrino_mc"] = test_extr
+
+
+class TestSetupProcessorExampleConfig(TestCase):
+    def setUp(self):
+        self.processor = from_toml.setup_processor(
+            infile="test_in",
+            toml_file=os.path.join(EXAMPLES, "orcasong_example.toml"),
+            detx_file="test_det",
+        )
+
+    def test_time_window(self):
+        self.assertEqual(self.processor.time_window, [-100, 5000])
+
+    def test_max_n_hits(self):
+        self.assertEqual(self.processor.max_n_hits, 2000)
+
+    def test_chunksize(self):
+        self.assertEqual(self.processor.chunksize, 16)
+
+    def test_extractor_is_dummy_extractor(self):
+        self.assertEqual(self.processor.extractor, "test_in_extr")
-- 
GitLab