emmental/tests/mpris2/test_player.py

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