File indexing completed on 2024-04-21 04:48:05

0001 import subprocess
0002 import time
0003 import unittest
0004 
0005 import dbus
0006 
0007 APPNAME = "amarok"
0008 MPRIS_OBJECT_PATH = "/org/mpris/MediaPlayer2"
0009 MPRIS_PREFIX = "org.mpris.MediaPlayer2"
0010 
0011 ROOT_IFACE = MPRIS_PREFIX
0012 PLAYER_IFACE = MPRIS_PREFIX + ".Player"
0013 
0014 def get_mpris_object():
0015     bus = dbus.SessionBus()
0016     return bus.get_object(MPRIS_PREFIX + "." + APPNAME, MPRIS_OBJECT_PATH)
0017 
0018 def start_player():
0019     devnull = file("/dev/null", "a")
0020     player = subprocess.Popen(["amarok", "--nofork"], stderr=devnull, stdout=devnull)
0021     time.sleep(10)
0022     return player
0023 
0024 def stop_player(player):
0025     player.terminate()
0026     player.wait()
0027 
0028 class TestMediaPlayer2(unittest.TestCase):
0029     def check_property(self, props, key, expected_value):
0030         value = props[key]
0031         self.assertEquals(value, expected_value)
0032         del props[key]
0033 
0034     def check_has_property(self, props, key):
0035         self.assert_(key in props)
0036         del props[key]
0037 
0038     def test_properties(self):
0039         player = start_player()
0040         try:
0041             mpris = get_mpris_object()
0042             props = mpris.GetAll(ROOT_IFACE)
0043             self.check_property(props, "CanQuit", True)
0044             self.check_property(props, "CanRaise", True)
0045             self.check_property(props, "HasTrackList", False)
0046             self.check_property(props, "Identity", "Amarok")
0047             self.check_property(props, "DesktopEntry", "amarok")
0048             self.check_has_property(props, "SupportedUriSchemes")
0049             self.check_has_property(props, "SupportedMimeTypes")
0050             self.assertEquals(len(props), 0)
0051         finally:
0052             stop_player(player)
0053 
0054     def test_quit(self):
0055         player = start_player()
0056         mpris = get_mpris_object()
0057         mpris.Quit()
0058         start = time.time()
0059         while time.time() < start + 60 * 5 and player.poll() is None:
0060             time.sleep(.5)
0061         if player.poll() is None:
0062             stop_player(player)
0063             self.fail("Player not stopped")
0064 
0065 unittest.main()