# Copyright 2023 (c) Anna Schumaker. """Tests our combined Filter element.""" import io import unittest import emmental.audio.filter from gi.repository import Gst class TestFilter(unittest.TestCase): """Tests our custom Filter element.""" def setUp(self): """Set up common variables.""" self.filter = emmental.audio.filter.Filter() def test_init(self): """Test that the filter is set up correctly.""" self.assertIsInstance(self.filter, Gst.Bin) self.assertIsInstance(self.filter.get_static_pad("src"), Gst.GhostPad) self.assertIsInstance(self.filter.get_static_pad("sink"), Gst.GhostPad) @unittest.mock.patch("sys.stdout", new_callable=io.StringIO) def test_replaygain(self, mock_stdout: io.StringIO): """Test the ReplayGain element in the filter.""" self.assertIsInstance(self.filter._replaygain, emmental.audio.replaygain.Filter) self.assertEqual(self.filter.rg_mode, "disabled") self.filter.rg_mode = "track" self.assertEqual(self.filter._replaygain.mode, "track") self.filter.rg_mode = "track" self.assertEqual(mock_stdout.getvalue(), "audio: setting ReplayGain mode to 'track'\n") @unittest.mock.patch("sys.stdout", new_callable=io.StringIO) def test_volume(self, mock_stdout: io.StringIO): """Test the Volume element in the filter.""" self.assertIsInstance(self.filter._volume, Gst.Element) self.assertRegex(self.filter._volume.name, r"volume\d+") self.assertEqual(self.filter._volume.get_property("volume"), 1.0) self.assertFalse(self.filter.bg_enabled) self.assertEqual(self.filter.bg_volume, 0.5) self.filter.bg_enabled = True self.assertEqual(self.filter._volume.get_property("volume"), 0.5) self.assertEqual(mock_stdout.getvalue(), "audio: setting background listening to 50%\n") self.filter.bg_volume = 0.50 self.assertEqual(mock_stdout.getvalue(), "audio: setting background listening to 50%\n") self.filter.bg_volume = 0.75 self.assertEqual(self.filter._volume.get_property("volume"), 0.75) self.assertEqual(mock_stdout.getvalue(), "audio: setting background listening to 50%\n" "audio: setting background listening to 75%\n") self.filter.bg_enabled = False self.assertEqual(self.filter._volume.get_property("volume"), 1.0) self.assertEqual(mock_stdout.getvalue(), "audio: setting background listening to 50%\n" "audio: setting background listening to 75%\n" "audio: setting background listening to off\n") self.filter.bg_volume = 0.5 self.assertEqual(self.filter._volume.get_property("volume"), 1.0) self.assertEqual(mock_stdout.getvalue(), "audio: setting background listening to 50%\n" "audio: setting background listening to 75%\n" "audio: setting background listening to off\n")