def test_handling_playlists_without_confirmation(self): plugin = Plugin(FakePlaylistPlugin) self.handler.plugin_enable(plugin) playlists = generate_playlists(MAX_PLAYLISTS) self.handler.handle(plugin.id, self.library, self.mock_browser, playlists) self.failUnless("Didn't execute plugin", FakePlaylistPlugin.total > 0) self.failIf(self.confirmed, ("Wasn't expecting a confirmation for %d" " invocations" % len(playlists)))
def test_handling_lots_of_songs_with_confirmation(self): plugin = Plugin(FakePlaylistPlugin) self.handler.plugin_enable(plugin) playlists = generate_playlists(MAX_PLAYLISTS + 1) self.handler.handle(plugin.id, self.library, self.mock_browser, playlists) self.failUnless(self.confirmed, ("Should have confirmed %d invocations (Max=%d)." % (len(playlists), MAX_PLAYLISTS)))
def test_handling_songs_without_confirmation(self): plugin = Plugin(FakeSongsMenuPlugin) self.handler.plugin_enable(plugin) MAX = FakeSongsMenuPlugin.MAX_INVOCATIONS songs = [AudioFile({'~filename': "/tmp/%s" % x, 'artist': 'foo'}) for x in range(MAX)] self.handler.handle(plugin.id, self.library, None, songs) self.failIf(self.confirmed, ("Wasn't expecting a confirmation for %d" " invocations" % len(songs)))
def test_populate_menu(self): plugin = Plugin(FakePlaylistPlugin) self.handler.plugin_enable(plugin) menu = Gtk.Menu() self.handler.populate_menu(menu, None, self.mock_browser, [TEST_PLAYLIST]) # Don't forget the separator num = len(menu.get_children()) - 1 self.failUnlessEqual(num, 1, msg="Need 1 plugin not %d" % num)
def test_get_many(self): songs = [AudioFile({"~filename": os.path.join(self.dir, "song.ogg"), "title": "Ode to Baz"}), self.an_album_song()] plugin = Plugin(ArtworkUrlCover) self.manager.plugin_handler.plugin_enable(plugin) self.add_file('cover.jpg') cover = self.manager.get_cover_many(songs) assert cover
def test_extension_search(self): plugin = Plugin(self.FakeQueryPlugin) QUERY_HANDLER.plugin_enable(plugin) song = AudioFile({"~filename": "/dev/null"}) try: assert Query("@(name: LIVE)").search(song) assert not Query("@(name: DIE)").search(song) finally: QUERY_HANDLER.plugin_disable(plugin)
def test_handling_lots_of_songs_with_confirmation(self): plugin = Plugin(FakeSongsMenuPlugin) self.handler.plugin_enable(plugin) MAX = FakeSongsMenuPlugin.MAX_INVOCATIONS songs = [AudioFile({'~filename': "/tmp/%s" % x, 'artist': 'foo'}) for x in range(MAX + 1)] self.handler.handle(plugin.id, self.library, None, songs) self.failUnless(self.confirmed, ("Should have confirmed %d invocations (Max=%d)." % (len(songs), MAX)))
def test_extension(self): plugin = Plugin(self.FakeQueryPlugin) QUERY_HANDLER.plugin_enable(plugin) try: assert Query("@(name)").valid assert not Query("@(name: DIE)").search("foo") assert Query("@(name: extension body)").valid assert Query("@(name: body (with (nested) parens))").valid assert Query(r"@(name: body \\ with \) escapes)").valid finally: QUERY_HANDLER.plugin_disable(plugin)
@staticmethod def priority(): return 0.3 @property def cover(self): DummyCoverSource3.cover_call = True return None def fetch_cover(self): DummyCoverSource3.fetch_call = True return self.emit('fetch-success', DUMMY_COVER) dummy_sources = [ Plugin(s) for s in [DummyCoverSource1, DummyCoverSource2, DummyCoverSource3] ] class TCoverManager(TestCase): built_in_count = 2 def setUp(self): self.manager = CoverPluginHandler() def test_has_builtin_covers(self): self.assertEqual(len(list(self.manager.sources)), self.built_in_count) manager = CoverPluginHandler(use_built_in=False) self.assertEqual(len(list(manager.sources)), 0)
PLUGIN_ID = "fo<o" PLUGIN_NAME = "b>ar" PLUGIN_DESC = "quux" @classmethod def PluginPreferences(cls, parent): return PluginEnabledFilterCombo() class FakePlugin2(FakePlugin): @classmethod def PluginPreferences(cls, parent): return PluginWindow() PLUGIN = Plugin(FakePlugin) PLUGIN2 = Plugin(FakePlugin2) class TPluginWindow(TestCase): def setUp(self): plugins.init() config.init() def test_plugin_win(self): win = PluginWindow() win.destroy() def test_plugin_error_window(self): win = PluginErrorWindow(None, {"foo": ["bar", "quux"]}) win.destroy()
class DummyCoverSource3(CoverSourcePlugin): @staticmethod def priority(): return 0.3 @property def cover(self): DummyCoverSource3.cover_call = True return None def fetch_cover(self): DummyCoverSource3.fetch_call = True return self.emit('fetch-success', DUMMY_COVER) dummy_sources = [Plugin(s) for s in [DummyCoverSource1, DummyCoverSource2, DummyCoverSource3] ] class TCoverManager(TestCase): built_in_count = 2 def setUp(self): self.manager = CoverManager() def test_has_builtin_covers(self): self.assertEqual(len(list(self.manager.sources)), self.built_in_count) manager = CoverPluginHandler(use_built_in=False) self.assertEqual(len(list(manager.sources)), 0)
import quodlibet import sys import os # Nasty hack to allow importing of plugins... PLUGIN_DIRS = [] root = os.path.join(quodlibet.__path__[0], "ext") for entry in os.listdir(root): path = os.path.join(root, entry) if not os.path.isdir(path): continue PLUGIN_DIRS.append(path) PLUGIN_DIRS.append(os.path.join(os.path.dirname(__file__), "test_plugins")) ms = ModuleScanner(PLUGIN_DIRS) ms.rescan() plugins = {} modules = {} for name, module in ms.modules.iteritems(): for plugin in list_plugins(module.module): plugins[plugin.PLUGIN_ID] = Plugin(plugin) modules[plugin.PLUGIN_ID] = module.module class PluginTestCase(AbstractTestCase): """Base class for all plugin tests""" plugins = plugins modules = modules
from quodlibet.plugins.query import QueryPlugin, QueryPluginError from quodlibet.plugins.query import QUERY_HANDLER from quodlibet.formats import AudioFile class FakeQueryPlugin(QueryPlugin): PLUGIN_ID = 'fake_query_plugin' PLUGIN_NAME = 'fake_query' key = 'fake' def search(self, data, body): return True fake_plugin = Plugin(FakeQueryPlugin) class TQueryPlugins(PluginTestCase): def test_handler(self): self.failUnlessRaises(KeyError, QUERY_HANDLER.get_plugin, 'fake') QUERY_HANDLER.plugin_enable(fake_plugin) self.failUnless( isinstance(QUERY_HANDLER.get_plugin('fake'), FakeQueryPlugin)) QUERY_HANDLER.plugin_disable(fake_plugin) self.failUnlessRaises(KeyError, QUERY_HANDLER.get_plugin, 'fake') def test_conditional(self): if 'conditional_query' not in self.plugins: return