changeset 124:efd8f4606cf4

Add tests for from_file with compressed audio data
author Amine Sehili <amine.sehili@gmail.com>
date Sun, 03 Feb 2019 16:04:24 +0100
parents 34435df8cf02
children aa0e5535f724
files tests/test_io.py
diffstat 1 files changed, 53 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/tests/test_io.py	Sun Feb 03 14:51:52 2019 +0100
+++ b/tests/test_io.py	Sun Feb 03 16:04:24 2019 +0100
@@ -22,10 +22,10 @@
 
 if sys.version_info >= (3, 0):
     PYTHON_3 = True
-    from unittest.mock import patch
+    from unittest.mock import patch, Mock
 else:
     PYTHON_3 = False
-    from mock import patch
+    from mock import patch, Mock
 
 AUDIO_PARAMS_SHORT = {"sr": 16000, "sw": 2, "ch": 1}
 
@@ -280,6 +280,57 @@
         mixed = audio_source._buffer
         self.assertEqual((mixed), expected)
 
+    @patch("auditok.io._WITH_PYDUB", True)
+    @patch("auditok.io.BufferAudioSource")
+    @genty_dataset(
+        ogg_first_channel=("ogg", 0, "from_ogg"),
+        ogg_second_channel=("ogg", 1, "from_ogg"),
+        ogg_mix=("ogg", "mix", "from_ogg"),
+        ogg_default=("ogg", None, "from_ogg"),
+        mp3_left_channel=("mp3", "left", "from_mp3"),
+        mp3_right_channel=("mp3", "right", "from_mp3"),
+        flac_first_channel=("flac", 0, "from_file"),
+        flac_second_channel=("flac", 1, "from_file"),
+        flv_left_channel=("flv", "left", "from_flv"),
+        webm_right_channel=("webm", "right", "from_file"),
+    )
+    def test_from_file_multichannel_audio_compressed(
+        self, audio_format, use_channel, function, *mocks
+    ):
+        filename = "audio.{}".format(audio_format)
+        segment_mock = Mock()
+        segment_mock.sample_width = 2
+        segment_mock.channels = 2
+        segment_mock._data = b"abcd"
+        with patch("auditok.io._extract_selected_channel") as ext_mock:
+            with patch(
+                "auditok.io.AudioSegment.{}".format(function)
+            ) as open_func:
+                open_func.return_value = segment_mock
+                from_file(filename, use_channel=use_channel)
+                self.assertTrue(open_func.called)
+                self.assertTrue(ext_mock.called)
+
+                use_channel = {"left": 0, "right": 1, None: 0}.get(
+                    use_channel, use_channel
+                )
+                ext_mock.assert_called_with(
+                    segment_mock._data,
+                    segment_mock.channels,
+                    segment_mock.sample_width,
+                    use_channel,
+                )
+
+        with patch("auditok.io._extract_selected_channel") as ext_mock:
+            with patch(
+                "auditok.io.AudioSegment.{}".format(function)
+            ) as open_func:
+                segment_mock.channels = 1
+                open_func.return_value = segment_mock
+                from_file(filename, use_channel=use_channel)
+                self.assertTrue(open_func.called)
+                self.assertFalse(ext_mock.called)
+
     @genty_dataset(
         mono=("mono_400Hz.wav", (400,)),
         three_channel=("3channel_400-800-1600Hz.wav", (400, 800, 1600)),