Exemple #1
0
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)
Exemple #2
0
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
Exemple #3
0
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")])