emmental/audio/test_player.py

162 lines
4.9 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import db
import lib
import pathlib
import tagdb
import unittest
from gi.repository import GLib
from gi.repository import Gst
from . import bass
from . import player
from . import scale
from . import selector
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 FakeSelector(selector.Selector):
def __init__(self, library):
selector.Selector.__init__(self)
t1 = [ t for t in library.tracks if t.tracknumber == 1 ][0]
t2 = [ t for t in library.tracks if t.tracknumber == 11 ][0]
self.tracks = [ t1, t2 ]
self.cur = -1
def next(self):
self.cur += 1
return self.tracks[self.cur]
def previous(self):
self.cur -= 1
return self.tracks[self.cur]
class TestPlayer(unittest.TestCase):
def setUpClass():
tagdb.reset()
lib = tagdb.Library.add(test_album)
lib.scan().join()
def setUp(self):
self.changed = None
lib.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 on_playlist_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.Autopause, scale.AutoPauseScale)
self.assertIsInstance(play.Selector, selector.Selector)
self.assertIsNone(play.track)
self.assertEqual(play.playlist, db.user.Table.find("Collection"))
self.assertEqual(lib.settings.get_int("audio.plstateid"),
db.user.Table.find("Collection").plstateid)
def test_set_playlist(self):
collection = db.user.Table.find("Collection")
plist = db.user.Table.find("Test Playlist")
play = player.Player()
play.connect("playlist-changed", self.on_playlist_changed)
play.set_playlist(plist)
self.assertEqual(play.playlist, plist)
self.assertEqual(self.changed, (collection, plist))
self.assertEqual(lib.settings.get_int("audio.plstateid"), plist.plstateid)
self.changed = None
play.set_playlist(plist)
self.assertIsNone(self.changed)
play2 = player.Player()
self.assertEqual(play2.playlist, plist)
play2.set_playlist(None)
self.assertEqual(play2.playlist, collection)
def test_set_playlist_reset(self):
plist = db.user.Table.find("Test Playlist")
plist.add_track(db.make_fake_track(1, 1, "Test 1", "/a/b/c/1.ogg"))
plist.current = 0
play = player.Player()
play.set_playlist(plist)
self.assertEqual(plist.current, -1)
def test_change_track(self):
play = player.Player()
play.connect("track-changed", self.on_track_changed)
self.assertEqual(play.get_property("uri"), None)
play.change_track(self.track, reset=True)
self.assertEqual(play.track, self.track)
self.assertEqual(lib.settings.get_int("audio.trackid"), self.track.trackid)
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_play_track(self):
play = player.Player()
play.play_track(self.track)
self.assertEqual(play.track, self.track)
self.assertTrue(play.playing)
play.pause()
def test_player_play_pause(self):
play = player.Player()
play.play_track(self.track)
self.assertEqual(play.track, self.track)
play.pause()
self.assertFalse(play.playing)
play.play()
self.assertTrue(play.playing)
play.playpause()
self.assertFalse(play.playing)
play.playpause()
self.assertTrue(play.playing)
play.pause()
self.assertFalse(play.playing)
def test_player_next_previous(self):
select = FakeSelector(self.library)
play = player.Player()
play.connect("track-changed", self.on_track_changed)
play.Selector = select
play.next()
self.assertEqual(play.track.trackid, 1)
self.assertEqual(self.changed, (None, tagdb.Tracks[1]) )
play.next()
self.assertEqual(play.track.trackid, 11)
self.assertEqual(self.changed, (tagdb.Tracks[1], tagdb.Tracks[11]) )
play.previous()
self.assertEqual(play.track.trackid, 1)
self.assertEqual(self.changed, (tagdb.Tracks[11], tagdb.Tracks[1]) )