1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
from tests import TestCase, add
import os
from tempfile import mkstemp, mkdtemp
from quodlibet.formats._audio import AudioFile
from quodlibet.plugins.songsmenu import SongsMenuPlugins
class TSongsMenuPlugins(TestCase):
def setUp(self):
self.tempdir = mkdtemp()
self.pm = SongsMenuPlugins(folders=[self.tempdir])
self.pm.rescan()
self.assertEquals(self.pm.list(), [])
def tearDown(self):
for f in os.listdir(self.tempdir):
os.remove(os.path.join(self.tempdir,f))
os.rmdir(self.tempdir)
def create_plugin(self, name='', desc='', icon='', funcs=None, mod=False):
fd, fn = mkstemp(suffix='.py', text=True, dir=self.tempdir)
file = os.fdopen(fd, 'w')
if mod:
indent = ''
else:
file.write("from quodlibet.plugins.songsmenu import SongsMenuPlugin\n")
file.write("class %s(SongsMenuPlugin):\n" % name)
indent = ' '
file.write("%spass\n" % indent)
if name: file.write("%sPLUGIN_NAME = %r\n" % (indent, name))
if desc: file.write("%sPLUGIN_DESC = %r\n" % (indent, desc))
if icon: file.write("%sPLUGIN_ICON = %r\n" % (indent, icon))
for f in (funcs or []):
if f in ["__init__"]:
file.write("%sdef %s(*args): pass\n" % (indent, f))
else:
file.write("%sdef %s(*args): return args\n" % (indent, f))
file.flush()
file.close()
def test_empty_has_no_plugins(self):
dirname = self.create_plugin()
self.pm.rescan()
self.assertEquals(self.pm.list(), [])
def test_name_and_desc_plus_func_is_one(self):
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
self.pm.rescan()
self.assertEquals(len(self.pm.list()), 1)
def test_additional_functions_still_only_one(self):
self.create_plugin(name='Name', desc='Desc',
funcs=['plugin_song', 'plugin_songs'])
self.pm.rescan()
self.assertEquals(len(self.pm.list()), 1)
def test_two_plugins_are_two(self):
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
self.create_plugin(name='Name2', desc='Desc2',
funcs=['plugin_albums'])
self.pm.rescan()
self.assertEquals(len(self.pm.list()), 2)
def test_disables_plugin(self):
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
self.pm.rescan()
self.failIf(self.pm.enabled(self.pm.list()[0]))
def test_enabledisable_plugin(self):
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
self.pm.rescan()
plug = self.pm.list()[0]
self.pm.enable(plug, True)
self.failUnless(self.pm.enabled(plug))
self.pm.enable(plug, False)
self.failIf(self.pm.enabled(plug))
def test_ignores_broken_plugin(self):
self.create_plugin(name="Broken", desc="Desc",
funcs=["__init__", "plugin_song"])
self.pm.rescan()
plug = self.pm.list()[0]
self.pm.enable(plug, True)
menu = self.pm.Menu(None, None, [AudioFile()])
self.failIf(menu and menu.get_children())
def test_Menu(self):
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
menu = self.pm.Menu(None, None, [AudioFile()])
add(TSongsMenuPlugins)
|