emmental/audio/test_player.py

107 lines
3.3 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
from . import artwork
from . import bass
from . import controls
from . import nowplaying
from . import player
from . import scale
from lib import publisher
from lib import settings
from gi.repository import GObject
from gi.repository import GLib
from gi.repository import Gst
import pathlib
import tagdb
import time
import unittest
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 TestPlayer(unittest.TestCase):
def setUpClass():
tagdb.reset()
lib = tagdb.Library.add(test_album)
lib.scan().join()
def setUp(self):
self.changed = None
settings.reset()
self.library = tagdb.Library.store[test_album]
self.track = [ t for t in self.library.tracks if t.tracknumber == 1 ][0]
def tearDownClass():
tagdb.reset()
def on_track_changed(self, player, prev, new):
self.changed = (prev, new)
def test_player_init(self):
play = player.Player()
self.assertIsInstance(play, bass.BassPlayer)
self.assertIsInstance(play.bus, Gst.Bus)
self.assertIsInstance(play.Artwork, artwork.Artwork)
self.assertIsInstance(play.Autopause, scale.AutoPauseScale)
self.assertIsNone(play.track)
def test_player_load_track(self):
play = player.Player()
play.connect("track-changed", self.on_track_changed)
self.assertEqual(play.get_property("uri"), None)
play.load_track(self.track)
self.assertEqual(play.get_property("uri"), test_uri)
self.assertEqual(play.track, self.track)
self.assertEqual(settings.get_int("audio.trackid"), self.track.trackid)
self.assertEqual(play.get_state(), Gst.State.READY)
self.assertEqual(self.changed, (None, self.track) )
tagdb.tags.User["Previous"].tracks.clear()
play2 = player.Player()
self.assertEqual(play2.track, self.track)
self.assertIn(self.track, tagdb.tags.User["Previous"].tracks)
def test_player_play_pause(self):
play = player.Player()
play.load_track(self.track)
self.assertEqual(play.track, self.track)
self.assertEqual(play.get_state(), Gst.State.READY)
play.pause()
self.assertEqual(play.get_state(), Gst.State.PAUSED)
play.play()
self.assertEqual(play.get_state(), Gst.State.PLAYING)
play.playpause()
self.assertEqual(play.get_state(), Gst.State.PAUSED)
play.playpause()
self.assertEqual(play.get_state(), Gst.State.PLAYING)
play.pause()
self.assertEqual(play.get_state(), Gst.State.PAUSED)
while main_context.iteration(may_block=False): pass
def test_player_next_previous(self):
play = player.Player()
play.connect("track-changed", self.on_track_changed)
play.next()
self.assertEqual(play.track.trackid, 0)
self.assertEqual(self.changed, (None, tagdb.Tracks[0]) )
play.next()
self.assertEqual(play.track.trackid, 1)
self.assertEqual(self.changed, (tagdb.Tracks[0], tagdb.Tracks[1]) )
play.previous()
self.assertEqual(play.track.trackid, 0)
self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[0]) )