39
40
class TestPluginMixin(object):
42
def create_plugin(self, name, source='', dir='.', file_name=None):
44
file_name = name + '.py'
45
# 'source' must not fail to load
46
path = osutils.pathjoin(dir, file_name)
48
self.addCleanup(os.unlink, path)
50
f.write(source + '\n')
54
def create_plugin_package(self, name, source='', dir='.'):
55
plugin_dir = osutils.pathjoin(dir, name)
57
self.addCleanup(osutils.rmtree, plugin_dir)
58
self.create_plugin(name, source, dir=plugin_dir,
59
file_name='__init__.py')
41
61
def _unregister_plugin(self, name):
42
62
"""Remove the plugin from sys.modules and the bzrlib namespace."""
43
63
py_name = 'bzrlib.plugins.%s' % name
47
67
delattr(bzrlib.plugins, name)
49
69
def assertPluginUnknown(self, name):
50
self.failIf(getattr(bzrlib.plugins, 'plugin', None) is not None)
70
self.failIf(getattr(bzrlib.plugins, name, None) is not None)
51
71
self.failIf('bzrlib.plugins.%s' % name in sys.modules)
53
73
def assertPluginKnown(self, name):
54
self.failUnless(getattr(bzrlib.plugins, 'plugin', None) is not None)
74
self.failUnless(getattr(bzrlib.plugins, name, None) is not None)
55
75
self.failUnless('bzrlib.plugins.%s' % name in sys.modules)
723
743
self.check_path(['+foo', '-bar', self.core, self.site],
724
744
['+foo', '-bar'])
747
class TestDisablePlugin(tests.TestCaseInTempDir, TestPluginMixin):
750
super(TestDisablePlugin, self).setUp()
751
self.create_plugin_package('test_foo')
752
# Make sure we don't pollute the plugins namespace
753
self.overrideAttr(plugins, '__path__')
754
# Be paranoid in case a test fail
755
self.addCleanup(self._unregister_plugin, 'test_foo')
757
def test_cannot_import(self):
758
osutils.set_or_unset_env('BZR_DISABLE_PLUGINS', 'test_foo')
759
plugin.set_plugins_path(['.'])
761
import bzrlib.plugins.test_foo
764
self.assertPluginUnknown('test_foo')
766
def test_regular_load(self):
767
self.overrideAttr(plugin, '_loaded', False)
768
plugin.load_plugins(['.'])
769
self.assertPluginKnown('test_foo')
771
def test_not_loaded(self):
773
def captured_warning(*args, **kwargs):
774
self.warnings.append((args, kwargs))
775
self.overrideAttr(trace, 'warning', captured_warning)
776
self.overrideAttr(plugin, '_loaded', False)
777
osutils.set_or_unset_env('BZR_DISABLE_PLUGINS', 'test_foo')
778
plugin.load_plugins(plugin.set_plugins_path(['.']))
779
self.assertPluginUnknown('test_foo')
780
# Make sure we don't warn about the plugin ImportError since this has
781
# been *requested* by the user.
782
self.assertLength(0, self.warnings)