101 lines
4.6 KiB
Python
101 lines
4.6 KiB
Python
# Copyright 2022 (c) Anna Schumaker.
|
|
"""Test the ReplayGain filter element."""
|
|
import io
|
|
import unittest
|
|
import unittest.mock
|
|
import emmental.audio.replaygain
|
|
from gi.repository import Gst
|
|
|
|
|
|
class TestReplayGain(unittest.TestCase):
|
|
"""Test the ReplayGain filter."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
self.filter = emmental.audio.replaygain.Filter()
|
|
|
|
def test_request_pads(self):
|
|
"""Test that we can create a RequestPads named tuple."""
|
|
req = emmental.audio.replaygain.RequestPads(1, 2)
|
|
self.assertIsInstance(req, tuple)
|
|
self.assertEqual(req.src, 1)
|
|
self.assertEqual(req.sink, 2)
|
|
|
|
def test_init(self):
|
|
"""Test that the filter is set up properly."""
|
|
self.assertIsInstance(self.filter, Gst.Bin)
|
|
self.assertIsInstance(self.filter._src, Gst.Element)
|
|
self.assertIsInstance(self.filter._sink, Gst.Element)
|
|
self.assertEqual(self.filter.mode, "disabled")
|
|
|
|
self.assertRegex(self.filter._src.name, r"outputselector\d+")
|
|
self.assertEqual(self.filter._src.get_property("pad-negotiation-mode"),
|
|
2)
|
|
self.assertEqual(self.filter._src.get_property("active-pad"),
|
|
self.filter._disabled.src)
|
|
|
|
self.assertRegex(self.filter._sink.name, r"inputselector\d+")
|
|
self.assertEqual(self.filter._sink.get_property("active-pad"),
|
|
self.filter._disabled.sink)
|
|
|
|
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_disabled(self, mock_stdout: io.StringIO):
|
|
"""Test the ReplayGain filter with ReplayGain disabled."""
|
|
self.assertIsInstance(self.filter._rglimit, Gst.Element)
|
|
self.assertIsInstance(self.filter._disabled,
|
|
emmental.audio.replaygain.RequestPads)
|
|
self.assertIsInstance(self.filter._disabled.src, Gst.Pad)
|
|
self.assertIsInstance(self.filter._disabled.sink, Gst.Pad)
|
|
|
|
self.assertRegex(self.filter._rglimit.name, r"rglimiter\d+")
|
|
|
|
self.filter.mode = "track"
|
|
self.filter.mode = "disabled"
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
r"audio: setting ReplayGain mode to 'disabled'")
|
|
self.assertEqual(self.filter._src.get_property("active-pad"),
|
|
self.filter._disabled.src)
|
|
self.assertEqual(self.filter._sink.get_property("active-pad"),
|
|
self.filter._disabled.sink)
|
|
|
|
@unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
|
|
def test_album_mode(self, mock_stdout: io.StringIO):
|
|
"""Test the ReplayGain filter with ReplayGain set to album mode."""
|
|
self.assertIsInstance(self.filter._rgalbum, Gst.Element)
|
|
self.assertIsInstance(self.filter._album_mode,
|
|
emmental.audio.replaygain.RequestPads)
|
|
self.assertIsInstance(self.filter._album_mode.src, Gst.Pad)
|
|
self.assertIsInstance(self.filter._album_mode.sink, Gst.Pad)
|
|
|
|
self.assertRegex(self.filter._rgalbum.name, r"rgvolume\d+")
|
|
self.assertEqual(self.filter._rgalbum.get_property("pre-amp"), 6.0)
|
|
self.assertTrue(self.filter._rgalbum.get_property("album-mode"))
|
|
|
|
self.filter.mode = "album"
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
r"audio: setting ReplayGain mode to 'album'")
|
|
self.assertEqual(self.filter._src.get_property("active-pad"),
|
|
self.filter._album_mode.src)
|
|
self.assertEqual(self.filter._sink.get_property("active-pad"),
|
|
self.filter._album_mode.sink)
|
|
|
|
@unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
|
|
def test_track_mode(self, mock_stdout: io.StringIO):
|
|
"""Test the ReplayGain filter with ReplayGain set to track mode."""
|
|
self.assertIsInstance(self.filter._rgtrack, Gst.Element)
|
|
|
|
self.assertRegex(self.filter._rgtrack.name, r"rgvolume\d+")
|
|
self.assertEqual(self.filter._rgtrack.get_property("pre-amp"), 6.0)
|
|
self.assertFalse(self.filter._rgtrack.get_property("album-mode"))
|
|
|
|
self.filter.mode = "track"
|
|
self.assertRegex(mock_stdout.getvalue(),
|
|
r"audio: setting ReplayGain mode to 'track'")
|
|
self.assertEqual(self.filter._src.get_property("active-pad"),
|
|
self.filter._track_mode.src)
|
|
self.assertEqual(self.filter._sink.get_property("active-pad"),
|
|
self.filter._track_mode.sink)
|