changeset 282:d40571459b37

Add test for PalyerWorker
author Amine Sehili <amine.sehili@gmail.com>
date Mon, 30 Sep 2019 21:33:16 +0100
parents 28b373616977
children 231fa912b809
files tests/test_workers.py
diffstat 1 files changed, 48 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test_workers.py	Mon Sep 30 21:09:24 2019 +0100
+++ b/tests/test_workers.py	Mon Sep 30 21:33:16 2019 +0100
@@ -1,6 +1,6 @@
 import os
 from unittest import TestCase
-from unittest.mock import patch, call
+from unittest.mock import patch, call, Mock
 from tempfile import TemporaryDirectory
 from genty import genty, genty_dataset
 from auditok import AudioDataSource
@@ -38,7 +38,6 @@
         self.reader.close()
 
     def test_TokenizerWorker(self):
-
         with TemporaryDirectory() as tmpdir:
             file = os.path.join(tmpdir, "file.log")
             logger = make_logger(file=file, name="test_TokenizerWorker")
@@ -71,6 +70,47 @@
             # remove timestamp part and strip new line
             self.assertEqual(log_line[28:].strip(), exp_log_line)
 
+    def test_PlayerWorker(self):
+        with TemporaryDirectory() as tmpdir:
+            file = os.path.join(tmpdir, "file.log")
+            logger = make_logger(file=file, name="test_RegionSaverWorker")
+            player_mock = Mock()
+            observers = [PlayerWorker(player_mock, logger=logger)]
+            tokenizer = TokenizerWorker(
+                self.reader,
+                logger=logger,
+                observers=observers,
+                min_dur=0.3,
+                max_dur=2,
+                max_silence=0.2,
+                drop_trailing_silence=False,
+                strict_min_dur=False,
+                eth=50,
+            )
+            tokenizer.start_all()
+            tokenizer.join()
+            tokenizer._observers[0].join()
+            # Get logged text
+            with open(file) as fp:
+                log_lines = [
+                    line
+                    for line in fp.readlines()
+                    if line.startswith("[PLAY]")
+                ]
+        self.assertTrue(player_mock.play.called)
+
+        self.assertEqual(len(tokenizer.detections), len(self.expected))
+        log_fmt = "[PLAY]: Detection {id} played"
+        for i, (det, exp, log_line) in enumerate(
+            zip(tokenizer.detections, self.expected, log_lines), 1
+        ):
+            start, end = exp
+            exp_log_line = log_fmt.format(id=i)
+            self.assertAlmostEqual(det.start, start)
+            self.assertAlmostEqual(det.end, end)
+            # Remove timestamp part and strip new line
+            self.assertEqual(log_line[28:].strip(), exp_log_line)
+
     def test_RegionSaverWorker(self):
         filename_format = (
             "Region_{id}_{start:.6f}-{end:.3f}_{duration:.3f}.wav"
@@ -102,7 +142,7 @@
                     if line.startswith("[SAVE]")
                 ]
 
-        # Asser PrintWorker ran as expected
+        # Assert RegionSaverWorker ran as expected
         expected_save_calls = [
             call(
                 filename_format.format(
@@ -113,7 +153,7 @@
             for i, exp in enumerate(self.expected, 1)
         ]
 
-        # get calls to 'AudioRegion.save'
+        # Get calls to 'AudioRegion.save'
         mock_calls = [
             c for i, c in enumerate(patched_save.mock_calls) if i % 2 == 0
         ]
@@ -131,7 +171,7 @@
             exp_log_line = log_fmt.format(i, expected_filename)
             self.assertAlmostEqual(det.start, start)
             self.assertAlmostEqual(det.end, end)
-            # remove timestamp part and strip new line
+            # Remove timestamp part and strip new line
             self.assertEqual(log_line[28:].strip(), exp_log_line)
 
     def test_CommandLineWorker(self):
@@ -163,11 +203,10 @@
                     if line.startswith("[COMMAND]")
                 ]
 
-        # Asser PrintWorker ran as expected
+        # Assert CommandLineWorker ran as expected
         expected_save_calls = [call(command_format) for _ in self.expected]
         self.assertEqual(patched_os_system.mock_calls, expected_save_calls)
         self.assertEqual(len(tokenizer.detections), len(self.expected))
-
         log_fmt = "[COMMAND]: Detection {id} command '{command}'"
         for i, (det, exp, log_line) in enumerate(
             zip(tokenizer.detections, self.expected, log_lines), 1
@@ -176,7 +215,7 @@
             exp_log_line = log_fmt.format(i, command_format)
             self.assertAlmostEqual(det.start, start)
             self.assertAlmostEqual(det.end, end)
-            # remove timestamp part and strip new line
+            # Remove timestamp part and strip new line
             self.assertEqual(log_line[28:].strip(), exp_log_line)
 
     def test_PrintWorker(self):
@@ -198,7 +237,7 @@
             tokenizer.join()
             tokenizer._observers[0].join()
 
-        # Asser PrintWorker ran as expected
+        # Assert PrintWorker ran as expected
         expected_print_calls = [
             call(
                 "[{}] {:.3f} {:.3f}, dur: {:.3f}".format(
@@ -209,7 +248,6 @@
         ]
         self.assertEqual(patched_print.mock_calls, expected_print_calls)
         self.assertEqual(len(tokenizer.detections), len(self.expected))
-
         for det, exp in zip(tokenizer.detections, self.expected):
             start, end = exp
             self.assertAlmostEqual(det.start, start)