102 lines
4.1 KiB
Python
102 lines
4.1 KiB
Python
# Copyright 2022 (c) Anna Schumaker.
|
|
"""Tests our Mpris Player object."""
|
|
import pathlib
|
|
import unittest
|
|
import unittest.mock
|
|
import emmental.mpris2.player
|
|
import tests.util
|
|
from gi.repository import GLib
|
|
from gi.repository import Gio
|
|
|
|
|
|
class TestPlayer(unittest.TestCase):
|
|
"""Test the mpris2 player object."""
|
|
|
|
def setUp(self):
|
|
"""Set up common variables."""
|
|
self.player = emmental.mpris2.player.Player()
|
|
|
|
def test_xml_files(self):
|
|
"""Test that the interface definition files exist."""
|
|
mpris2 = pathlib.Path(emmental.mpris2.__file__).parent
|
|
self.assertEqual(emmental.mpris2.player.PLAYER_XML,
|
|
mpris2 / "Player.xml")
|
|
self.assertTrue(emmental.mpris2.player.PLAYER_XML.is_file())
|
|
self.assertEqual(emmental.mpris2.player.OBJECT_PATH,
|
|
"/com/nowheycreamery/emmental")
|
|
|
|
def test_init(self):
|
|
"""Test that the application object is configured correctly."""
|
|
self.assertIsInstance(self.player, emmental.mpris2.dbus.Object)
|
|
self.assertIsInstance(self.player.nodeinfo, Gio.DBusNodeInfo)
|
|
self.assertIsInstance(self.player.interface, Gio.DBusInterfaceInfo)
|
|
|
|
def test_properties(self):
|
|
"""Test Player properties."""
|
|
self.assertEqual(self.player.PlaybackStatus, "Stopped")
|
|
self.assertEqual(self.player.LoopStatus, "None")
|
|
self.assertEqual(self.player.Rate, 1.0)
|
|
self.assertFalse(self.player.Shuffle)
|
|
self.assertEqual(self.player.Volume, 1.0)
|
|
self.assertEqual(self.player.Position, 0)
|
|
self.assertDictEqual(self.player.Metadata, {})
|
|
self.assertEqual(self.player.MinimumRate, 1.0)
|
|
self.assertEqual(self.player.MaximumRate, 1.0)
|
|
self.assertFalse(self.player.CanGoNext)
|
|
self.assertFalse(self.player.CanGoPrevious)
|
|
self.assertFalse(self.player.CanPlay)
|
|
self.assertFalse(self.player.CanPause)
|
|
self.assertFalse(self.player.CanSeek)
|
|
self.assertTrue(self.player.CanControl)
|
|
|
|
def test_metadata(self):
|
|
"""Test formatting metadata properties."""
|
|
self.assertEqual(self.player.artist, "")
|
|
self.assertEqual(self.player.album_artist, "")
|
|
self.assertEqual(self.player.album, "")
|
|
self.assertEqual(self.player.title, "")
|
|
self.assertEqual(self.player.duration, 0)
|
|
self.assertEqual(self.player.trackid, 0)
|
|
self.assertIsNone(self.player.file)
|
|
self.assertIsNone(self.player.artwork)
|
|
|
|
self.assertDictEqual(self.player.Metadata, {})
|
|
|
|
self.player.artist = "Test Artist"
|
|
self.player.album_artist = "Test Album Artist"
|
|
self.player.album = "Test Album"
|
|
self.player.title = "Test Title"
|
|
self.player.duration = 12345
|
|
self.player.file = pathlib.Path("/a/b/c.ogg")
|
|
self.player.artwork = tests.util.COVER_JPG
|
|
|
|
cover_uri = tests.util.COVER_JPG.as_uri()
|
|
res = {"mpris:trackid":
|
|
GLib.Variant("o", "/com/nowheycreamery/emmental/0"),
|
|
"mpris:length": GLib.Variant("x", 12345),
|
|
"xesam:url": GLib.Variant("s", "file:///a/b/c.ogg"),
|
|
"mpris:artUrl": GLib.Variant("s", cover_uri),
|
|
"xesam:album": GLib.Variant("s", "Test Album"),
|
|
"xesam:albumArtist": GLib.Variant("as", ["Test Album Artist"]),
|
|
"xesam:artist": GLib.Variant("as", ["Test Artist"]),
|
|
"xesam:title": GLib.Variant("s", "Test Title")}
|
|
|
|
self.assertDictEqual(self.player.Metadata, res)
|
|
|
|
def test_signals(self):
|
|
"""Test that Player signals exist."""
|
|
self.player.emit("Next")
|
|
self.player.emit("Previous")
|
|
self.player.emit("Pause")
|
|
self.player.emit("PlayPause")
|
|
self.player.emit("Stop")
|
|
self.player.emit("Play")
|
|
self.player.emit("Seek", 12345)
|
|
self.player.emit("SetPosition",
|
|
"/com/nowheycreamery/emmental/123", 12345)
|
|
|
|
open_path = unittest.mock.Mock()
|
|
self.player.connect("OpenPath", open_path)
|
|
self.player.emit("OpenUri", "/a/b/c.ogg")
|
|
open_path.assert_called_with(self.player, pathlib.Path("/a/b/c.ogg"))
|