emmental/audio/test_player.py

102 lines
3.4 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
from . import artwork
from . import controls
from . import nowplaying
from . import player
from . import seeker
from lib import publisher
from lib import settings
from gi.repository import Gst
import pathlib
import tagdb
import unittest
test_album = pathlib.Path("./data/Test Album/")
test_track = test_album / "01 - Test Track.ogg"
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, prev, new):
self.changed = (prev, new)
def test_player_init(self):
play = player.Player()
self.assertIsInstance(play.video, Gst.Element)
self.assertIsInstance(play.playbin, Gst.Element)
self.assertIsInstance(play.bus, Gst.Bus)
self.assertIsInstance(play.Controls, controls.Controls)
self.assertIsInstance(play.NowPlaying, nowplaying.NowPlaying)
self.assertIsInstance(play.Artwork, artwork.Artwork)
self.assertIsInstance(play.Seeker, seeker.Seeker)
self.assertIsInstance(play.TrackChanged, publisher.Publisher)
self.assertIsNone(play.track)
self.assertEqual(play.playbin.get_property("video-sink"), play.video)
self.assertIn(play.Seeker.scale, play.Controls.sizegroup.get_widgets())
def test_player_load_track(self):
play = player.Player()
uri = test_track.absolute().as_uri()
play.TrackChanged.register(self.on_track_changed)
self.assertEqual(play.playbin.get_property("uri"), None)
play.load_track(self.track)
self.assertEqual(play.playbin.get_property("uri"), 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) )
self.assertFalse(play.play_track(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.pause()
self.assertEqual(play.get_state(), Gst.State.PAUSED)
def test_player_next_previous(self):
play = player.Player()
play.TrackChanged.register(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]) )