1
from tests import TestCase, add
5
from tempfile import mkstemp, mkdtemp
7
from quodlibet.formats._audio import AudioFile
8
from quodlibet.plugins.songsmenu import SongsMenuPlugins
10
class TSongsMenuPlugins(TestCase):
13
self.tempdir = mkdtemp()
14
self.pm = SongsMenuPlugins(folders=[self.tempdir])
16
self.assertEquals(self.pm.list(), [])
19
for f in os.listdir(self.tempdir):
20
os.remove(os.path.join(self.tempdir,f))
21
os.rmdir(self.tempdir)
23
def create_plugin(self, name='', desc='', icon='', funcs=None, mod=False):
24
fd, fn = mkstemp(suffix='.py', text=True, dir=self.tempdir)
25
file = os.fdopen(fd, 'w')
30
file.write("from quodlibet.plugins.songsmenu import SongsMenuPlugin\n")
31
file.write("class %s(SongsMenuPlugin):\n" % name)
33
file.write("%spass\n" % indent)
35
if name: file.write("%sPLUGIN_NAME = %r\n" % (indent, name))
36
if desc: file.write("%sPLUGIN_DESC = %r\n" % (indent, desc))
37
if icon: file.write("%sPLUGIN_ICON = %r\n" % (indent, icon))
38
for f in (funcs or []):
40
file.write("%sdef %s(*args): pass\n" % (indent, f))
42
file.write("%sdef %s(*args): return args\n" % (indent, f))
46
def test_empty_has_no_plugins(self):
47
dirname = self.create_plugin()
49
self.assertEquals(self.pm.list(), [])
51
def test_name_and_desc_plus_func_is_one(self):
52
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
54
self.assertEquals(len(self.pm.list()), 1)
56
def test_additional_functions_still_only_one(self):
57
self.create_plugin(name='Name', desc='Desc',
58
funcs=['plugin_song', 'plugin_songs'])
60
self.assertEquals(len(self.pm.list()), 1)
62
def test_two_plugins_are_two(self):
63
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
64
self.create_plugin(name='Name2', desc='Desc2',
65
funcs=['plugin_albums'])
67
self.assertEquals(len(self.pm.list()), 2)
69
def test_disables_plugin(self):
70
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
72
self.failIf(self.pm.enabled(self.pm.list()[0]))
74
def test_enabledisable_plugin(self):
75
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
77
plug = self.pm.list()[0]
78
self.pm.enable(plug, True)
79
self.failUnless(self.pm.enabled(plug))
80
self.pm.enable(plug, False)
81
self.failIf(self.pm.enabled(plug))
83
def test_ignores_broken_plugin(self):
84
self.create_plugin(name="Name", desc="Desc",
85
funcs=["__init__", "plugin_song"])
87
plug = self.pm.list()[0]
88
self.pm.enable(plug, True)
89
menu = self.pm.Menu(None, None, [AudioFile()])
90
self.failIf(menu.get_children())
93
self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song'])
94
menu = self.pm.Menu(None, None, [AudioFile()])
96
add(TSongsMenuPlugins)