1# This program is free software; you can redistribute it and/or modify
2# it under the terms of the GNU General Public License as published by
3# the Free Software Foundation; either version 2 of the License, or
4# (at your option) any later version.
5
6from tests import TestCase
7from tests.helper import realized
8
9from quodlibet import plugins
10from quodlibet import config
11
12from quodlibet.plugins import Plugin
13from quodlibet.plugins.cover import CoverSourcePlugin
14from quodlibet.qltk.models import ObjectStore
15from quodlibet.qltk.pluginwin import PluginWindow, PluginErrorWindow, \
16    PluginListView, PluginEnabledFilterCombo, PluginPreferencesContainer, \
17    EnabledType, PluginTypeFilterCombo
18
19
20class FakePlugin(object):
21    PLUGIN_ID = "fo<o"
22    PLUGIN_NAME = "b>ar"
23    PLUGIN_DESC = "quux"
24
25    @classmethod
26    def PluginPreferences(cls, parent):
27        return PluginEnabledFilterCombo()
28
29
30class FakePlugin2(FakePlugin):
31
32    @classmethod
33    def PluginPreferences(cls, parent):
34        return PluginWindow()
35
36
37PLUGIN = Plugin(FakePlugin)
38PLUGIN2 = Plugin(FakePlugin2)
39
40
41class TPluginWindow(TestCase):
42    def setUp(self):
43        plugins.init()
44        config.init()
45
46    def test_plugin_win(self):
47        win = PluginWindow()
48        win.destroy()
49
50    def test_plugin_error_window(self):
51        win = PluginErrorWindow(None, {"foo": ["bar", "quux"]})
52        win.destroy()
53
54    def test_plugin_list(self):
55        model = ObjectStore()
56        model.append([PLUGIN])
57        plist = PluginListView()
58        plist.set_model(model)
59        with realized(plist):
60            plist.select_by_plugin_id("foobar")
61        plist.destroy()
62
63    def test_enabled_filter_combo(self):
64        combo = PluginEnabledFilterCombo()
65        combo.refill(["a", "b", "c"], True)
66        self.assertEqual(combo.get_active_row()[1], EnabledType.ALL)
67        combo.destroy()
68
69    def test_type_filter_combo(self):
70        combo = PluginTypeFilterCombo()
71        # The ALL item should be first.
72        self.failUnlessEqual(combo.get_active_type(), object)
73        # Separator counts as one too
74        combo.set_active(1 + 1)
75        self.failUnlessEqual(combo.get_active_type(), CoverSourcePlugin)
76        combo.destroy()
77
78    def test_plugin_prefs(self):
79        cont = PluginPreferencesContainer()
80        cont.set_no_plugins()
81        cont.set_plugin(PLUGIN)
82        cont.set_plugin(None)
83        cont.set_plugin(PLUGIN)
84        cont.set_plugin(PLUGIN2)
85
86    def tearDown(self):
87        plugins.quit()
88        config.quit()
89