def test_get_hookcallers(pm: PluginManager) -> None: class Hooks: @hookspec def he_method1(self): ... @hookspec def he_method2(self): ... pm.add_hookspecs(Hooks) class Plugin1: @hookimpl def he_method1(self): ... @hookimpl def he_method2(self): ... class Plugin2: @hookimpl def he_method1(self): ... class Plugin3: @hookimpl def he_method2(self): ... plugin1 = Plugin1() pm.register(plugin1) plugin2 = Plugin2() pm.register(plugin2) plugin3 = Plugin3() pm.register(plugin3) hookcallers1 = pm.get_hookcallers(plugin1) assert hookcallers1 is not None assert len(hookcallers1) == 2 hookcallers2 = pm.get_hookcallers(plugin2) assert hookcallers2 is not None assert len(hookcallers2) == 1 hookcallers3 = pm.get_hookcallers(plugin3) assert hookcallers3 is not None assert len(hookcallers3) == 1 assert hookcallers1 == hookcallers2 + hookcallers3 assert pm.get_hookcallers(object()) is None
def test_register_dynamic_attr(he_pm: PluginManager) -> None: class A: def __getattr__(self, name): if name[0] != "_": return 42 raise AttributeError() a = A() he_pm.register(a) assert not he_pm.get_hookcallers(a)
def test_register_unknown_hooks(pm: PluginManager) -> None: class Plugin1: @hookimpl def he_method1(self, arg): return arg + 1 pname = pm.register(Plugin1()) assert pname is not None class Hooks: @hookspec def he_method1(self, arg): pass pm.add_hookspecs(Hooks) # assert not pm._unverified_hooks assert pm.hook.he_method1(arg=1) == [2] hookcallers = pm.get_hookcallers(pm.get_plugin(pname)) assert hookcallers is not None assert len(hookcallers) == 1