138 lines
5.4 KiB
Python
138 lines
5.4 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import lib
|
|
import pathlib
|
|
import time
|
|
import unittest
|
|
from gi.repository import GObject
|
|
from gi.repository import GLib
|
|
from gi.repository import Gst
|
|
from . import bass
|
|
from . import replaygain
|
|
|
|
main_context = GLib.main_context_default()
|
|
test_album = pathlib.Path("./data/Test Album/")
|
|
test_track = test_album / "01 - Test Track.ogg"
|
|
test_uri = test_track.absolute().as_uri()
|
|
|
|
class TestBassPlayer(unittest.TestCase):
|
|
def setUp(self):
|
|
self.duration_changed = None
|
|
|
|
def on_duration_changed(self, player): self.duration_changed = player.duration
|
|
def on_playback_start(self, player): self.playing = True
|
|
def on_playback_paused(self, player): self.playing = False
|
|
|
|
def test_bass_player_init(self):
|
|
base = bass.BassPlayer()
|
|
self.assertIsInstance(base, GObject.GObject)
|
|
self.assertIsInstance(base.audio, replaygain.ReplayGainSink)
|
|
self.assertIsInstance(base.video, Gst.Element)
|
|
self.assertIsInstance(base.playbin, Gst.Element)
|
|
self.assertEqual(base.playbin.get_property("audio-sink"), base.audio)
|
|
self.assertEqual(base.playbin.get_property("video-sink"), base.video)
|
|
self.assertEqual(base.playbin.get_state(Gst.CLOCK_TIME_NONE)[1],
|
|
Gst.State.READY)
|
|
self.assertIsNone(base.timeout)
|
|
|
|
def test_bass_player_bus(self):
|
|
base = bass.BassPlayer()
|
|
self.assertIsInstance(base.bus, Gst.Bus)
|
|
|
|
def test_bass_player_duration(self):
|
|
base = bass.BassPlayer()
|
|
base.connect("duration-changed", self.on_duration_changed)
|
|
self.assertEqual(base.get_property("duration"), 0)
|
|
|
|
base.set_property("uri", test_uri)
|
|
base.set_property("playing", False)
|
|
|
|
iterations = 0
|
|
while self.duration_changed == None:
|
|
main_context.iteration(may_block=False)
|
|
if (iterations := iterations +1) == 100000:
|
|
break
|
|
|
|
self.assertEqual(base.get_property("duration"), 10 * Gst.SECOND)
|
|
self.assertEqual(self.duration_changed, 10 * Gst.SECOND)
|
|
|
|
def test_bass_player_playing(self):
|
|
base = bass.BassPlayer()
|
|
base.connect("playback-start", self.on_playback_start)
|
|
base.connect("playback-paused", self.on_playback_paused)
|
|
base.set_property("uri", test_uri)
|
|
self.assertFalse(base.get_property("playing"))
|
|
|
|
base.set_property("playing", True)
|
|
(ret, state, pending) = base.playbin.get_state(Gst.CLOCK_TIME_NONE)
|
|
self.assertEqual(state, Gst.State.PLAYING)
|
|
self.assertTrue(base.get_property("playing"))
|
|
while main_context.iteration(may_block=False): pass
|
|
self.assertIsNotNone(base.timeout)
|
|
|
|
base.set_property("playing", False)
|
|
(ret, state, pending) = base.playbin.get_state(Gst.CLOCK_TIME_NONE)
|
|
self.assertEqual(state, Gst.State.PAUSED)
|
|
self.assertFalse(base.get_property("playing"))
|
|
while main_context.iteration(may_block=False): pass
|
|
self.assertIsNone(base.timeout)
|
|
|
|
def test_basic_player_position(self):
|
|
base = bass.BassPlayer()
|
|
self.assertEqual(base.get_property("position"), 0)
|
|
|
|
base.set_property("uri", test_uri)
|
|
base.set_property("playing", False)
|
|
time.sleep(0.1)
|
|
while main_context.iteration(may_block=False): time.sleep(0.005)
|
|
|
|
base.set_property("position", 5 * Gst.SECOND)
|
|
time.sleep(0.2)
|
|
while main_context.iteration(may_block=False): time.sleep(0.005)
|
|
self.assertGreater(base.get_property("position"), 0)
|
|
|
|
def test_bass_player_replaygain(self):
|
|
lib.settings.reset()
|
|
base = bass.BassPlayer()
|
|
self.assertEqual(lib.settings.get("audio.replaygain"), "disabled")
|
|
self.assertEqual(base.get_property("replaygain"), "disabled")
|
|
|
|
base.set_property("replaygain", "track")
|
|
self.assertEqual(base.audio.get_property("mode"), "track")
|
|
self.assertEqual(base.get_property("replaygain"), "track")
|
|
self.assertEqual(lib.settings.get("audio.replaygain"), "track")
|
|
|
|
base.set_property("replaygain", "disabled")
|
|
self.assertEqual(base.audio.get_property("mode"), "disabled")
|
|
self.assertEqual(base.get_property("replaygain"), "disabled")
|
|
self.assertEqual(lib.settings.get("audio.replaygain"), "disabled")
|
|
|
|
base.set_property("replaygain", "album")
|
|
self.assertEqual(base.audio.get_property("mode"), "album")
|
|
self.assertEqual(base.get_property("replaygain"), "album")
|
|
self.assertEqual(lib.settings.get("audio.replaygain"), "album")
|
|
|
|
def test_bass_player_uri(self):
|
|
base = bass.BassPlayer()
|
|
|
|
self.assertIsNone(base.get_property("uri"))
|
|
base.set_property("uri", test_uri)
|
|
self.assertEqual(base.get_property("uri"), test_uri)
|
|
|
|
base.playbin.set_state(Gst.State.PAUSED)
|
|
base.set_property("uri", None)
|
|
self.assertEqual(base.playbin.get_state(Gst.CLOCK_TIME_NONE)[1],
|
|
Gst.State.READY)
|
|
|
|
def test_bass_player_volume(self):
|
|
lib.settings.reset()
|
|
base = bass.BassPlayer()
|
|
|
|
self.assertEqual(lib.settings.get_float("audio.volume"), 1.0)
|
|
self.assertEqual(base.get_property("volume"), 1.0)
|
|
base.set_property("volume", 0.5)
|
|
self.assertEqual(base.get_property("volume"), 0.5)
|
|
self.assertEqual(lib.settings.get_float("audio.volume"), 0.5)
|
|
|
|
base2 = bass.BassPlayer()
|
|
self.assertEqual(base2.get_property("volume"), 0.5)
|