debian-python-lml/tests/test_plugin_manager.py

178 lines
4.7 KiB
Python

from mock import patch
from lml.plugin import PluginManager, PLUG_IN_MANAGERS
from lml.plugin import PluginInfo, _show_me_your_name
from lml.plugin import CACHED_PLUGIN_INFO
from nose.tools import eq_, raises
def test_plugin_manager():
test_plugin = 'my plugin'
manager = PluginManager(test_plugin)
assert PLUG_IN_MANAGERS[test_plugin] == manager
def test_load_me_later():
test_plugin = 'my plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info(test_plugin)
manager.load_me_later(plugin_info)
assert list(manager.registry.keys()) == [test_plugin]
@patch('lml.plugin.do_import_class')
def test_load_me_now(mock_import):
custom_class = PluginInfo
mock_import.return_value = custom_class
test_plugin = 'my plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info(test_plugin)
manager.load_me_later(plugin_info)
actual = manager.load_me_now(test_plugin)
eq_(actual, custom_class)
@raises(Exception)
@patch('lml.plugin.do_import_class')
def test_load_me_now_exception(mock_import):
custom_class = PluginInfo
mock_import.return_value = custom_class
test_plugin = 'my plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info('my')
manager.load_me_later(plugin_info)
manager.load_me_now('my', 'my special library')
@raises(Exception)
def test_load_me_now_no_key_found():
test_plugin = 'my plugin'
manager = PluginManager(test_plugin)
manager.load_me_now('my', custom_property='here')
@patch('lml.plugin.do_import_class')
def test_dynamic_load_library(mock_import):
test_plugin = 'test plugin'
custom_obj = object()
mock_import.return_value = custom_obj
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info(test_plugin)
manager.dynamic_load_library(plugin_info)
eq_(custom_obj, plugin_info.cls)
@patch('lml.plugin.do_import_class')
def test_dynamic_load_library_no_action(mock_import):
test_plugin = 'test plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info(test_plugin)
plugin_info.cls = object()
manager.dynamic_load_library(plugin_info)
assert mock_import.called is False
class TestClass:
pass
def test_register_a_plugin():
test_plugin = 'test plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info('my')
manager.register_a_plugin(TestClass, plugin_info)
eq_(plugin_info.cls, TestClass)
eq_(manager.registry['my'][0], plugin_info)
def test_get_a_plugin():
test_plugin = 'test plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info('my')
plugin_info.cls = TestClass
manager.register_a_plugin(TestClass, plugin_info)
the_plugin = manager.get_a_plugin('my')
assert isinstance(the_plugin, TestClass)
def test_register_class():
test_plugin = 'test_plugin'
plugin_info = make_me_a_plugin_info('my')
CACHED_PLUGIN_INFO[test_plugin].append(plugin_info)
manager = PluginManager(test_plugin)
assert list(manager.registry.keys()) == ['my']
def test_load_me_later_function():
from lml.plugin import _load_me_later
test_plugin = 'my plugin'
manager = PluginManager(test_plugin)
plugin_info = make_me_a_plugin_info(test_plugin)
_load_me_later(plugin_info)
assert list(manager.registry.keys()) == [test_plugin]
@raises(ImportError)
def test_do_import_cls_error():
from lml.plugin import do_import_class
do_import_class("non.exist.class")
def test_register_a_plugin_function_1():
PluginManager("test plugin")
@PluginInfo('test plugin', tags=['akey'])
class MyPlugin(object):
pass
MyPlugin()
def test_register_a_plugin_function_2():
non_existent_plugin = 'I have no plugin manager'
@PluginInfo(non_existent_plugin, tags=['akey'])
class MyPlugin(object):
pass
MyPlugin()
assert non_existent_plugin in CACHED_PLUGIN_INFO
def test_primary_key():
manager = PluginManager("test plugin2")
@PluginInfo('test plugin2', tags=['primary key', 'key 1', 'key 2'])
class MyPlugin(object):
pass
pk = manager.get_primary_key('key 1')
eq_(pk, 'primary key')
def test_dict_as_plugin_payload():
manager = PluginManager("test plugin3")
plugin = PluginInfo('test plugin3', tags=['primary key', 'key 1', 'key 2'])
plugin(dict(B=1))
instance = manager.load_me_now('key 1')
eq_(instance, dict(B=1))
def test_show_me_your_name():
class Test(object):
pass
name = _show_me_your_name(Test)
eq_(name, 'Test')
name2 = _show_me_your_name(dict(A=1))
assert 'dict' in name2
def make_me_a_plugin_info(plugin_name):
return PluginInfo(plugin_name, 'abs_path', custom='property')