147 lines
4.6 KiB
Python
147 lines
4.6 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import db
|
|
import lib
|
|
import pathlib
|
|
import scanner
|
|
import unittest
|
|
from gi.repository import GLib
|
|
from gi.repository import Gst
|
|
from . import bass
|
|
from . import player
|
|
from . import scale
|
|
|
|
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():
|
|
db.reset()
|
|
lib = db.library.Table.find(test_album)
|
|
scanner.Queue.push(scanner.task.DirectoryTask(lib, test_album))
|
|
while scanner.Queue.run() == GLib.SOURCE_CONTINUE: pass
|
|
|
|
def setUp(self):
|
|
self.changed = None
|
|
lib.settings.reset()
|
|
self.library = db.library.Table.lookup(test_album)
|
|
self.track = db.track.Table.lookup(test_track)
|
|
|
|
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_init(self):
|
|
play = player.Player()
|
|
self.assertIsInstance(play, bass.BassPlayer)
|
|
self.assertIsInstance(play.bus, Gst.Bus)
|
|
self.assertIsInstance(play.Autopause, scale.AutoPauseScale)
|
|
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.rowid)
|
|
self.assertEqual(self.changed, (None, self.track) )
|
|
|
|
db.sql.execute("DELETE FROM temp_playlist_map")
|
|
play2 = player.Player()
|
|
self.assertEqual(play2.track, self.track)
|
|
self.assertEqual(db.user.Table.find("Previous").get_track(0), self.track)
|
|
|
|
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_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_next_previous(self):
|
|
collection = db.user.Table.find("Collection")
|
|
play = player.Player()
|
|
play.set_playlist(collection)
|
|
play.connect("track-changed", self.on_track_changed)
|
|
|
|
track0 = collection.get_track(0)
|
|
track1 = collection.get_track(1)
|
|
|
|
play.next()
|
|
self.assertEqual(play.track, track0)
|
|
self.assertEqual(self.changed, (None, track0))
|
|
|
|
play.next()
|
|
self.assertEqual(play.track, track1)
|
|
self.assertEqual(self.changed, (track0, track1))
|
|
|
|
play.previous()
|
|
self.assertEqual(play.track, track0)
|
|
self.assertEqual(self.changed, (track1, track0))
|
|
|
|
play.next()
|
|
self.assertEqual(play.track, track1)
|
|
self.assertEqual(self.changed, (track0, track1))
|