# 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]) )