def test_inject(): from robocode_ls_core.pluginmanager import inject pm = PluginManager() pm.register(EPFoo, FooImpl, keep_instance=True) @inject(foo=EPFoo) def m1(foo, pm): return foo assert m1(pm=pm) == pm.get_instance(EPFoo)
def test_inject_class(): from robocode_ls_core.pluginmanager import inject pm = PluginManager() pm.register(EPFoo, FooImpl, keep_instance=True) pm.register(EPBar, FooImpl, keep_instance=False) pm.register(EPBar, AnotherFooImpl, keep_instance=False) @inject(foo=EPFoo, foo2=[EPBar]) def m1(foo, foo2, pm): return foo, foo2 assert m1(pm=pm)[0] == pm.get_instance(EPFoo) assert len(m1(pm=pm)[1]) == 2
def test_plugins(): from robocode_ls_core.pluginmanager import NotRegisteredError pm = PluginManager() pm.register(EPFoo, FooImpl, keep_instance=True) with pytest.raises(InstanceAlreadyRegisteredError): pm.register(EPFoo, AnotherFooImpl, keep_instance=True) foo = pm.get_instance(EPFoo) assert pm.get_instance(EPFoo) is foo assert pm[EPFoo] is foo assert pm["EPFoo"] is foo # It's only registered in a way where the instance is kept assert not pm.get_implementations(EPFoo) assert not pm.get_implementations(EPBar) with pytest.raises(NotRegisteredError): pm.get_instance(EPBar) pm.register(EPFoo, AnotherFooImpl, context="context2", keep_instance=True) assert len(list(pm.iter_existing_instances(EPFoo))) == 1 assert isinstance(pm.get_instance(EPFoo, context="context2"), AnotherFooImpl) assert len(list(pm.iter_existing_instances(EPFoo))) == 2 assert set(pm.iter_existing_instances(EPFoo)) == set( [pm.get_instance(EPFoo, context="context2"), pm.get_instance(EPFoo)]) # Request using a string. assert len(list(pm.iter_existing_instances("EPFoo"))) == 2 assert set(pm.iter_existing_instances("EPFoo")) == set( [pm.get_instance(EPFoo, context="context2"), pm.get_instance("EPFoo")])