changeset 271:dbb12345a19f

Add tests for initialize_workers
author Amine Sehili <amine.sehili@gmail.com>
date Sun, 15 Sep 2019 18:13:07 +0100
parents 2b981910b1cd
children eb77a08a608a
files auditok/workers.py tests/test_cmdline_util.py
diffstat 2 files changed, 154 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/auditok/workers.py	Sun Sep 15 17:07:27 2019 +0100
+++ b/auditok/workers.py	Sun Sep 15 18:13:07 2019 +0100
@@ -409,6 +409,12 @@
             self._log(message)
 
 
+class CommandLineWorker(Worker):
+    def __init__(self, command, timeout=0.2, logger=None):
+        self._command = command
+        Worker.__init__(self, timeout=timeout, logger=logger)
+
+
 class PrintWorker(Worker):
     def __init__(
         self,
--- a/tests/test_cmdline_util.py	Sun Sep 15 17:07:27 2019 +0100
+++ b/tests/test_cmdline_util.py	Sun Sep 15 18:13:07 2019 +0100
@@ -1,5 +1,6 @@
 import os
 from unittest import TestCase
+from unittest.mock import patch
 from tempfile import TemporaryDirectory
 from collections import namedtuple
 from genty import genty, genty_dataset
@@ -12,7 +13,13 @@
     initialize_workers,
     KeywordArguments,
 )
-from auditok.workers import StreamSaverWorker
+from auditok.workers import (
+    StreamSaverWorker,
+    RegionSaverWorker,
+    PlayerWorker,
+    CommandLineWorker,
+    PrintWorker,
+)
 from auditok.exceptions import TimeFormatError
 
 _ArgsNamespece = namedtuple(
@@ -186,4 +193,143 @@
     def test_make_logger_None(self):
         logger = make_logger(debug_stdout=False, debug_file=None)
         self.assertIsNone(logger)
-        del logger
+
+    def test_initialize_workers_all(self):
+        with patch("auditok.cmdline_util.player_for") as patched_player_for:
+            reader, observers = initialize_workers(
+                input="tests/data/test_16KHZ_mono_400Hz.wav",
+                save_stream="output.wav",
+                export_format="wave",
+                save_detections_as="{id}.wav",
+                echo=True,
+                progress_bar=False,
+                command="some command",
+                quiet=False,
+                printf="abcd",
+                time_format="%S",
+                timestamp_format="%h:%M:%S",
+            )
+            reader.stop()
+            self.assertTrue(patched_player_for.called)
+            self.assertIsInstance(reader, StreamSaverWorker)
+            for obs, cls in zip(
+                observers,
+                [
+                    RegionSaverWorker,
+                    PlayerWorker,
+                    CommandLineWorker,
+                    PrintWorker,
+                ],
+            ):
+                self.assertIsInstance(obs, cls)
+
+    def test_initialize_workers_no_RegionSaverWorker(self):
+        with patch("auditok.cmdline_util.player_for") as patched_player_for:
+            reader, observers = initialize_workers(
+                input="tests/data/test_16KHZ_mono_400Hz.wav",
+                save_stream="output.wav",
+                export_format="wave",
+                save_detections_as=None,
+                echo=True,
+                progress_bar=False,
+                command="some command",
+                quiet=False,
+                printf="abcd",
+                time_format="%S",
+                timestamp_format="%h:%M:%S",
+            )
+            reader.stop()
+            self.assertTrue(patched_player_for.called)
+            self.assertIsInstance(reader, StreamSaverWorker)
+            for obs, cls in zip(
+                observers, [PlayerWorker, CommandLineWorker, PrintWorker]
+            ):
+                self.assertIsInstance(obs, cls)
+
+    def test_initialize_workers_no_PlayerWorker(self):
+        with patch("auditok.cmdline_util.player_for") as patched_player_for:
+            reader, observers = initialize_workers(
+                input="tests/data/test_16KHZ_mono_400Hz.wav",
+                save_stream="output.wav",
+                export_format="wave",
+                save_detections_as="{id}.wav",
+                echo=False,
+                progress_bar=False,
+                command="some command",
+                quiet=False,
+                printf="abcd",
+                time_format="%S",
+                timestamp_format="%h:%M:%S",
+            )
+            reader.stop()
+            self.assertFalse(patched_player_for.called)
+            self.assertIsInstance(reader, StreamSaverWorker)
+            for obs, cls in zip(
+                observers, [RegionSaverWorker, CommandLineWorker, PrintWorker]
+            ):
+                self.assertIsInstance(obs, cls)
+
+    def test_initialize_workers_no_CommandLineWorker(self):
+        with patch("auditok.cmdline_util.player_for") as patched_player_for:
+            reader, observers = initialize_workers(
+                input="tests/data/test_16KHZ_mono_400Hz.wav",
+                save_stream="output.wav",
+                export_format="wave",
+                save_detections_as="{id}.wav",
+                echo=True,
+                progress_bar=False,
+                command=None,
+                quiet=False,
+                printf="abcd",
+                time_format="%S",
+                timestamp_format="%h:%M:%S",
+            )
+            reader.stop()
+            self.assertTrue(patched_player_for.called)
+            self.assertIsInstance(reader, StreamSaverWorker)
+            for obs, cls in zip(
+                observers, [RegionSaverWorker, PlayerWorker, PrintWorker]
+            ):
+                self.assertIsInstance(obs, cls)
+
+    def test_initialize_workers_no_PrintWorker(self):
+        with patch("auditok.cmdline_util.player_for") as patched_player_for:
+            reader, observers = initialize_workers(
+                input="tests/data/test_16KHZ_mono_400Hz.wav",
+                save_stream="output.wav",
+                export_format="wave",
+                save_detections_as="{id}.wav",
+                echo=True,
+                progress_bar=False,
+                command="some command",
+                quiet=True,
+                printf="abcd",
+                time_format="%S",
+                timestamp_format="%h:%M:%S",
+            )
+            reader.stop()
+            self.assertTrue(patched_player_for.called)
+            self.assertIsInstance(reader, StreamSaverWorker)
+            for obs, cls in zip(
+                observers, [RegionSaverWorker, PlayerWorker, CommandLineWorker]
+            ):
+                self.assertIsInstance(obs, cls)
+
+    def test_initialize_workers_no_observers(self):
+        with patch("auditok.cmdline_util.player_for") as patched_player_for:
+            reader, observers = initialize_workers(
+                input="tests/data/test_16KHZ_mono_400Hz.wav",
+                save_stream=None,
+                export_format="wave",
+                save_detections_as=None,
+                echo=True,
+                progress_bar=False,
+                command=None,
+                quiet=True,
+                printf="abcd",
+                time_format="%S",
+                timestamp_format="%h:%M:%S",
+            )
+            self.assertTrue(patched_player_for.called)
+            self.assertFalse(isinstance(reader, StreamSaverWorker))
+            self.assertTrue(len(observers), 0)