diff --git a/_pytest/config.py b/_pytest/config.py index f0551697d..080e54ed5 100644 --- a/_pytest/config.py +++ b/_pytest/config.py @@ -97,6 +97,7 @@ class PytestPluginManager(PluginManager): excludefunc=exclude_pytest_names) self._warnings = [] self._plugin_distinfo = [] + self._globalplugins = [] self.addhooks(hookspec) self.register(self) if os.environ.get('PYTEST_DEBUG'): @@ -108,6 +109,19 @@ class PytestPluginManager(PluginManager): pass self.set_tracing(err.write) + def register(self, plugin, name=None, conftest=False): + ret = super(PytestPluginManager, self).register(plugin, name) + if ret and not conftest: + self._globalplugins.append(plugin) + return ret + + def unregister(self, plugin): + super(PytestPluginManager, self).unregister(plugin) + try: + self._globalplugins.remove(plugin) + except ValueError: + pass + def getplugin(self, name): if name is None: return name @@ -787,7 +801,7 @@ class Config(object): setattr(self.option, opt.dest, opt.default) def _getmatchingplugins(self, fspath): - return self.pluginmanager._plugins + \ + return self.pluginmanager._globalplugins + \ self._conftest.getconftestmodules(fspath) def pytest_load_initial_conftests(self, early_config): diff --git a/_pytest/core.py b/_pytest/core.py index 3d24ff98d..f1e781c9c 100644 --- a/_pytest/core.py +++ b/_pytest/core.py @@ -140,7 +140,6 @@ class PluginManager(object): self._excludefunc = excludefunc self._name2plugin = {} self._plugins = [] - self._conftestplugins = [] self._plugin2hookcallers = {} self.trace = TagTracer().get("pluginmanage") self._shutdown = [] @@ -205,7 +204,7 @@ class PluginManager(object): ", ".join(hook.argnames)) yield hook - def register(self, plugin, name=None, conftest=False): + def register(self, plugin, name=None): if self._name2plugin.get(name, None) == -1: return name = name or getattr(plugin, '__name__', str(id(plugin))) @@ -219,20 +218,14 @@ class PluginManager(object): hookcallers = list(self._scan_plugin(plugin)) self._plugin2hookcallers[plugin] = hookcallers self._name2plugin[name] = plugin - if conftest: - self._conftestplugins.append(plugin) - else: - self._plugins.append(plugin) + self._plugins.append(plugin) # finally make sure that the methods of the new plugin take part for hookcaller in hookcallers: hookcaller.scan_methods() return True def unregister(self, plugin): - try: - self._plugins.remove(plugin) - except KeyError: - self._conftestplugins.remove(plugin) + self._plugins.remove(plugin) for name, value in list(self._name2plugin.items()): if value == plugin: del self._name2plugin[name] @@ -247,13 +240,13 @@ class PluginManager(object): while self._shutdown: func = self._shutdown.pop() func() - self._plugins = self._conftestplugins = [] + self._plugins = [] self._name2plugin.clear() def isregistered(self, plugin, name=None): if self.getplugin(name) is not None: return True - return plugin in self._plugins or plugin in self._conftestplugins + return plugin in self._plugins def addhooks(self, module_or_class): isclass = int(inspect.isclass(module_or_class)) @@ -271,7 +264,7 @@ class PluginManager(object): %(self._prefix, module_or_class)) def getplugins(self): - return self._plugins + self._conftestplugins + return self._plugins def hasplugin(self, name): return bool(self.getplugin(name)) @@ -281,7 +274,7 @@ class PluginManager(object): def listattr(self, attrname, plugins=None): if plugins is None: - plugins = self._plugins + self._conftestplugins + plugins = self._plugins l = [] last = [] wrappers = []