44
45
# TODO: Write a test for plugin decoration of commands.
46
class TestOneNamedPluginOnly(TestCaseInTempDir):
47
class TestLoadingPlugins(TestCaseInTempDir):
48
49
activeattributes = {}
50
51
def test_plugins_with_the_same_name_are_not_loaded(self):
51
# This test tests that having two plugins in different
52
# directories does not result in both being loaded.
53
# get a file name we can use which is also a valid attribute
54
# for accessing in activeattributes. - we cannot give import parameters.
52
# This test tests that having two plugins in different directories does
53
# not result in both being loaded when they have the same name. get a
54
# file name we can use which is also a valid attribute for accessing in
55
# activeattributes. - we cannot give import parameters.
55
56
tempattribute = "0"
56
57
self.failIf(tempattribute in self.activeattributes)
57
58
# set a place for the plugins to record their loading, and at the same
58
59
# time validate that the location the plugins should record to is
59
60
# valid and correct.
60
bzrlib.tests.test_plugins.TestOneNamedPluginOnly.activeattributes \
61
bzrlib.tests.test_plugins.TestLoadingPlugins.activeattributes \
61
62
[tempattribute] = []
62
63
self.failUnless(tempattribute in self.activeattributes)
63
64
# create two plugin directories
66
67
# write a plugin that will record when its loaded in the
67
68
# tempattribute list.
68
template = ("from bzrlib.tests.test_plugins import TestOneNamedPluginOnly\n"
69
"TestOneNamedPluginOnly.activeattributes[%r].append('%s')\n")
69
template = ("from bzrlib.tests.test_plugins import TestLoadingPlugins\n"
70
"TestLoadingPlugins.activeattributes[%r].append('%s')\n")
70
71
print >> file(os.path.join('first', 'plugin.py'), 'w'), template % (tempattribute, 'first')
71
72
print >> file(os.path.join('second', 'plugin.py'), 'w'), template % (tempattribute, 'second')
73
bzrlib.plugin.load_from_dirs(['first', 'second'])
74
self.assertEqual(['first'], self.activeattributes[tempattribute])
74
bzrlib.plugin.load_from_path(['first', 'second'])
75
self.assertEqual(['first'], self.activeattributes[tempattribute])
77
# remove the plugin 'plugin'
78
del self.activeattributes[tempattribute]
79
if getattr(bzrlib.plugins, 'plugin', None):
80
del bzrlib.plugins.plugin
81
self.failIf(getattr(bzrlib.plugins, 'plugin', None))
83
def test_plugins_from_different_dirs_can_demand_load(self):
84
# This test tests that having two plugins in different
85
# directories with different names allows them both to be loaded, when
86
# we do a direct import statement.
87
# Determine a file name we can use which is also a valid attribute
88
# for accessing in activeattributes. - we cannot give import parameters.
89
tempattribute = "different-dirs"
90
self.failIf(tempattribute in self.activeattributes)
91
# set a place for the plugins to record their loading, and at the same
92
# time validate that the location the plugins should record to is
94
bzrlib.tests.test_plugins.TestLoadingPlugins.activeattributes \
96
self.failUnless(tempattribute in self.activeattributes)
97
# create two plugin directories
100
# write plugins that will record when they are loaded in the
101
# tempattribute list.
102
template = ("from bzrlib.tests.test_plugins import TestLoadingPlugins\n"
103
"TestLoadingPlugins.activeattributes[%r].append('%s')\n")
104
print >> file(os.path.join('first', 'pluginone.py'), 'w'), template % (tempattribute, 'first')
105
print >> file(os.path.join('second', 'plugintwo.py'), 'w'), template % (tempattribute, 'second')
106
oldpath = bzrlib.plugins.__path__
108
bzrlib.plugins.__path__ = ['first', 'second']
109
exec "import bzrlib.plugins.pluginone"
110
self.assertEqual(['first'], self.activeattributes[tempattribute])
111
exec "import bzrlib.plugins.plugintwo"
112
self.assertEqual(['first', 'second'],
113
self.activeattributes[tempattribute])
76
115
# remove the plugin 'plugin'
77
116
del self.activeattributes[tempattribute]
89
128
# write a plugin that _cannot_ fail to load.
90
129
print >> file('plugin.py', 'w'), ""
92
bzrlib.plugin.load_from_dirs(['.'])
131
bzrlib.plugin.load_from_path(['.'])
93
132
self.failUnless('plugin' in bzrlib.plugin.all_plugins())
94
133
self.failUnless(getattr(bzrlib.plugins, 'plugin', None))
95
134
self.assertEqual(bzrlib.plugin.all_plugins()['plugin'],
96
135
bzrlib.plugins.plugin)
98
137
# remove the plugin 'plugin'
138
if 'bzrlib.plugins.plugin' in sys.modules:
139
del sys.modules['bzrlib.plugins.plugin']
99
140
if getattr(bzrlib.plugins, 'plugin', None):
100
141
del bzrlib.plugins.plugin
101
142
self.failIf(getattr(bzrlib.plugins, 'plugin', None))
184
225
def test_load_package(self):
185
226
self.make_zipped_plugin('./test.zip', 'ziplug/__init__.py')
186
227
self.check_plugin_load('./test.zip', 'ziplug')
230
class TestSetPluginsPath(TestCase):
232
def test_set_plugins_path(self):
233
"""set_plugins_path should set the module __path__ correctly."""
234
old_path = bzrlib.plugins.__path__
236
bzrlib.plugins.__path__ = []
237
expected_path = bzrlib.plugin.set_plugins_path()
238
self.assertEqual(expected_path, bzrlib.plugins.__path__)
240
bzrlib.plugins.__path__ = old_path