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