emmental/tests/audio/test_replaygain.py

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)