annotate tests/test_cmdline_util.py @ 269:549a2b63de9f

Add tests for make_logger
author Amine Sehili <amine.sehili@gmail.com>
date Sat, 14 Sep 2019 15:52:47 +0200
parents deb05a16eef5
children dbb12345a19f
rev   line source
amine@269 1 import os
amine@267 2 from unittest import TestCase
amine@269 3 from tempfile import TemporaryDirectory
amine@267 4 from collections import namedtuple
amine@267 5 from genty import genty, genty_dataset
amine@267 6
amine@267 7 from auditok.cmdline_util import (
amine@267 8 LOGGER_NAME,
amine@267 9 make_kwargs,
amine@267 10 make_duration_fromatter,
amine@267 11 make_logger,
amine@267 12 initialize_workers,
amine@267 13 KeywordArguments,
amine@267 14 )
amine@267 15 from auditok.workers import StreamSaverWorker
amine@267 16 from auditok.exceptions import TimeFormatError
amine@267 17
amine@267 18 _ArgsNamespece = namedtuple(
amine@267 19 "_ArgsNamespece",
amine@267 20 [
amine@267 21 "input",
amine@267 22 "max_time",
amine@267 23 "analysis_window",
amine@267 24 "sampling_rate",
amine@267 25 "sample_width",
amine@267 26 "channels",
amine@267 27 "use_channel",
amine@267 28 "input_format",
amine@267 29 "output_format",
amine@267 30 "large_file",
amine@267 31 "frame_per_buffer",
amine@267 32 "input_device_index",
amine@267 33 "save_stream",
amine@267 34 "plot",
amine@267 35 "save_image",
amine@267 36 "min_duration",
amine@267 37 "max_duration",
amine@267 38 "max_silence",
amine@267 39 "drop_trailing_silence",
amine@267 40 "strict_min_duration",
amine@267 41 "energy_threshold",
amine@267 42 "echo",
amine@267 43 "command",
amine@267 44 "quiet",
amine@267 45 "printf",
amine@267 46 "time_format",
amine@267 47 "timestamp_format",
amine@267 48 ],
amine@267 49 )
amine@267 50
amine@267 51
amine@267 52 @genty
amine@268 53 class _TestCmdLineUtil(TestCase):
amine@267 54 @genty_dataset(
amine@267 55 no_record=("stream.ogg", False, None, "mix", "mix", False),
amine@267 56 no_record_plot=("stream.ogg", True, None, None, None, False),
amine@267 57 no_record_save_image=(
amine@267 58 "stream.ogg",
amine@267 59 True,
amine@267 60 "image.png",
amine@267 61 None,
amine@267 62 None,
amine@267 63 False,
amine@267 64 ),
amine@267 65 record_plot=(None, True, None, None, None, True),
amine@267 66 record_save_image=(None, False, "image.png", None, None, True),
amine@267 67 int_use_channel=("stream.ogg", False, None, "1", 1, False),
amine@267 68 )
amine@267 69 def test_make_kwargs(
amine@267 70 self,
amine@267 71 save_stream,
amine@267 72 plot,
amine@267 73 save_image,
amine@267 74 use_channel,
amine@267 75 exp_use_channel,
amine@267 76 exp_record,
amine@267 77 ):
amine@267 78
amine@267 79 args = (
amine@267 80 "file",
amine@267 81 30,
amine@267 82 0.01,
amine@267 83 16000,
amine@267 84 2,
amine@267 85 2,
amine@267 86 use_channel,
amine@267 87 "raw",
amine@267 88 "ogg",
amine@267 89 True,
amine@267 90 None,
amine@267 91 1,
amine@267 92 save_stream,
amine@267 93 plot,
amine@267 94 save_image,
amine@267 95 0.2,
amine@267 96 10,
amine@267 97 0.3,
amine@267 98 False,
amine@267 99 False,
amine@267 100 55,
amine@267 101 )
amine@267 102 misc = (False, None, True, None, "TIME_FORMAT", "TIMESTAMP_FORMAT")
amine@267 103
amine@267 104 args_ns = _ArgsNamespece(*(args + misc))
amine@267 105
amine@267 106 io_kwargs = {
amine@267 107 "input": "file",
amine@267 108 "max_read": 30,
amine@267 109 "block_dur": 0.01,
amine@267 110 "sampling_rate": 16000,
amine@267 111 "sample_width": 2,
amine@267 112 "channels": 2,
amine@267 113 "use_channel": exp_use_channel,
amine@267 114 "save_stream": save_stream,
amine@267 115 "audio_format": "raw",
amine@267 116 "export_format": "ogg",
amine@267 117 "large_file": True,
amine@267 118 "frames_per_buffer": None,
amine@267 119 "input_device_index": 1,
amine@267 120 "record": exp_record,
amine@267 121 }
amine@267 122
amine@267 123 split_kwargs = {
amine@267 124 "min_dur": 0.2,
amine@267 125 "max_dur": 10,
amine@267 126 "max_silence": 0.3,
amine@267 127 "drop_trailing_silence": False,
amine@267 128 "strict_min_dur": False,
amine@267 129 "energy_threshold": 55,
amine@267 130 }
amine@267 131
amine@267 132 miscellaneous = {
amine@267 133 "echo": False,
amine@267 134 "command": None,
amine@267 135 "quiet": True,
amine@267 136 "printf": None,
amine@267 137 "time_format": "TIME_FORMAT",
amine@267 138 "timestamp_format": "TIMESTAMP_FORMAT",
amine@267 139 }
amine@267 140
amine@267 141 expected = KeywordArguments(io_kwargs, split_kwargs, miscellaneous)
amine@267 142 kwargs = make_kwargs(args_ns)
amine@267 143 self.assertEqual(kwargs, expected)
amine@268 144
amine@268 145 @genty_dataset(
amine@268 146 only_seconds=("%S", 5400, "5400.000"),
amine@268 147 only_millis=("%I", 5400, "5400000"),
amine@268 148 full=("%h:%m:%s.%i", 3725.365, "01:02:05.365"),
amine@268 149 full_zero_hours=("%h:%m:%s.%i", 1925.075, "00:32:05.075"),
amine@268 150 full_zero_minutes=("%h:%m:%s.%i", 3659.075, "01:00:59.075"),
amine@268 151 full_zero_seconds=("%h:%m:%s.%i", 3720.075, "01:02:00.075"),
amine@268 152 full_zero_millis=("%h:%m:%s.%i", 3725, "01:02:05.000"),
amine@268 153 duplicate_directive=(
amine@268 154 "%h %h:%m:%s.%i %s",
amine@268 155 3725.365,
amine@268 156 "01 01:02:05.365 05",
amine@268 157 ),
amine@268 158 no_millis=("%h:%m:%s", 3725, "01:02:05"),
amine@268 159 no_seconds=("%h:%m", 3725, "01:02"),
amine@268 160 no_minutes=("%h", 3725, "01"),
amine@268 161 no_hours=("%m:%s.%i", 3725, "02:05.000"),
amine@268 162 )
amine@268 163 def test_make_duration_fromatter(self, fmt, duration, expected):
amine@268 164 formatter = make_duration_fromatter(fmt)
amine@268 165 result = formatter(duration)
amine@268 166 self.assertEqual(result, expected)
amine@268 167
amine@268 168 @genty_dataset(
amine@268 169 duplicate_only_seconds=("%S %S",),
amine@268 170 duplicate_only_millis=("%I %I",),
amine@268 171 unknown_directive=("%x",),
amine@268 172 )
amine@268 173 def test_make_duration_fromatter_error(self, fmt):
amine@268 174 with self.assertRaises(TimeFormatError):
amine@268 175 make_duration_fromatter(fmt)
amine@269 176
amine@269 177 def test_make_logger_stdout_and_file(self):
amine@269 178 with TemporaryDirectory() as tmpdir:
amine@269 179 file = os.path.join(tmpdir, "file.log")
amine@269 180 logger = make_logger(debug_stdout=True, debug_file=file)
amine@269 181 self.assertEqual(logger.name, LOGGER_NAME)
amine@269 182 self.assertEqual(len(logger.handlers), 2)
amine@269 183 self.assertEqual(logger.handlers[0].stream.name, "<stdout>")
amine@269 184 self.assertEqual(logger.handlers[1].stream.name, file)
amine@269 185
amine@269 186 def test_make_logger_None(self):
amine@269 187 logger = make_logger(debug_stdout=False, debug_file=None)
amine@269 188 self.assertIsNone(logger)
amine@269 189 del logger