Esempio n. 1
0
 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)))
Esempio n. 2
0
 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)))
Esempio n. 3
0
 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)))
Esempio n. 4
0
 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)
Esempio n. 5
0
 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
Esempio n. 6
0
 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)
Esempio n. 7
0
 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)))
Esempio n. 8
0
 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)
Esempio n. 10
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()
Esempio n. 11
0
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)
Esempio n. 12
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
Esempio n. 13
0
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