[svn r63894] grand renaming on plugin-related mostly internal objects.
--HG-- branch : trunk
This commit is contained in:
parent
69aaef64de
commit
5d271b2bde
|
@ -25,8 +25,8 @@ version = "1.0.0b1"
|
||||||
|
|
||||||
initpkg(__name__,
|
initpkg(__name__,
|
||||||
description = "pylib and py.test: agile development and test support library",
|
description = "pylib and py.test: agile development and test support library",
|
||||||
revision = int('$LastChangedRevision: 63869 $'.split(':')[1][:-1]),
|
revision = int('$LastChangedRevision: 63894 $'.split(':')[1][:-1]),
|
||||||
lastchangedate = '$LastChangedDate: 2009-04-08 19:50:14 +0200 (Wed, 08 Apr 2009) $',
|
lastchangedate = '$LastChangedDate: 2009-04-09 16:03:09 +0200 (Thu, 09 Apr 2009) $',
|
||||||
version = version,
|
version = version,
|
||||||
url = "http://pylib.org",
|
url = "http://pylib.org",
|
||||||
download_url = "http://codespeak.net/py/%s/download.html" % version,
|
download_url = "http://codespeak.net/py/%s/download.html" % version,
|
||||||
|
@ -54,9 +54,9 @@ initpkg(__name__,
|
||||||
exportdefs = {
|
exportdefs = {
|
||||||
|
|
||||||
# py lib events and plugins
|
# py lib events and plugins
|
||||||
'_com.PyPlugins' : ('./_com.py', 'PyPlugins'),
|
'_com.Registry' : ('./_com.py', 'Registry'),
|
||||||
'_com.MultiCall' : ('./_com.py', 'MultiCall'),
|
'_com.MultiCall' : ('./_com.py', 'MultiCall'),
|
||||||
'_com.pyplugins' : ('./_com.py', 'pyplugins'),
|
'_com.comregistry' : ('./_com.py', 'comregistry'),
|
||||||
'_com.PluginAPI' : ('./_com.py', 'PluginAPI'),
|
'_com.PluginAPI' : ('./_com.py', 'PluginAPI'),
|
||||||
|
|
||||||
# py lib cmdline tools
|
# py lib cmdline tools
|
||||||
|
@ -70,7 +70,7 @@ initpkg(__name__,
|
||||||
|
|
||||||
# helpers for use from test functions or collectors
|
# helpers for use from test functions or collectors
|
||||||
'test.__doc__' : ('./test/__init__.py', '__doc__'),
|
'test.__doc__' : ('./test/__init__.py', '__doc__'),
|
||||||
'test._PytestPlugins' : ('./test/pytestplugin.py', 'PytestPlugins'),
|
'test._PluginManager' : ('./test/pytestplugin.py', 'PluginManager'),
|
||||||
'test.raises' : ('./test/outcome.py', 'raises'),
|
'test.raises' : ('./test/outcome.py', 'raises'),
|
||||||
'test.mark' : ('./test/outcome.py', 'mark',),
|
'test.mark' : ('./test/outcome.py', 'mark',),
|
||||||
'test.deprecated_call' : ('./test/outcome.py', 'deprecated_call'),
|
'test.deprecated_call' : ('./test/outcome.py', 'deprecated_call'),
|
||||||
|
@ -199,6 +199,6 @@ initpkg(__name__,
|
||||||
})
|
})
|
||||||
|
|
||||||
import py
|
import py
|
||||||
py._com.pyplugins.consider_env()
|
py._com.comregistry.consider_env()
|
||||||
|
|
||||||
|
|
||||||
|
|
22
py/_com.py
22
py/_com.py
|
@ -62,7 +62,7 @@ class MultiCall:
|
||||||
self._ex1 = True
|
self._ex1 = True
|
||||||
|
|
||||||
|
|
||||||
class PyPlugins:
|
class Registry:
|
||||||
"""
|
"""
|
||||||
Manage Plugins: Load plugins and manage calls to plugins.
|
Manage Plugins: Load plugins and manage calls to plugins.
|
||||||
"""
|
"""
|
||||||
|
@ -71,7 +71,7 @@ class PyPlugins:
|
||||||
def __init__(self, plugins=None):
|
def __init__(self, plugins=None):
|
||||||
if plugins is None:
|
if plugins is None:
|
||||||
plugins = []
|
plugins = []
|
||||||
self._plugins = plugins
|
self.plugins = plugins
|
||||||
|
|
||||||
def import_module(self, modspec):
|
def import_module(self, modspec):
|
||||||
# XXX allow modspec to specify version / lookup
|
# XXX allow modspec to specify version / lookup
|
||||||
|
@ -99,22 +99,22 @@ class PyPlugins:
|
||||||
def register(self, plugin):
|
def register(self, plugin):
|
||||||
assert not isinstance(plugin, str)
|
assert not isinstance(plugin, str)
|
||||||
self.call_each("pytest_plugin_registered", plugin)
|
self.call_each("pytest_plugin_registered", plugin)
|
||||||
self._plugins.append(plugin)
|
self.plugins.append(plugin)
|
||||||
|
|
||||||
def unregister(self, plugin):
|
def unregister(self, plugin):
|
||||||
self.call_each("pytest_plugin_unregistered", plugin)
|
self.call_each("pytest_plugin_unregistered", plugin)
|
||||||
self._plugins.remove(plugin)
|
self.plugins.remove(plugin)
|
||||||
|
|
||||||
def getplugins(self):
|
def getplugins(self):
|
||||||
return list(self._plugins)
|
return list(self.plugins)
|
||||||
|
|
||||||
def isregistered(self, plugin):
|
def isregistered(self, plugin):
|
||||||
return plugin in self._plugins
|
return plugin in self.plugins
|
||||||
|
|
||||||
def listattr(self, attrname, plugins=None, extra=(), reverse=False):
|
def listattr(self, attrname, plugins=None, extra=(), reverse=False):
|
||||||
l = []
|
l = []
|
||||||
if plugins is None:
|
if plugins is None:
|
||||||
plugins = self._plugins
|
plugins = self.plugins
|
||||||
if extra:
|
if extra:
|
||||||
plugins += list(extra)
|
plugins += list(extra)
|
||||||
for plugin in plugins:
|
for plugin in plugins:
|
||||||
|
@ -143,15 +143,15 @@ class PluginAPI:
|
||||||
def __init__(self, apiclass, plugins=None):
|
def __init__(self, apiclass, plugins=None):
|
||||||
self._apiclass = apiclass
|
self._apiclass = apiclass
|
||||||
if plugins is None:
|
if plugins is None:
|
||||||
plugins = pyplugins
|
plugins = comregistry
|
||||||
self._plugins = plugins
|
self.plugins = plugins
|
||||||
for name, method in vars(apiclass).items():
|
for name, method in vars(apiclass).items():
|
||||||
if name[:2] != "__":
|
if name[:2] != "__":
|
||||||
firstresult = getattr(method, 'firstresult', False)
|
firstresult = getattr(method, 'firstresult', False)
|
||||||
mm = ApiCall(plugins, name, firstresult=firstresult)
|
mm = ApiCall(plugins, name, firstresult=firstresult)
|
||||||
setattr(self, name, mm)
|
setattr(self, name, mm)
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<PluginAPI %r %r>" %(self._apiclass, self._plugins)
|
return "<PluginAPI %r %r>" %(self._apiclass, self.plugins)
|
||||||
|
|
||||||
class ApiCall:
|
class ApiCall:
|
||||||
def __init__(self, plugins, name, firstresult):
|
def __init__(self, plugins, name, firstresult):
|
||||||
|
@ -168,4 +168,4 @@ class ApiCall:
|
||||||
#print "making multicall", self
|
#print "making multicall", self
|
||||||
return mc.execute(firstresult=self.firstresult)
|
return mc.execute(firstresult=self.firstresult)
|
||||||
|
|
||||||
pyplugins = PyPlugins()
|
comregistry = Registry()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
import py
|
import py
|
||||||
import os
|
import os
|
||||||
from py._com import PyPlugins, MultiCall
|
from py._com import Registry, MultiCall
|
||||||
from py._com import PluginAPI
|
from py._com import PluginAPI
|
||||||
|
|
||||||
pytest_plugins = "xfail"
|
pytest_plugins = "xfail"
|
||||||
|
@ -75,13 +75,13 @@ class TestMultiCall:
|
||||||
#assert res == 10
|
#assert res == 10
|
||||||
|
|
||||||
|
|
||||||
class TestPyPlugins:
|
class TestRegistry:
|
||||||
def test_MultiCall(self):
|
def test_MultiCall(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
assert hasattr(plugins, "MultiCall")
|
assert hasattr(plugins, "MultiCall")
|
||||||
|
|
||||||
def test_register(self):
|
def test_register(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class MyPlugin:
|
class MyPlugin:
|
||||||
pass
|
pass
|
||||||
my = MyPlugin()
|
my = MyPlugin()
|
||||||
|
@ -98,7 +98,7 @@ class TestPyPlugins:
|
||||||
assert plugins.getplugins() == [my2]
|
assert plugins.getplugins() == [my2]
|
||||||
|
|
||||||
def test_call_methods(self):
|
def test_call_methods(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class api1:
|
class api1:
|
||||||
def m(self, __call__, x):
|
def m(self, __call__, x):
|
||||||
return x
|
return x
|
||||||
|
@ -121,7 +121,7 @@ class TestPyPlugins:
|
||||||
assert plugins.call_plugin(api2(), 't') is None
|
assert plugins.call_plugin(api2(), 't') is None
|
||||||
|
|
||||||
def test_call_none_is_no_result(self):
|
def test_call_none_is_no_result(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class api1:
|
class api1:
|
||||||
def m(self):
|
def m(self):
|
||||||
return None
|
return None
|
||||||
|
@ -135,7 +135,7 @@ class TestPyPlugins:
|
||||||
assert plugins.call_each('m') == [41]
|
assert plugins.call_each('m') == [41]
|
||||||
|
|
||||||
def test_call_noneasresult(self):
|
def test_call_noneasresult(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class api1:
|
class api1:
|
||||||
def m(self, __call__):
|
def m(self, __call__):
|
||||||
return __call__.NONEASRESULT
|
return __call__.NONEASRESULT
|
||||||
|
@ -145,7 +145,7 @@ class TestPyPlugins:
|
||||||
assert plugins.call_each('m') == [None, None]
|
assert plugins.call_each('m') == [None, None]
|
||||||
|
|
||||||
def test_listattr(self):
|
def test_listattr(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class api1:
|
class api1:
|
||||||
x = 41
|
x = 41
|
||||||
class api2:
|
class api2:
|
||||||
|
@ -161,12 +161,12 @@ class TestPyPlugins:
|
||||||
assert l == [43, 42, 41]
|
assert l == [43, 42, 41]
|
||||||
|
|
||||||
def test_consider_env(self, monkeypatch):
|
def test_consider_env(self, monkeypatch):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
monkeypatch.setitem(os.environ, 'PYLIB', "unknownconsider_env")
|
monkeypatch.setitem(os.environ, 'PYLIB', "unknownconsider_env")
|
||||||
py.test.raises(ImportError, "plugins.consider_env()")
|
py.test.raises(ImportError, "plugins.consider_env()")
|
||||||
|
|
||||||
def test_consider_module(self):
|
def test_consider_module(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
mod = py.std.new.module("temp")
|
mod = py.std.new.module("temp")
|
||||||
mod.pylib = ["xxx nomod"]
|
mod.pylib = ["xxx nomod"]
|
||||||
excinfo = py.test.raises(ImportError, "plugins.consider_module(mod)")
|
excinfo = py.test.raises(ImportError, "plugins.consider_module(mod)")
|
||||||
|
@ -174,10 +174,10 @@ class TestPyPlugins:
|
||||||
plugins.consider_module(mod)
|
plugins.consider_module(mod)
|
||||||
|
|
||||||
def test_api_and_defaults():
|
def test_api_and_defaults():
|
||||||
assert isinstance(py._com.pyplugins, PyPlugins)
|
assert isinstance(py._com.comregistry, Registry)
|
||||||
|
|
||||||
def test_subprocess_env(testdir, monkeypatch):
|
def test_subprocess_env(testdir, monkeypatch):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
old = py.path.local(py.__file__).dirpath().dirpath().chdir()
|
old = py.path.local(py.__file__).dirpath().dirpath().chdir()
|
||||||
try:
|
try:
|
||||||
monkeypatch.setitem(os.environ, "PYLIB", 'unknownconsider')
|
monkeypatch.setitem(os.environ, "PYLIB", 'unknownconsider')
|
||||||
|
@ -191,7 +191,7 @@ def test_subprocess_env(testdir, monkeypatch):
|
||||||
|
|
||||||
class TestPluginAPI:
|
class TestPluginAPI:
|
||||||
def test_happypath(self):
|
def test_happypath(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class Api:
|
class Api:
|
||||||
def hello(self, arg):
|
def hello(self, arg):
|
||||||
pass
|
pass
|
||||||
|
@ -208,7 +208,7 @@ class TestPluginAPI:
|
||||||
assert not hasattr(mcm, 'world')
|
assert not hasattr(mcm, 'world')
|
||||||
|
|
||||||
def test_firstresult(self):
|
def test_firstresult(self):
|
||||||
plugins = PyPlugins()
|
plugins = Registry()
|
||||||
class Api:
|
class Api:
|
||||||
def hello(self, arg): pass
|
def hello(self, arg): pass
|
||||||
hello.firstresult = True
|
hello.firstresult = True
|
||||||
|
@ -224,4 +224,4 @@ class TestPluginAPI:
|
||||||
def test_default_plugins(self):
|
def test_default_plugins(self):
|
||||||
class Api: pass
|
class Api: pass
|
||||||
mcm = PluginAPI(apiclass=Api)
|
mcm = PluginAPI(apiclass=Api)
|
||||||
assert mcm._plugins == py._com.pyplugins
|
assert mcm.plugins == py._com.comregistry
|
||||||
|
|
|
@ -4,9 +4,9 @@ mypath = py.magic.autopath()
|
||||||
|
|
||||||
class TestWarningPlugin:
|
class TestWarningPlugin:
|
||||||
def setup_method(self, method):
|
def setup_method(self, method):
|
||||||
self.bus = py._com.PyPlugins()
|
self.pluginmanager = py._com.Registry()
|
||||||
self.wb = WarningPlugin(self.bus)
|
self.wb = WarningPlugin(self.pluginmanager)
|
||||||
self.bus.register(self)
|
self.pluginmanager.register(self)
|
||||||
self.warnings = []
|
self.warnings = []
|
||||||
|
|
||||||
def pyevent__WARNING(self, warning):
|
def pyevent__WARNING(self, warning):
|
||||||
|
@ -46,4 +46,4 @@ class TestWarningPlugin:
|
||||||
|
|
||||||
def test_default():
|
def test_default():
|
||||||
from py.__.misc.warn import APIWARN
|
from py.__.misc.warn import APIWARN
|
||||||
assert py._com.pyplugins.isregistered(APIWARN.im_self)
|
assert py._com.comregistry.isregistered(APIWARN.im_self)
|
||||||
|
|
|
@ -10,12 +10,12 @@ class Warning(py.std.exceptions.DeprecationWarning):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.msg
|
return self.msg
|
||||||
|
|
||||||
# XXX probably only apiwarn() + py._com.pyplugins forwarding
|
# XXX probably only apiwarn() + py._com.comregistry forwarding
|
||||||
# warn_explicit is actually needed
|
# warn_explicit is actually needed
|
||||||
|
|
||||||
class WarningPlugin(object):
|
class WarningPlugin(object):
|
||||||
def __init__(self, bus):
|
def __init__(self, bus):
|
||||||
self.bus = bus
|
self.pluginmanager = bus
|
||||||
bus.register(self)
|
bus.register(self)
|
||||||
|
|
||||||
def pyevent__WARNING(self, warning):
|
def pyevent__WARNING(self, warning):
|
||||||
|
@ -62,8 +62,8 @@ class WarningPlugin(object):
|
||||||
filename = module
|
filename = module
|
||||||
path = py.path.local(filename)
|
path = py.path.local(filename)
|
||||||
warning = Warning(msg, path, lineno)
|
warning = Warning(msg, path, lineno)
|
||||||
self.bus.call_each("pyevent__WARNING", warning)
|
self.pluginmanager.call_each("pyevent__WARNING", warning)
|
||||||
|
|
||||||
# singleton api warner for py lib
|
# singleton api warner for py lib
|
||||||
apiwarner = WarningPlugin(py._com.pyplugins)
|
apiwarner = WarningPlugin(py._com.comregistry)
|
||||||
APIWARN = apiwarner.apiwarn
|
APIWARN = apiwarner.apiwarn
|
||||||
|
|
|
@ -11,10 +11,10 @@ def main(args=None):
|
||||||
config = py.test.config
|
config = py.test.config
|
||||||
try:
|
try:
|
||||||
config.parse(args)
|
config.parse(args)
|
||||||
config.pytestplugins.do_configure(config)
|
config.pluginmanager.do_configure(config)
|
||||||
session = config.initsession()
|
session = config.initsession()
|
||||||
exitstatus = session.main()
|
exitstatus = session.main()
|
||||||
config.pytestplugins.do_unconfigure(config)
|
config.pluginmanager.do_unconfigure(config)
|
||||||
raise SystemExit(exitstatus)
|
raise SystemExit(exitstatus)
|
||||||
except config.Error, e:
|
except config.Error, e:
|
||||||
py.std.sys.stderr.write("ERROR: %s\n" %(e.args[0],))
|
py.std.sys.stderr.write("ERROR: %s\n" %(e.args[0],))
|
||||||
|
|
|
@ -443,7 +443,7 @@ class Directory(FSCollector):
|
||||||
def consider_dir(self, path, usefilters=None):
|
def consider_dir(self, path, usefilters=None):
|
||||||
if usefilters is not None:
|
if usefilters is not None:
|
||||||
APIWARN("0.99", "usefilters argument not needed")
|
APIWARN("0.99", "usefilters argument not needed")
|
||||||
res = self.config.pytestplugins.call_firstresult(
|
res = self.config.pluginmanager.call_firstresult(
|
||||||
'pytest_collect_recurse', path=path, parent=self)
|
'pytest_collect_recurse', path=path, parent=self)
|
||||||
if res is None or res:
|
if res is None or res:
|
||||||
return self.config.api.pytest_collect_directory(
|
return self.config.api.pytest_collect_directory(
|
||||||
|
|
|
@ -28,25 +28,24 @@ class Config(object):
|
||||||
basetemp = None
|
basetemp = None
|
||||||
_sessionclass = None
|
_sessionclass = None
|
||||||
|
|
||||||
def __init__(self, pytestplugins=None, topdir=None):
|
def __init__(self, pluginmanager=None, topdir=None):
|
||||||
self.option = CmdOptions()
|
self.option = CmdOptions()
|
||||||
self.topdir = topdir
|
self.topdir = topdir
|
||||||
self._parser = parseopt.Parser(
|
self._parser = parseopt.Parser(
|
||||||
usage="usage: %prog [options] [file_or_dir] [file_or_dir] [...]",
|
usage="usage: %prog [options] [file_or_dir] [file_or_dir] [...]",
|
||||||
processopt=self._processopt,
|
processopt=self._processopt,
|
||||||
)
|
)
|
||||||
if pytestplugins is None:
|
if pluginmanager is None:
|
||||||
pytestplugins = py.test._PytestPlugins()
|
pluginmanager = py.test._PluginManager()
|
||||||
assert isinstance(pytestplugins, py.test._PytestPlugins)
|
assert isinstance(pluginmanager, py.test._PluginManager)
|
||||||
self.bus = pytestplugins.pyplugins
|
self.pluginmanager = pluginmanager
|
||||||
self.pytestplugins = pytestplugins
|
|
||||||
self._conftest = Conftest(onimport=self._onimportconftest)
|
self._conftest = Conftest(onimport=self._onimportconftest)
|
||||||
self._setupstate = SetupState()
|
self._setupstate = SetupState()
|
||||||
self.api = pytestplugins.api
|
self.api = pluginmanager.api
|
||||||
|
|
||||||
def _onimportconftest(self, conftestmodule):
|
def _onimportconftest(self, conftestmodule):
|
||||||
self.trace("loaded conftestmodule %r" %(conftestmodule,))
|
self.trace("loaded conftestmodule %r" %(conftestmodule,))
|
||||||
self.pytestplugins.consider_conftest(conftestmodule)
|
self.pluginmanager.consider_conftest(conftestmodule)
|
||||||
|
|
||||||
def trace(self, msg):
|
def trace(self, msg):
|
||||||
if getattr(self.option, 'traceconfig', None):
|
if getattr(self.option, 'traceconfig', None):
|
||||||
|
@ -76,8 +75,8 @@ class Config(object):
|
||||||
|
|
||||||
def _preparse(self, args):
|
def _preparse(self, args):
|
||||||
self._conftest.setinitial(args)
|
self._conftest.setinitial(args)
|
||||||
self.pytestplugins.consider_env()
|
self.pluginmanager.consider_env()
|
||||||
self.pytestplugins.do_addoption(self._parser)
|
self.pluginmanager.do_addoption(self._parser)
|
||||||
|
|
||||||
def parse(self, args):
|
def parse(self, args):
|
||||||
""" parse cmdline arguments into this config object.
|
""" parse cmdline arguments into this config object.
|
||||||
|
@ -108,7 +107,7 @@ class Config(object):
|
||||||
# * registering to py lib plugins
|
# * registering to py lib plugins
|
||||||
# * setting py.test.config
|
# * setting py.test.config
|
||||||
self.__init__(
|
self.__init__(
|
||||||
pytestplugins=py.test._PytestPlugins(py._com.pyplugins),
|
pluginmanager=py.test._PluginManager(py._com.comregistry),
|
||||||
topdir=py.path.local(),
|
topdir=py.path.local(),
|
||||||
)
|
)
|
||||||
# we have to set py.test.config because preparse()
|
# we have to set py.test.config because preparse()
|
||||||
|
@ -339,6 +338,6 @@ def gettopdir(args):
|
||||||
|
|
||||||
# this is the one per-process instance of py.test configuration
|
# this is the one per-process instance of py.test configuration
|
||||||
config_per_process = Config(
|
config_per_process = Config(
|
||||||
pytestplugins=py.test._PytestPlugins(py._com.pyplugins)
|
pluginmanager=py.test._PluginManager(py._com.comregistry)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -121,11 +121,11 @@ class DSession(Session):
|
||||||
loopstate.exitstatus = outcome.EXIT_TESTSFAILED
|
loopstate.exitstatus = outcome.EXIT_TESTSFAILED
|
||||||
else:
|
else:
|
||||||
loopstate.exitstatus = outcome.EXIT_OK
|
loopstate.exitstatus = outcome.EXIT_OK
|
||||||
#self.config.bus.unregister(loopstate)
|
#self.config.pluginmanager.unregister(loopstate)
|
||||||
|
|
||||||
def _initloopstate(self, colitems):
|
def _initloopstate(self, colitems):
|
||||||
loopstate = LoopState(self, colitems)
|
loopstate = LoopState(self, colitems)
|
||||||
self.config.bus.register(loopstate)
|
self.config.pluginmanager.register(loopstate)
|
||||||
return loopstate
|
return loopstate
|
||||||
|
|
||||||
def loop(self, colitems):
|
def loop(self, colitems):
|
||||||
|
@ -140,9 +140,9 @@ class DSession(Session):
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
exitstatus = outcome.EXIT_INTERRUPTED
|
exitstatus = outcome.EXIT_INTERRUPTED
|
||||||
except:
|
except:
|
||||||
self.config.pytestplugins.notify_exception()
|
self.config.pluginmanager.notify_exception()
|
||||||
exitstatus = outcome.EXIT_INTERNALERROR
|
exitstatus = outcome.EXIT_INTERNALERROR
|
||||||
self.config.bus.unregister(loopstate)
|
self.config.pluginmanager.unregister(loopstate)
|
||||||
if exitstatus == 0 and self._testsfailed:
|
if exitstatus == 0 and self._testsfailed:
|
||||||
exitstatus = outcome.EXIT_TESTSFAILED
|
exitstatus = outcome.EXIT_TESTSFAILED
|
||||||
return exitstatus
|
return exitstatus
|
||||||
|
|
|
@ -174,7 +174,7 @@ class TestDSession:
|
||||||
session.senditems_load([item1, item2])
|
session.senditems_load([item1, item2])
|
||||||
node = session.item2nodes[item1] [0]
|
node = session.item2nodes[item1] [0]
|
||||||
session.queueevent("pytest_testnodedown", node, None)
|
session.queueevent("pytest_testnodedown", node, None)
|
||||||
evrec = testdir.geteventrecorder(session.bus)
|
evrec = testdir.geteventrecorder(session.pluginmanager)
|
||||||
print session.item2nodes
|
print session.item2nodes
|
||||||
loopstate = session._initloopstate([])
|
loopstate = session._initloopstate([])
|
||||||
session.loop_once(loopstate)
|
session.loop_once(loopstate)
|
||||||
|
@ -261,7 +261,7 @@ class TestDSession:
|
||||||
session.addnode(node)
|
session.addnode(node)
|
||||||
loopstate = session._initloopstate([])
|
loopstate = session._initloopstate([])
|
||||||
loopstate.shuttingdown = True
|
loopstate.shuttingdown = True
|
||||||
evrec = testdir.geteventrecorder(session.bus)
|
evrec = testdir.geteventrecorder(session.pluginmanager)
|
||||||
session.queueevent("pytest_itemtestreport", rep=run(item, node))
|
session.queueevent("pytest_itemtestreport", rep=run(item, node))
|
||||||
session.loop_once(loopstate)
|
session.loop_once(loopstate)
|
||||||
assert not evrec.getcalls("pytest_testnodedown")
|
assert not evrec.getcalls("pytest_testnodedown")
|
||||||
|
@ -282,7 +282,7 @@ class TestDSession:
|
||||||
dsel = session.filteritems([modcol])
|
dsel = session.filteritems([modcol])
|
||||||
assert dsel == [modcol]
|
assert dsel == [modcol]
|
||||||
items = modcol.collect()
|
items = modcol.collect()
|
||||||
callrecorder = testdir.geteventrecorder(session.bus).callrecorder
|
callrecorder = testdir.geteventrecorder(session.pluginmanager).callrecorder
|
||||||
remaining = session.filteritems(items)
|
remaining = session.filteritems(items)
|
||||||
assert remaining == []
|
assert remaining == []
|
||||||
|
|
||||||
|
@ -355,7 +355,7 @@ class TestDSession:
|
||||||
""")
|
""")
|
||||||
config = testdir.parseconfig('-d', p1, '--tx=popen')
|
config = testdir.parseconfig('-d', p1, '--tx=popen')
|
||||||
dsession = DSession(config)
|
dsession = DSession(config)
|
||||||
callrecorder = testdir.geteventrecorder(config.bus).callrecorder
|
callrecorder = testdir.geteventrecorder(config.pluginmanager).callrecorder
|
||||||
dsession.main([config.getfsnode(p1)])
|
dsession.main([config.getfsnode(p1)])
|
||||||
rep = callrecorder.popcall("pytest_itemtestreport").rep
|
rep = callrecorder.popcall("pytest_itemtestreport").rep
|
||||||
assert rep.passed
|
assert rep.passed
|
||||||
|
|
|
@ -104,7 +104,7 @@ class TestNodeManager:
|
||||||
config = py.test.config._reparse([source, '--debug'])
|
config = py.test.config._reparse([source, '--debug'])
|
||||||
assert config.option.debug
|
assert config.option.debug
|
||||||
nodemanager = NodeManager(config, specs)
|
nodemanager = NodeManager(config, specs)
|
||||||
sorter = testdir.geteventrecorder(config.bus).callrecorder
|
sorter = testdir.geteventrecorder(config.pluginmanager).callrecorder
|
||||||
nodemanager.setup_nodes(putevent=[].append)
|
nodemanager.setup_nodes(putevent=[].append)
|
||||||
for spec in nodemanager.gwmanager.specs:
|
for spec in nodemanager.gwmanager.specs:
|
||||||
l = sorter.getcalls("pytest_trace")
|
l = sorter.getcalls("pytest_trace")
|
||||||
|
|
|
@ -35,7 +35,7 @@ class MySetup:
|
||||||
self.pyfuncitem = pyfuncitem
|
self.pyfuncitem = pyfuncitem
|
||||||
|
|
||||||
def geteventargs(self, eventname, timeout=2.0):
|
def geteventargs(self, eventname, timeout=2.0):
|
||||||
eq = EventQueue(self.config.bus, self.queue)
|
eq = EventQueue(self.config.pluginmanager, self.queue)
|
||||||
return eq.geteventargs(eventname, timeout=timeout)
|
return eq.geteventargs(eventname, timeout=timeout)
|
||||||
|
|
||||||
def makenode(self, config=None):
|
def makenode(self, config=None):
|
||||||
|
|
|
@ -61,7 +61,7 @@ class TXNode(object):
|
||||||
except:
|
except:
|
||||||
excinfo = py.code.ExceptionInfo()
|
excinfo = py.code.ExceptionInfo()
|
||||||
print "!" * 20, excinfo
|
print "!" * 20, excinfo
|
||||||
self.config.pytestplugins.notify_exception(excinfo)
|
self.config.pluginmanager.notify_exception(excinfo)
|
||||||
|
|
||||||
def send(self, item):
|
def send(self, item):
|
||||||
assert item is not None
|
assert item is not None
|
||||||
|
@ -112,8 +112,8 @@ class SlaveNode(object):
|
||||||
self.config, basetemp = channel.receive()
|
self.config, basetemp = channel.receive()
|
||||||
if basetemp:
|
if basetemp:
|
||||||
self.config.basetemp = py.path.local(basetemp)
|
self.config.basetemp = py.path.local(basetemp)
|
||||||
self.config.pytestplugins.do_configure(self.config)
|
self.config.pluginmanager.do_configure(self.config)
|
||||||
self.config.pytestplugins.register(self)
|
self.config.pluginmanager.register(self)
|
||||||
self.sendevent("slaveready")
|
self.sendevent("slaveready")
|
||||||
try:
|
try:
|
||||||
while 1:
|
while 1:
|
||||||
|
@ -123,9 +123,9 @@ class SlaveNode(object):
|
||||||
break
|
break
|
||||||
if isinstance(task, list):
|
if isinstance(task, list):
|
||||||
for item in task:
|
for item in task:
|
||||||
item.config.pytestplugins.do_itemrun(item)
|
item.config.pluginmanager.do_itemrun(item)
|
||||||
else:
|
else:
|
||||||
task.config.pytestplugins.do_itemrun(item=task)
|
task.config.pluginmanager.do_itemrun(item=task)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -116,7 +116,7 @@ def slave_runsession(channel, config, fullwidth, hasmarkup):
|
||||||
config.option.looponfail = False
|
config.option.looponfail = False
|
||||||
config.option.usepdb = False
|
config.option.usepdb = False
|
||||||
trails = channel.receive()
|
trails = channel.receive()
|
||||||
config.pytestplugins.do_configure(config)
|
config.pluginmanager.do_configure(config)
|
||||||
DEBUG("SLAVE: initsession()")
|
DEBUG("SLAVE: initsession()")
|
||||||
session = config.initsession()
|
session = config.initsession()
|
||||||
# XXX configure the reporter object's terminal writer more directly
|
# XXX configure the reporter object's terminal writer more directly
|
||||||
|
@ -143,7 +143,7 @@ def slave_runsession(channel, config, fullwidth, hasmarkup):
|
||||||
pytest_collectreport = pytest_itemtestreport
|
pytest_collectreport = pytest_itemtestreport
|
||||||
|
|
||||||
failreports = Failures()
|
failreports = Failures()
|
||||||
session.bus.register(failreports)
|
session.pluginmanager.register(failreports)
|
||||||
|
|
||||||
DEBUG("SLAVE: starting session.main()")
|
DEBUG("SLAVE: starting session.main()")
|
||||||
session.main(colitems)
|
session.main(colitems)
|
||||||
|
|
|
@ -8,10 +8,10 @@ class PytestArg:
|
||||||
def __init__(self, pyfuncitem):
|
def __init__(self, pyfuncitem):
|
||||||
self.pyfuncitem = pyfuncitem
|
self.pyfuncitem = pyfuncitem
|
||||||
|
|
||||||
def getcallrecorder(self, apiclass, pyplugins=None):
|
def getcallrecorder(self, apiclass, comregistry=None):
|
||||||
if pyplugins is None:
|
if comregistry is None:
|
||||||
pyplugins = self.pyfuncitem.config.pytestplugins.pyplugins
|
comregistry = self.pyfuncitem.config.pluginmanager.comregistry
|
||||||
callrecorder = CallRecorder(pyplugins)
|
callrecorder = CallRecorder(comregistry)
|
||||||
callrecorder.start_recording(apiclass)
|
callrecorder.start_recording(apiclass)
|
||||||
self.pyfuncitem.addfinalizer(callrecorder.finalize)
|
self.pyfuncitem.addfinalizer(callrecorder.finalize)
|
||||||
return callrecorder
|
return callrecorder
|
||||||
|
@ -30,8 +30,8 @@ class ParsedCall:
|
||||||
return "<ParsedCall %r(**%r)>" %(self._name, d)
|
return "<ParsedCall %r(**%r)>" %(self._name, d)
|
||||||
|
|
||||||
class CallRecorder:
|
class CallRecorder:
|
||||||
def __init__(self, pyplugins):
|
def __init__(self, comregistry):
|
||||||
self._pyplugins = pyplugins
|
self._comregistry = comregistry
|
||||||
self.calls = []
|
self.calls = []
|
||||||
self._recorders = {}
|
self._recorders = {}
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@ class CallRecorder:
|
||||||
setattr(RecordCalls, name, self._getcallparser(method))
|
setattr(RecordCalls, name, self._getcallparser(method))
|
||||||
recorder = RecordCalls()
|
recorder = RecordCalls()
|
||||||
self._recorders[apiclass] = recorder
|
self._recorders[apiclass] = recorder
|
||||||
self._pyplugins.register(recorder)
|
self._comregistry.register(recorder)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
for recorder in self._recorders.values():
|
for recorder in self._recorders.values():
|
||||||
self._pyplugins.unregister(recorder)
|
self._comregistry.unregister(recorder)
|
||||||
self._recorders.clear()
|
self._recorders.clear()
|
||||||
|
|
||||||
def recordsmethod(self, name):
|
def recordsmethod(self, name):
|
||||||
|
@ -99,13 +99,13 @@ def test_generic(plugintester):
|
||||||
plugintester.apicheck(_pytestPlugin)
|
plugintester.apicheck(_pytestPlugin)
|
||||||
|
|
||||||
def test_callrecorder_basic():
|
def test_callrecorder_basic():
|
||||||
pyplugins = py._com.PyPlugins()
|
comregistry = py._com.Registry()
|
||||||
rec = CallRecorder(pyplugins)
|
rec = CallRecorder(comregistry)
|
||||||
class ApiClass:
|
class ApiClass:
|
||||||
def xyz(self, arg):
|
def xyz(self, arg):
|
||||||
pass
|
pass
|
||||||
rec.start_recording(ApiClass)
|
rec.start_recording(ApiClass)
|
||||||
pyplugins.call_each("xyz", 123)
|
comregistry.call_each("xyz", 123)
|
||||||
call = rec.popcall("xyz")
|
call = rec.popcall("xyz")
|
||||||
assert call.arg == 123
|
assert call.arg == 123
|
||||||
assert call._name == "xyz"
|
assert call._name == "xyz"
|
||||||
|
@ -122,8 +122,8 @@ def test_functional(testdir, linecomp):
|
||||||
class Plugin:
|
class Plugin:
|
||||||
def xyz(self, arg):
|
def xyz(self, arg):
|
||||||
return arg + 1
|
return arg + 1
|
||||||
rec._pyplugins.register(Plugin())
|
rec._comregistry.register(Plugin())
|
||||||
res = rec._pyplugins.call_firstresult("xyz", 41)
|
res = rec._comregistry.call_firstresult("xyz", 41)
|
||||||
assert res == 42
|
assert res == 42
|
||||||
""")
|
""")
|
||||||
sorter.assertoutcome(passed=1)
|
sorter.assertoutcome(passed=1)
|
||||||
|
|
|
@ -158,7 +158,7 @@ class DefaultPlugin:
|
||||||
def loadplugins(self, config):
|
def loadplugins(self, config):
|
||||||
for name in config.getvalue("plugin"):
|
for name in config.getvalue("plugin"):
|
||||||
print "importing", name
|
print "importing", name
|
||||||
config.pytestplugins.import_plugin(name)
|
config.pluginmanager.import_plugin(name)
|
||||||
|
|
||||||
def setsession(self, config):
|
def setsession(self, config):
|
||||||
val = config.getvalue
|
val = config.getvalue
|
||||||
|
@ -177,7 +177,7 @@ def test_implied_different_sessions(tmpdir):
|
||||||
def x(*args):
|
def x(*args):
|
||||||
config = py.test.config._reparse([tmpdir] + list(args))
|
config = py.test.config._reparse([tmpdir] + list(args))
|
||||||
try:
|
try:
|
||||||
config.pytestplugins.do_configure(config)
|
config.pluginmanager.do_configure(config)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return Exception
|
return Exception
|
||||||
return getattr(config._sessionclass, '__name__', None)
|
return getattr(config._sessionclass, '__name__', None)
|
||||||
|
@ -194,13 +194,13 @@ def test_plugin_specify(testdir):
|
||||||
testdir.chdir()
|
testdir.chdir()
|
||||||
config = testdir.parseconfig("-p", "nqweotexistent")
|
config = testdir.parseconfig("-p", "nqweotexistent")
|
||||||
py.test.raises(ImportError,
|
py.test.raises(ImportError,
|
||||||
"config.pytestplugins.do_configure(config)"
|
"config.pluginmanager.do_configure(config)"
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_plugin_already_exists(testdir):
|
def test_plugin_already_exists(testdir):
|
||||||
config = testdir.parseconfig("-p", "default")
|
config = testdir.parseconfig("-p", "default")
|
||||||
assert config.option.plugin == ['default']
|
assert config.option.plugin == ['default']
|
||||||
config.pytestplugins.do_configure(config)
|
config.pluginmanager.do_configure(config)
|
||||||
|
|
||||||
|
|
||||||
class TestDistOptions:
|
class TestDistOptions:
|
||||||
|
|
|
@ -27,7 +27,7 @@ class Support(object):
|
||||||
class PluginTester(Support):
|
class PluginTester(Support):
|
||||||
def testdir(self):
|
def testdir(self):
|
||||||
# XXX import differently, eg.
|
# XXX import differently, eg.
|
||||||
# FSTester = self.pyfuncitem.config.pytestplugins.getpluginattr("pytester", "FSTester")
|
# FSTester = self.pyfuncitem.config.pluginmanager.getpluginattr("pytester", "FSTester")
|
||||||
from pytest_pytester import TmpTestdir
|
from pytest_pytester import TmpTestdir
|
||||||
crunner = TmpTestdir(self.pyfuncitem)
|
crunner = TmpTestdir(self.pyfuncitem)
|
||||||
self.pyfuncitem.addfinalizer(crunner.finalize)
|
self.pyfuncitem.addfinalizer(crunner.finalize)
|
||||||
|
@ -42,7 +42,7 @@ class PluginTester(Support):
|
||||||
def apicheck(self, pluginclass):
|
def apicheck(self, pluginclass):
|
||||||
print "loading and checking", pluginclass
|
print "loading and checking", pluginclass
|
||||||
fail = False
|
fail = False
|
||||||
pm = py.test._PytestPlugins()
|
pm = py.test._PluginManager()
|
||||||
methods = collectattr(pluginclass)
|
methods = collectattr(pluginclass)
|
||||||
hooks = collectattr(api.PluginHooks)
|
hooks = collectattr(api.PluginHooks)
|
||||||
getargs = py.std.inspect.getargs
|
getargs = py.std.inspect.getargs
|
||||||
|
|
|
@ -25,8 +25,8 @@ class PytesterPlugin:
|
||||||
# return EventRecorder
|
# return EventRecorder
|
||||||
|
|
||||||
def pytest_funcarg__eventrecorder(self, pyfuncitem):
|
def pytest_funcarg__eventrecorder(self, pyfuncitem):
|
||||||
evrec = EventRecorder(py._com.pyplugins)
|
evrec = EventRecorder(py._com.comregistry)
|
||||||
pyfuncitem.addfinalizer(lambda: evrec.pyplugins.unregister(evrec))
|
pyfuncitem.addfinalizer(lambda: evrec.comregistry.unregister(evrec))
|
||||||
return evrec
|
return evrec
|
||||||
|
|
||||||
def test_generic(plugintester):
|
def test_generic(plugintester):
|
||||||
|
@ -65,10 +65,10 @@ class TmpTestdir:
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<TmpTestdir %r>" % (self.tmpdir,)
|
return "<TmpTestdir %r>" % (self.tmpdir,)
|
||||||
|
|
||||||
def Config(self, pyplugins=None, topdir=None):
|
def Config(self, comregistry=None, topdir=None):
|
||||||
if topdir is None:
|
if topdir is None:
|
||||||
topdir = self.tmpdir.dirpath()
|
topdir = self.tmpdir.dirpath()
|
||||||
return pytestConfig(pyplugins, topdir=topdir)
|
return pytestConfig(comregistry, topdir=topdir)
|
||||||
|
|
||||||
def finalize(self):
|
def finalize(self):
|
||||||
for p in self._syspathremove:
|
for p in self._syspathremove:
|
||||||
|
@ -132,7 +132,7 @@ class TmpTestdir:
|
||||||
#config = self.parseconfig(*args)
|
#config = self.parseconfig(*args)
|
||||||
config = self.parseconfig(*args)
|
config = self.parseconfig(*args)
|
||||||
session = config.initsession()
|
session = config.initsession()
|
||||||
rec = self.geteventrecorder(config.bus)
|
rec = self.geteventrecorder(config.pluginmanager)
|
||||||
colitems = [config.getfsnode(arg) for arg in config.args]
|
colitems = [config.getfsnode(arg) for arg in config.args]
|
||||||
items = list(session.genitems(colitems))
|
items = list(session.genitems(colitems))
|
||||||
return items, rec
|
return items, rec
|
||||||
|
@ -152,20 +152,20 @@ class TmpTestdir:
|
||||||
|
|
||||||
def inline_run(self, *args):
|
def inline_run(self, *args):
|
||||||
config = self.parseconfig(*args)
|
config = self.parseconfig(*args)
|
||||||
config.pytestplugins.do_configure(config)
|
config.pluginmanager.do_configure(config)
|
||||||
session = config.initsession()
|
session = config.initsession()
|
||||||
sorter = self.geteventrecorder(config.bus)
|
sorter = self.geteventrecorder(config.pluginmanager)
|
||||||
session.main()
|
session.main()
|
||||||
config.pytestplugins.do_unconfigure(config)
|
config.pluginmanager.do_unconfigure(config)
|
||||||
return sorter
|
return sorter
|
||||||
|
|
||||||
def config_preparse(self):
|
def config_preparse(self):
|
||||||
config = self.Config()
|
config = self.Config()
|
||||||
for plugin in self.plugins:
|
for plugin in self.plugins:
|
||||||
if isinstance(plugin, str):
|
if isinstance(plugin, str):
|
||||||
config.pytestplugins.import_plugin(plugin)
|
config.pluginmanager.import_plugin(plugin)
|
||||||
else:
|
else:
|
||||||
config.pytestplugins.register(plugin)
|
config.pluginmanager.register(plugin)
|
||||||
return config
|
return config
|
||||||
|
|
||||||
def parseconfig(self, *args):
|
def parseconfig(self, *args):
|
||||||
|
@ -178,7 +178,7 @@ class TmpTestdir:
|
||||||
|
|
||||||
def parseconfigure(self, *args):
|
def parseconfigure(self, *args):
|
||||||
config = self.parseconfig(*args)
|
config = self.parseconfig(*args)
|
||||||
config.pytestplugins.do_configure(config)
|
config.pluginmanager.do_configure(config)
|
||||||
return config
|
return config
|
||||||
|
|
||||||
def getitem(self, source, funcname="test_func"):
|
def getitem(self, source, funcname="test_func"):
|
||||||
|
@ -279,10 +279,10 @@ class ParsedCall:
|
||||||
return "<ParsedCall %r>" %(self.__dict__,)
|
return "<ParsedCall %r>" %(self.__dict__,)
|
||||||
|
|
||||||
class EventRecorder(object):
|
class EventRecorder(object):
|
||||||
def __init__(self, pyplugins, debug=False): # True):
|
def __init__(self, comregistry, debug=False): # True):
|
||||||
self.pyplugins = pyplugins
|
self.comregistry = comregistry
|
||||||
self.debug = debug
|
self.debug = debug
|
||||||
pyplugins.register(self)
|
comregistry.register(self)
|
||||||
|
|
||||||
def getcall(self, name):
|
def getcall(self, name):
|
||||||
l = self.getcalls(name)
|
l = self.getcalls(name)
|
||||||
|
@ -360,11 +360,11 @@ class EventRecorder(object):
|
||||||
self.callrecorder.calls[:] = []
|
self.callrecorder.calls[:] = []
|
||||||
|
|
||||||
def unregister(self):
|
def unregister(self):
|
||||||
self.pyplugins.unregister(self)
|
self.comregistry.unregister(self)
|
||||||
self.callrecorder.finalize()
|
self.callrecorder.finalize()
|
||||||
|
|
||||||
def test_eventrecorder(testdir):
|
def test_eventrecorder(testdir):
|
||||||
bus = py._com.PyPlugins()
|
bus = py._com.Registry()
|
||||||
recorder = testdir.geteventrecorder(bus)
|
recorder = testdir.geteventrecorder(bus)
|
||||||
assert not recorder.getfailures()
|
assert not recorder.getfailures()
|
||||||
rep = runner.ItemTestReport(None, None)
|
rep = runner.ItemTestReport(None, None)
|
||||||
|
|
|
@ -41,12 +41,12 @@ class ResultdbPlugin:
|
||||||
raise config.Error('Unknown --resultdb_format: %s' %
|
raise config.Error('Unknown --resultdb_format: %s' %
|
||||||
config.option.resultdbformat)
|
config.option.resultdbformat)
|
||||||
|
|
||||||
config.bus.register(self.resultdb)
|
config.pluginmanager.register(self.resultdb)
|
||||||
|
|
||||||
def pytest_unconfigure(self, config):
|
def pytest_unconfigure(self, config):
|
||||||
if hasattr(self, 'resultdb'):
|
if hasattr(self, 'resultdb'):
|
||||||
del self.resultdb
|
del self.resultdb
|
||||||
#config.bus.unregister(self.resultdb)
|
#config.pluginmanager.unregister(self.resultdb)
|
||||||
|
|
||||||
|
|
||||||
class JSONResultArchive(object):
|
class JSONResultArchive(object):
|
||||||
|
|
|
@ -14,13 +14,13 @@ class ResultlogPlugin:
|
||||||
if resultlog:
|
if resultlog:
|
||||||
logfile = open(resultlog, 'w', 1) # line buffered
|
logfile = open(resultlog, 'w', 1) # line buffered
|
||||||
self.resultlog = ResultLog(logfile)
|
self.resultlog = ResultLog(logfile)
|
||||||
config.bus.register(self.resultlog)
|
config.pluginmanager.register(self.resultlog)
|
||||||
|
|
||||||
def pytest_unconfigure(self, config):
|
def pytest_unconfigure(self, config):
|
||||||
if hasattr(self, 'resultlog'):
|
if hasattr(self, 'resultlog'):
|
||||||
self.resultlog.logfile.close()
|
self.resultlog.logfile.close()
|
||||||
del self.resultlog
|
del self.resultlog
|
||||||
#config.bus.unregister(self.resultlog)
|
#config.pluginmanager.unregister(self.resultlog)
|
||||||
|
|
||||||
def generic_path(item):
|
def generic_path(item):
|
||||||
chain = item.listchain()
|
chain = item.listchain()
|
||||||
|
|
|
@ -208,7 +208,7 @@ class TestRunnerPlugin:
|
||||||
item = testdir.getitem("""def test_func(): pass""")
|
item = testdir.getitem("""def test_func(): pass""")
|
||||||
plugin = RunnerPlugin()
|
plugin = RunnerPlugin()
|
||||||
plugin.pytest_configure(item.config)
|
plugin.pytest_configure(item.config)
|
||||||
sorter = testdir.geteventrecorder(item.config.bus)
|
sorter = testdir.geteventrecorder(item.config.pluginmanager)
|
||||||
plugin.pytest_item_setup_and_runtest(item)
|
plugin.pytest_item_setup_and_runtest(item)
|
||||||
rep = sorter.getcall("pytest_itemtestreport").rep
|
rep = sorter.getcall("pytest_itemtestreport").rep
|
||||||
assert rep.passed
|
assert rep.passed
|
||||||
|
|
|
@ -15,7 +15,7 @@ class TerminalPlugin(object):
|
||||||
name = attr.split("_")[-1]
|
name = attr.split("_")[-1]
|
||||||
assert hasattr(self.reporter._tw, name), name
|
assert hasattr(self.reporter._tw, name), name
|
||||||
setattr(self.reporter._tw, name, getattr(config, attr))
|
setattr(self.reporter._tw, name, getattr(config, attr))
|
||||||
config.bus.register(self.reporter)
|
config.pluginmanager.register(self.reporter)
|
||||||
|
|
||||||
class TerminalReporter:
|
class TerminalReporter:
|
||||||
def __init__(self, config, file=None):
|
def __init__(self, config, file=None):
|
||||||
|
@ -209,7 +209,7 @@ class TerminalReporter:
|
||||||
py.path.local(py.__file__).dirpath(), rev))
|
py.path.local(py.__file__).dirpath(), rev))
|
||||||
if self.config.option.traceconfig:
|
if self.config.option.traceconfig:
|
||||||
plugins = []
|
plugins = []
|
||||||
for x in self.config.pytestplugins._plugins:
|
for x in self.config.pluginmanager.plugins:
|
||||||
if isinstance(x, str) and x.startswith("pytest_"):
|
if isinstance(x, str) and x.startswith("pytest_"):
|
||||||
plugins.append(x[7:])
|
plugins.append(x[7:])
|
||||||
else:
|
else:
|
||||||
|
@ -368,7 +368,7 @@ class TestTerminal:
|
||||||
assert 0
|
assert 0
|
||||||
""")
|
""")
|
||||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||||
rep.config.bus.register(rep)
|
rep.config.pluginmanager.register(rep)
|
||||||
rep.config.api.pytest_testrunstart()
|
rep.config.api.pytest_testrunstart()
|
||||||
|
|
||||||
for item in testdir.genitems([modcol]):
|
for item in testdir.genitems([modcol]):
|
||||||
|
@ -395,7 +395,7 @@ class TestTerminal:
|
||||||
assert 0
|
assert 0
|
||||||
""", configargs=("-v",))
|
""", configargs=("-v",))
|
||||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||||
rep.config.bus.register(rep)
|
rep.config.pluginmanager.register(rep)
|
||||||
rep.config.api.pytest_testrunstart()
|
rep.config.api.pytest_testrunstart()
|
||||||
items = modcol.collect()
|
items = modcol.collect()
|
||||||
rep.config.option.debug = True #
|
rep.config.option.debug = True #
|
||||||
|
@ -420,7 +420,7 @@ class TestTerminal:
|
||||||
def test_collect_fail(self, testdir, linecomp):
|
def test_collect_fail(self, testdir, linecomp):
|
||||||
modcol = testdir.getmodulecol("import xyz")
|
modcol = testdir.getmodulecol("import xyz")
|
||||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||||
rep.config.bus.register(rep)
|
rep.config.pluginmanager.register(rep)
|
||||||
rep.config.api.pytest_testrunstart()
|
rep.config.api.pytest_testrunstart()
|
||||||
l = list(testdir.genitems([modcol]))
|
l = list(testdir.genitems([modcol]))
|
||||||
assert len(l) == 0
|
assert len(l) == 0
|
||||||
|
@ -516,7 +516,7 @@ class TestTerminal:
|
||||||
g() # --calling--
|
g() # --calling--
|
||||||
""", configargs=("--tb=%s" % tbopt,))
|
""", configargs=("--tb=%s" % tbopt,))
|
||||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||||
rep.config.bus.register(rep)
|
rep.config.pluginmanager.register(rep)
|
||||||
rep.config.api.pytest_testrunstart()
|
rep.config.api.pytest_testrunstart()
|
||||||
for item in testdir.genitems([modcol]):
|
for item in testdir.genitems([modcol]):
|
||||||
rep.config.api.pytest_itemtestreport(
|
rep.config.api.pytest_itemtestreport(
|
||||||
|
@ -543,7 +543,7 @@ class TestTerminal:
|
||||||
pass
|
pass
|
||||||
""")
|
""")
|
||||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||||
modcol.config.bus.register(rep)
|
modcol.config.pluginmanager.register(rep)
|
||||||
l = list(testdir.genitems([modcol]))
|
l = list(testdir.genitems([modcol]))
|
||||||
assert len(l) == 1
|
assert len(l) == 1
|
||||||
modcol.config.option.debug = True
|
modcol.config.option.debug = True
|
||||||
|
@ -563,8 +563,8 @@ class TestTerminal:
|
||||||
""", configargs=("-v",)*verbose)
|
""", configargs=("-v",)*verbose)
|
||||||
#""", configargs=("--showskipsummary",) + ("-v",)*verbose)
|
#""", configargs=("--showskipsummary",) + ("-v",)*verbose)
|
||||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||||
modcol.config.bus.register(rep)
|
modcol.config.pluginmanager.register(rep)
|
||||||
bus = modcol.config.bus
|
bus = modcol.config.pluginmanager
|
||||||
modcol.config.api.pytest_testrunstart()
|
modcol.config.api.pytest_testrunstart()
|
||||||
try:
|
try:
|
||||||
for item in testdir.genitems([modcol]):
|
for item in testdir.genitems([modcol]):
|
||||||
|
@ -625,7 +625,7 @@ class TestCollectonly:
|
||||||
pass
|
pass
|
||||||
""")
|
""")
|
||||||
rep = CollectonlyReporter(modcol.config, out=linecomp.stringio)
|
rep = CollectonlyReporter(modcol.config, out=linecomp.stringio)
|
||||||
modcol.config.bus.register(rep)
|
modcol.config.pluginmanager.register(rep)
|
||||||
indent = rep.indent
|
indent = rep.indent
|
||||||
rep.config.api.pytest_collectstart(collector=modcol)
|
rep.config.api.pytest_collectstart(collector=modcol)
|
||||||
linecomp.assert_contains_lines([
|
linecomp.assert_contains_lines([
|
||||||
|
@ -646,7 +646,7 @@ class TestCollectonly:
|
||||||
py.test.skip("nomod")
|
py.test.skip("nomod")
|
||||||
""")
|
""")
|
||||||
rep = CollectonlyReporter(modcol.config, out=linecomp.stringio)
|
rep = CollectonlyReporter(modcol.config, out=linecomp.stringio)
|
||||||
modcol.config.bus.register(rep)
|
modcol.config.pluginmanager.register(rep)
|
||||||
cols = list(testdir.genitems([modcol]))
|
cols = list(testdir.genitems([modcol]))
|
||||||
assert len(cols) == 0
|
assert len(cols) == 0
|
||||||
linecomp.assert_contains_lines("""
|
linecomp.assert_contains_lines("""
|
||||||
|
@ -659,7 +659,7 @@ class TestCollectonly:
|
||||||
raise ValueError(0)
|
raise ValueError(0)
|
||||||
""")
|
""")
|
||||||
rep = CollectonlyReporter(modcol.config, out=linecomp.stringio)
|
rep = CollectonlyReporter(modcol.config, out=linecomp.stringio)
|
||||||
modcol.config.bus.register(rep)
|
modcol.config.pluginmanager.register(rep)
|
||||||
cols = list(testdir.genitems([modcol]))
|
cols = list(testdir.genitems([modcol]))
|
||||||
assert len(cols) == 0
|
assert len(cols) == 0
|
||||||
linecomp.assert_contains_lines("""
|
linecomp.assert_contains_lines("""
|
||||||
|
|
|
@ -167,7 +167,7 @@ class Module(py.test.collect.File, PyCollectorMixin):
|
||||||
# we assume we are only called once per module
|
# we assume we are only called once per module
|
||||||
mod = self.fspath.pyimport()
|
mod = self.fspath.pyimport()
|
||||||
#print "imported test module", mod
|
#print "imported test module", mod
|
||||||
self.config.pytestplugins.consider_module(mod)
|
self.config.pluginmanager.consider_module(mod)
|
||||||
return mod
|
return mod
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
|
@ -177,7 +177,7 @@ class Module(py.test.collect.File, PyCollectorMixin):
|
||||||
#print "*" * 20, "INVOKE assertion", self
|
#print "*" * 20, "INVOKE assertion", self
|
||||||
py.magic.invoke(assertion=1)
|
py.magic.invoke(assertion=1)
|
||||||
mod = self.obj
|
mod = self.obj
|
||||||
self.config.pytestplugins.register(mod)
|
self.config.pluginmanager.register(mod)
|
||||||
if hasattr(mod, 'setup_module'):
|
if hasattr(mod, 'setup_module'):
|
||||||
self.obj.setup_module(mod)
|
self.obj.setup_module(mod)
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ class Module(py.test.collect.File, PyCollectorMixin):
|
||||||
if not self.config.option.nomagic:
|
if not self.config.option.nomagic:
|
||||||
#print "*" * 20, "revoke assertion", self
|
#print "*" * 20, "revoke assertion", self
|
||||||
py.magic.revoke(assertion=1)
|
py.magic.revoke(assertion=1)
|
||||||
self.config.pytestplugins.unregister(self.obj)
|
self.config.pluginmanager.unregister(self.obj)
|
||||||
|
|
||||||
class Class(PyCollectorMixin, py.test.collect.Collector):
|
class Class(PyCollectorMixin, py.test.collect.Collector):
|
||||||
|
|
||||||
|
@ -376,8 +376,8 @@ class Function(FunctionMixin, py.test.collect.Item):
|
||||||
|
|
||||||
def lookup_onearg(self, argname):
|
def lookup_onearg(self, argname):
|
||||||
prefix = "pytest_funcarg__"
|
prefix = "pytest_funcarg__"
|
||||||
#makerlist = self.config.pytestplugins.listattr(prefix + argname)
|
#makerlist = self.config.pluginmanager.listattr(prefix + argname)
|
||||||
value = self.config.pytestplugins.call_firstresult(prefix + argname, pyfuncitem=self)
|
value = self.config.pluginmanager.call_firstresult(prefix + argname, pyfuncitem=self)
|
||||||
if value is not None:
|
if value is not None:
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
|
@ -386,8 +386,8 @@ class Function(FunctionMixin, py.test.collect.Item):
|
||||||
def _raisefuncargerror(self, argname, prefix="pytest_funcarg__"):
|
def _raisefuncargerror(self, argname, prefix="pytest_funcarg__"):
|
||||||
metainfo = self.repr_metainfo()
|
metainfo = self.repr_metainfo()
|
||||||
available = []
|
available = []
|
||||||
plugins = self.config.pytestplugins._plugins.values()
|
plugins = self.config.pluginmanager.plugins.values()
|
||||||
plugins.extend(self.config.pytestplugins.pyplugins._plugins)
|
plugins.extend(self.config.pluginmanager.comregistry.plugins)
|
||||||
for plugin in plugins:
|
for plugin in plugins:
|
||||||
for name in vars(plugin.__class__):
|
for name in vars(plugin.__class__):
|
||||||
if name.startswith(prefix):
|
if name.startswith(prefix):
|
||||||
|
|
|
@ -4,42 +4,42 @@ handling py.test plugins.
|
||||||
import py
|
import py
|
||||||
from py.__.test.plugin import api
|
from py.__.test.plugin import api
|
||||||
|
|
||||||
class PytestPlugins(object):
|
class PluginManager(object):
|
||||||
def __init__(self, pyplugins=None):
|
def __init__(self, comregistry=None):
|
||||||
if pyplugins is None:
|
if comregistry is None:
|
||||||
pyplugins = py._com.PyPlugins()
|
comregistry = py._com.Registry()
|
||||||
self.pyplugins = pyplugins
|
self.comregistry = comregistry
|
||||||
self.MultiCall = self.pyplugins.MultiCall
|
self.MultiCall = self.comregistry.MultiCall
|
||||||
self._plugins = {}
|
self.plugins = {}
|
||||||
|
|
||||||
self.api = py._com.PluginAPI(
|
self.api = py._com.PluginAPI(
|
||||||
apiclass=api.PluginHooks,
|
apiclass=api.PluginHooks,
|
||||||
plugins=self.pyplugins)
|
plugins=self.comregistry)
|
||||||
|
|
||||||
def register(self, plugin):
|
def register(self, plugin):
|
||||||
self.pyplugins.register(plugin)
|
self.comregistry.register(plugin)
|
||||||
def unregister(self, plugin):
|
def unregister(self, plugin):
|
||||||
self.pyplugins.unregister(plugin)
|
self.comregistry.unregister(plugin)
|
||||||
def isregistered(self, plugin):
|
def isregistered(self, plugin):
|
||||||
return self.pyplugins.isregistered(plugin)
|
return self.comregistry.isregistered(plugin)
|
||||||
|
|
||||||
def getplugins(self):
|
def getplugins(self):
|
||||||
return self.pyplugins.getplugins()
|
return self.comregistry.getplugins()
|
||||||
|
|
||||||
# API for bootstrapping
|
# API for bootstrapping
|
||||||
#
|
#
|
||||||
def getplugin(self, importname):
|
def getplugin(self, importname):
|
||||||
impname, clsname = canonical_names(importname)
|
impname, clsname = canonical_names(importname)
|
||||||
return self._plugins[impname]
|
return self.plugins[impname]
|
||||||
|
|
||||||
def consider_env(self):
|
def consider_env(self):
|
||||||
for spec in self.pyplugins._envlist("PYTEST_PLUGINS"):
|
for spec in self.comregistry._envlist("PYTEST_PLUGINS"):
|
||||||
self.import_plugin(spec)
|
self.import_plugin(spec)
|
||||||
|
|
||||||
def consider_conftest(self, conftestmodule):
|
def consider_conftest(self, conftestmodule):
|
||||||
cls = getattr(conftestmodule, 'ConftestPlugin', None)
|
cls = getattr(conftestmodule, 'ConftestPlugin', None)
|
||||||
if cls is not None and cls not in self._plugins:
|
if cls is not None and cls not in self.plugins:
|
||||||
self._plugins[cls] = True
|
self.plugins[cls] = True
|
||||||
self.register(cls())
|
self.register(cls())
|
||||||
self.consider_module(conftestmodule)
|
self.consider_module(conftestmodule)
|
||||||
|
|
||||||
|
@ -54,11 +54,11 @@ class PytestPlugins(object):
|
||||||
def import_plugin(self, spec):
|
def import_plugin(self, spec):
|
||||||
assert isinstance(spec, str)
|
assert isinstance(spec, str)
|
||||||
modname, clsname = canonical_names(spec)
|
modname, clsname = canonical_names(spec)
|
||||||
if modname in self._plugins:
|
if modname in self.plugins:
|
||||||
return
|
return
|
||||||
mod = importplugin(modname)
|
mod = importplugin(modname)
|
||||||
plugin = registerplugin(self.pyplugins.register, mod, clsname)
|
plugin = registerplugin(self.comregistry.register, mod, clsname)
|
||||||
self._plugins[modname] = plugin
|
self.plugins[modname] = plugin
|
||||||
self.consider_module(mod)
|
self.consider_module(mod)
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -66,18 +66,18 @@ class PytestPlugins(object):
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
def getfirst(self, attrname):
|
def getfirst(self, attrname):
|
||||||
for x in self.pyplugins.listattr(attrname):
|
for x in self.comregistry.listattr(attrname):
|
||||||
return x
|
return x
|
||||||
|
|
||||||
def listattr(self, attrname):
|
def listattr(self, attrname):
|
||||||
return self.pyplugins.listattr(attrname)
|
return self.comregistry.listattr(attrname)
|
||||||
|
|
||||||
def call_firstresult(self, *args, **kwargs):
|
def call_firstresult(self, *args, **kwargs):
|
||||||
return self.pyplugins.call_firstresult(*args, **kwargs)
|
return self.comregistry.call_firstresult(*args, **kwargs)
|
||||||
|
|
||||||
def call_each(self, *args, **kwargs):
|
def call_each(self, *args, **kwargs):
|
||||||
#print "plugins.call_each", args[0], args[1:], kwargs
|
#print "plugins.call_each", args[0], args[1:], kwargs
|
||||||
return self.pyplugins.call_each(*args, **kwargs)
|
return self.comregistry.call_each(*args, **kwargs)
|
||||||
|
|
||||||
def notify_exception(self, excinfo=None):
|
def notify_exception(self, excinfo=None):
|
||||||
if excinfo is None:
|
if excinfo is None:
|
||||||
|
@ -86,18 +86,18 @@ class PytestPlugins(object):
|
||||||
return self.api.pytest_internalerror(excrepr=excrepr)
|
return self.api.pytest_internalerror(excrepr=excrepr)
|
||||||
|
|
||||||
def do_addoption(self, parser):
|
def do_addoption(self, parser):
|
||||||
methods = self.pyplugins.listattr("pytest_addoption", reverse=True)
|
methods = self.comregistry.listattr("pytest_addoption", reverse=True)
|
||||||
mc = py._com.MultiCall(methods, parser=parser)
|
mc = py._com.MultiCall(methods, parser=parser)
|
||||||
mc.execute()
|
mc.execute()
|
||||||
|
|
||||||
def pytest_plugin_registered(self, plugin):
|
def pytest_plugin_registered(self, plugin):
|
||||||
if hasattr(self, '_config'):
|
if hasattr(self, '_config'):
|
||||||
self.pyplugins.call_plugin(plugin, "pytest_addoption", parser=self._config._parser)
|
self.comregistry.call_plugin(plugin, "pytest_addoption", parser=self._config._parser)
|
||||||
self.pyplugins.call_plugin(plugin, "pytest_configure", config=self._config)
|
self.comregistry.call_plugin(plugin, "pytest_configure", config=self._config)
|
||||||
|
|
||||||
def do_configure(self, config):
|
def do_configure(self, config):
|
||||||
assert not hasattr(self, '_config')
|
assert not hasattr(self, '_config')
|
||||||
config.bus.register(self)
|
config.pluginmanager.register(self)
|
||||||
self._config = config
|
self._config = config
|
||||||
config.api.pytest_configure(config=self._config)
|
config.api.pytest_configure(config=self._config)
|
||||||
|
|
||||||
|
@ -105,10 +105,10 @@ class PytestPlugins(object):
|
||||||
config = self._config
|
config = self._config
|
||||||
del self._config
|
del self._config
|
||||||
config.api.pytest_unconfigure(config=config)
|
config.api.pytest_unconfigure(config=config)
|
||||||
config.bus.unregister(self)
|
config.pluginmanager.unregister(self)
|
||||||
|
|
||||||
def do_itemrun(self, item, pdb=None):
|
def do_itemrun(self, item, pdb=None):
|
||||||
res = self.pyplugins.call_firstresult("pytest_itemrun", item=item, pdb=pdb)
|
res = self.comregistry.call_firstresult("pytest_itemrun", item=item, pdb=pdb)
|
||||||
if res is None:
|
if res is None:
|
||||||
raise ValueError("could not run %r" %(item,))
|
raise ValueError("could not run %r" %(item,))
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@ class Session(object):
|
||||||
"""
|
"""
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.bus = config.bus # shortcut
|
self.pluginmanager = config.pluginmanager # shortcut
|
||||||
self.bus.register(self)
|
self.pluginmanager.register(self)
|
||||||
self._testsfailed = False
|
self._testsfailed = False
|
||||||
self._nomatch = False
|
self._nomatch = False
|
||||||
self.shouldstop = False
|
self.shouldstop = False
|
||||||
|
@ -33,7 +33,7 @@ class Session(object):
|
||||||
if isinstance(next, (tuple, list)):
|
if isinstance(next, (tuple, list)):
|
||||||
colitems[:] = list(next) + colitems
|
colitems[:] = list(next) + colitems
|
||||||
continue
|
continue
|
||||||
assert self.bus is next.config.bus
|
assert self.pluginmanager is next.config.pluginmanager
|
||||||
if isinstance(next, Item):
|
if isinstance(next, Item):
|
||||||
remaining = self.filteritems([next])
|
remaining = self.filteritems([next])
|
||||||
if remaining:
|
if remaining:
|
||||||
|
@ -120,7 +120,7 @@ class Session(object):
|
||||||
exitstatus = outcome.EXIT_INTERRUPTED
|
exitstatus = outcome.EXIT_INTERRUPTED
|
||||||
except:
|
except:
|
||||||
captured_excinfo = py.code.ExceptionInfo()
|
captured_excinfo = py.code.ExceptionInfo()
|
||||||
self.config.pytestplugins.notify_exception(captured_excinfo)
|
self.config.pluginmanager.notify_exception(captured_excinfo)
|
||||||
exitstatus = outcome.EXIT_INTERNALERROR
|
exitstatus = outcome.EXIT_INTERNALERROR
|
||||||
if exitstatus == 0 and self._testsfailed:
|
if exitstatus == 0 and self._testsfailed:
|
||||||
exitstatus = outcome.EXIT_TESTSFAILED
|
exitstatus = outcome.EXIT_TESTSFAILED
|
||||||
|
@ -133,4 +133,4 @@ class Session(object):
|
||||||
|
|
||||||
def runtest(self, item):
|
def runtest(self, item):
|
||||||
pdb = self.config.option.usepdb and self.runpdb or None
|
pdb = self.config.option.usepdb and self.runpdb or None
|
||||||
item.config.pytestplugins.do_itemrun(item, pdb=pdb)
|
item.config.pluginmanager.do_itemrun(item, pdb=pdb)
|
||||||
|
|
|
@ -67,7 +67,7 @@ class TestCollector:
|
||||||
|
|
||||||
def test_listnames_and__getitembynames(self, testdir):
|
def test_listnames_and__getitembynames(self, testdir):
|
||||||
modcol = testdir.getmodulecol("pass", withinit=True)
|
modcol = testdir.getmodulecol("pass", withinit=True)
|
||||||
print modcol.config.pytestplugins.getplugins()
|
print modcol.config.pluginmanager.getplugins()
|
||||||
names = modcol.listnames()
|
names = modcol.listnames()
|
||||||
print names
|
print names
|
||||||
dircol = modcol.config.getfsnode(modcol.config.topdir)
|
dircol = modcol.config.getfsnode(modcol.config.topdir)
|
||||||
|
@ -145,7 +145,7 @@ class TestCollectPluginHooks:
|
||||||
def pytest_collect_file(self, path, parent):
|
def pytest_collect_file(self, path, parent):
|
||||||
wascalled.append(path)
|
wascalled.append(path)
|
||||||
config = testdir.Config()
|
config = testdir.Config()
|
||||||
config.pytestplugins.register(Plugin())
|
config.pluginmanager.register(Plugin())
|
||||||
config.parse([tmpdir])
|
config.parse([tmpdir])
|
||||||
col = config.getfsnode(tmpdir)
|
col = config.getfsnode(tmpdir)
|
||||||
testdir.makefile(".abc", "xyz")
|
testdir.makefile(".abc", "xyz")
|
||||||
|
|
|
@ -318,7 +318,7 @@ def test_options_on_small_file_do_not_blow_up(testdir):
|
||||||
runfiletest(opts + [path])
|
runfiletest(opts + [path])
|
||||||
|
|
||||||
def test_default_bus():
|
def test_default_bus():
|
||||||
assert py.test.config.bus is py._com.pyplugins
|
assert py.test.config.pluginmanager.comregistry is py._com.comregistry
|
||||||
|
|
||||||
@py.test.mark.todo("test for deprecation")
|
@py.test.mark.todo("test for deprecation")
|
||||||
def test_ensuretemp():
|
def test_ensuretemp():
|
||||||
|
|
|
@ -4,22 +4,22 @@ def pytest_funcarg__pickletransport(pyfuncitem):
|
||||||
return ImmutablePickleTransport()
|
return ImmutablePickleTransport()
|
||||||
|
|
||||||
def pytest_pyfunc_call(__call__, pyfuncitem, args, kwargs):
|
def pytest_pyfunc_call(__call__, pyfuncitem, args, kwargs):
|
||||||
# for each function call we patch py._com.pyplugins
|
# for each function call we patch py._com.comregistry
|
||||||
# so that the unpickling of config objects
|
# so that the unpickling of config objects
|
||||||
# (which bind to this mechanism) doesn't do harm
|
# (which bind to this mechanism) doesn't do harm
|
||||||
# usually config objects are no meant to be unpickled in
|
# usually config objects are no meant to be unpickled in
|
||||||
# the same system
|
# the same system
|
||||||
oldconfig = py.test.config
|
oldconfig = py.test.config
|
||||||
oldcom = py._com.pyplugins
|
oldcom = py._com.comregistry
|
||||||
print "setting py.test.config to None"
|
print "setting py.test.config to None"
|
||||||
py.test.config = None
|
py.test.config = None
|
||||||
py._com.pyplugins = py._com.PyPlugins()
|
py._com.comregistry = py._com.Registry()
|
||||||
try:
|
try:
|
||||||
return __call__.execute(firstresult=True)
|
return __call__.execute(firstresult=True)
|
||||||
finally:
|
finally:
|
||||||
print "setting py.test.config to", oldconfig
|
print "setting py.test.config to", oldconfig
|
||||||
py.test.config = oldconfig
|
py.test.config = oldconfig
|
||||||
py._com.pyplugins = oldcom
|
py._com.comregistry = oldcom
|
||||||
|
|
||||||
class ImmutablePickleTransport:
|
class ImmutablePickleTransport:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -195,13 +195,10 @@ def test_config__setstate__wired_correctly_in_childprocess(testdir):
|
||||||
from py.__.test.dist.mypickle import PickleChannel
|
from py.__.test.dist.mypickle import PickleChannel
|
||||||
channel = PickleChannel(channel)
|
channel = PickleChannel(channel)
|
||||||
config = channel.receive()
|
config = channel.receive()
|
||||||
assert py.test.config.pytestplugins.pyplugins == py._com.pyplugins, "pyplugins wrong"
|
assert py.test.config.pluginmanager.comregistry == py._com.comregistry, "comregistry wrong"
|
||||||
assert py.test.config.bus == py._com.pyplugins, "bus wrong"
|
|
||||||
""")
|
""")
|
||||||
channel = PickleChannel(channel)
|
channel = PickleChannel(channel)
|
||||||
config = testdir.parseconfig()
|
config = testdir.parseconfig()
|
||||||
channel.send(config)
|
channel.send(config)
|
||||||
channel.waitclose() # this will raise
|
channel.waitclose() # this will potentially raise
|
||||||
gw.exit()
|
gw.exit()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -37,11 +37,11 @@ class TestModule:
|
||||||
def test_module_participates_as_plugin(self, testdir):
|
def test_module_participates_as_plugin(self, testdir):
|
||||||
modcol = testdir.getmodulecol("")
|
modcol = testdir.getmodulecol("")
|
||||||
modcol.setup()
|
modcol.setup()
|
||||||
assert modcol.config.pytestplugins.isregistered(modcol.obj)
|
assert modcol.config.pluginmanager.isregistered(modcol.obj)
|
||||||
modcol.teardown()
|
modcol.teardown()
|
||||||
assert not modcol.config.pytestplugins.isregistered(modcol.obj)
|
assert not modcol.config.pluginmanager.isregistered(modcol.obj)
|
||||||
|
|
||||||
def test_module_considers_pytestplugins_at_import(self, testdir):
|
def test_module_considers_pluginmanager_at_import(self, testdir):
|
||||||
modcol = testdir.getmodulecol("pytest_plugins='xasdlkj',")
|
modcol = testdir.getmodulecol("pytest_plugins='xasdlkj',")
|
||||||
py.test.raises(ImportError, "modcol.obj")
|
py.test.raises(ImportError, "modcol.obj")
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ class TestFunction:
|
||||||
class Provider:
|
class Provider:
|
||||||
def pytest_funcarg__some(self, pyfuncitem):
|
def pytest_funcarg__some(self, pyfuncitem):
|
||||||
return pyfuncitem.name
|
return pyfuncitem.name
|
||||||
item.config.pytestplugins.register(Provider())
|
item.config.pluginmanager.register(Provider())
|
||||||
item.setupargs()
|
item.setupargs()
|
||||||
assert len(item.funcargs) == 1
|
assert len(item.funcargs) == 1
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ class TestFunction:
|
||||||
class Provider:
|
class Provider:
|
||||||
def pytest_funcarg__other(self, pyfuncitem):
|
def pytest_funcarg__other(self, pyfuncitem):
|
||||||
return pyfuncitem.name
|
return pyfuncitem.name
|
||||||
item.config.pytestplugins.register(Provider())
|
item.config.pluginmanager.register(Provider())
|
||||||
item.setupargs()
|
item.setupargs()
|
||||||
assert len(item.funcargs) == 1
|
assert len(item.funcargs) == 1
|
||||||
name, value = item.funcargs.popitem()
|
name, value = item.funcargs.popitem()
|
||||||
|
@ -282,7 +282,7 @@ class TestFunction:
|
||||||
return pyfuncitem.name
|
return pyfuncitem.name
|
||||||
def pytest_funcarg__other(self, pyfuncitem):
|
def pytest_funcarg__other(self, pyfuncitem):
|
||||||
return 42
|
return 42
|
||||||
item.config.pytestplugins.register(Provider())
|
item.config.pluginmanager.register(Provider())
|
||||||
item.setupargs()
|
item.setupargs()
|
||||||
assert len(item.funcargs) == 2
|
assert len(item.funcargs) == 2
|
||||||
assert item.funcargs['some'] == "test_func"
|
assert item.funcargs['some'] == "test_func"
|
||||||
|
@ -295,7 +295,7 @@ class TestFunction:
|
||||||
def pytest_funcarg__some(self, pyfuncitem):
|
def pytest_funcarg__some(self, pyfuncitem):
|
||||||
pyfuncitem.addfinalizer(lambda: l.append(42))
|
pyfuncitem.addfinalizer(lambda: l.append(42))
|
||||||
return 3
|
return 3
|
||||||
item.config.pytestplugins.register(Provider())
|
item.config.pluginmanager.register(Provider())
|
||||||
item.setupargs()
|
item.setupargs()
|
||||||
assert len(item.funcargs) == 1
|
assert len(item.funcargs) == 1
|
||||||
assert item.funcargs['some'] == 3
|
assert item.funcargs['some'] == 3
|
||||||
|
@ -317,13 +317,13 @@ class TestFunction:
|
||||||
""")
|
""")
|
||||||
item1, item2 = testdir.genitems([modcol])
|
item1, item2 = testdir.genitems([modcol])
|
||||||
modcol.setup()
|
modcol.setup()
|
||||||
assert modcol.config.pytestplugins.isregistered(modcol.obj)
|
assert modcol.config.pluginmanager.isregistered(modcol.obj)
|
||||||
item1.setupargs()
|
item1.setupargs()
|
||||||
assert item1.funcargs['something'] == "test_method"
|
assert item1.funcargs['something'] == "test_method"
|
||||||
item2.setupargs()
|
item2.setupargs()
|
||||||
assert item2.funcargs['something'] == "test_func"
|
assert item2.funcargs['something'] == "test_func"
|
||||||
modcol.teardown()
|
modcol.teardown()
|
||||||
assert not modcol.config.pytestplugins.isregistered(modcol.obj)
|
assert not modcol.config.pluginmanager.isregistered(modcol.obj)
|
||||||
|
|
||||||
class TestSorting:
|
class TestSorting:
|
||||||
def test_check_equality_and_cmp_basic(self, testdir):
|
def test_check_equality_and_cmp_basic(self, testdir):
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
import py, os
|
import py, os
|
||||||
from py.__.test.pytestplugin import PytestPlugins, canonical_names
|
from py.__.test.pytestplugin import PluginManager, canonical_names
|
||||||
from py.__.test.pytestplugin import registerplugin, importplugin
|
from py.__.test.pytestplugin import registerplugin, importplugin
|
||||||
|
|
||||||
class TestBootstrapping:
|
class TestBootstrapping:
|
||||||
def test_consider_env_fails_to_import(self, monkeypatch):
|
def test_consider_env_fails_to_import(self, monkeypatch):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
monkeypatch.setitem(os.environ, 'PYTEST_PLUGINS', 'nonexistingmodule')
|
monkeypatch.setitem(os.environ, 'PYTEST_PLUGINS', 'nonexistingmodule')
|
||||||
py.test.raises(ImportError, "plugins.consider_env()")
|
py.test.raises(ImportError, "plugins.consider_env()")
|
||||||
|
|
||||||
def test_consider_env_plugin_instantiation(self, testdir, monkeypatch):
|
def test_consider_env_plugin_instantiation(self, testdir, monkeypatch):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
testdir.syspathinsert()
|
testdir.syspathinsert()
|
||||||
testdir.makepyfile(pytest_xy123="class Xy123Plugin: pass")
|
testdir.makepyfile(pytest_xy123="class Xy123Plugin: pass")
|
||||||
monkeypatch.setitem(os.environ, 'PYTEST_PLUGINS', 'xy123')
|
monkeypatch.setitem(os.environ, 'PYTEST_PLUGINS', 'xy123')
|
||||||
|
@ -27,7 +27,7 @@ class TestBootstrapping:
|
||||||
p = testdir.makepyfile("""
|
p = testdir.makepyfile("""
|
||||||
import py
|
import py
|
||||||
def test_hello():
|
def test_hello():
|
||||||
plugin = py.test.config.pytestplugins.getplugin('x500')
|
plugin = py.test.config.pluginmanager.getplugin('x500')
|
||||||
assert plugin is not None
|
assert plugin is not None
|
||||||
""")
|
""")
|
||||||
new = str(x500.dirpath()) # "%s:%s" %(x500.dirpath(), os.environ.get('PYTHONPATH', ''))
|
new = str(x500.dirpath()) # "%s:%s" %(x500.dirpath(), os.environ.get('PYTHONPATH', ''))
|
||||||
|
@ -38,7 +38,7 @@ class TestBootstrapping:
|
||||||
extra = result.stdout.fnmatch_lines(["*1 passed in*"])
|
extra = result.stdout.fnmatch_lines(["*1 passed in*"])
|
||||||
|
|
||||||
def test_import_plugin_importname(self, testdir):
|
def test_import_plugin_importname(self, testdir):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
py.test.raises(ImportError, 'plugins.import_plugin("x.y")')
|
py.test.raises(ImportError, 'plugins.import_plugin("x.y")')
|
||||||
py.test.raises(ImportError, 'plugins.import_plugin("pytest_x.y")')
|
py.test.raises(ImportError, 'plugins.import_plugin("pytest_x.y")')
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ class TestBootstrapping:
|
||||||
assert plugin2 is plugin1
|
assert plugin2 is plugin1
|
||||||
|
|
||||||
def test_consider_module(self, testdir):
|
def test_consider_module(self, testdir):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
testdir.syspathinsert()
|
testdir.syspathinsert()
|
||||||
testdir.makepyfile(pytest_plug1="class Plug1Plugin: pass")
|
testdir.makepyfile(pytest_plug1="class Plug1Plugin: pass")
|
||||||
testdir.makepyfile(pytest_plug2="class Plug2Plugin: pass")
|
testdir.makepyfile(pytest_plug2="class Plug2Plugin: pass")
|
||||||
|
@ -73,7 +73,7 @@ class TestBootstrapping:
|
||||||
mod = py.std.new.module("x")
|
mod = py.std.new.module("x")
|
||||||
mod.pytest_plugins = "pytest_a"
|
mod.pytest_plugins = "pytest_a"
|
||||||
aplugin = testdir.makepyfile(pytest_a="""class APlugin: pass""")
|
aplugin = testdir.makepyfile(pytest_a="""class APlugin: pass""")
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
sorter = testdir.geteventrecorder(plugins)
|
sorter = testdir.geteventrecorder(plugins)
|
||||||
#syspath.prepend(aplugin.dirpath())
|
#syspath.prepend(aplugin.dirpath())
|
||||||
py.std.sys.path.insert(0, str(aplugin.dirpath()))
|
py.std.sys.path.insert(0, str(aplugin.dirpath()))
|
||||||
|
@ -87,7 +87,7 @@ class TestBootstrapping:
|
||||||
assert len(l) == 1
|
assert len(l) == 1
|
||||||
|
|
||||||
def test_consider_conftest(self, testdir):
|
def test_consider_conftest(self, testdir):
|
||||||
pp = PytestPlugins()
|
pp = PluginManager()
|
||||||
mod = testdir.makepyfile("class ConftestPlugin: hello = 1").pyimport()
|
mod = testdir.makepyfile("class ConftestPlugin: hello = 1").pyimport()
|
||||||
pp.consider_conftest(mod)
|
pp.consider_conftest(mod)
|
||||||
l = [x for x in pp.getplugins() if isinstance(x, mod.ConftestPlugin)]
|
l = [x for x in pp.getplugins() if isinstance(x, mod.ConftestPlugin)]
|
||||||
|
@ -104,11 +104,11 @@ class TestBootstrapping:
|
||||||
|
|
||||||
def test_consider_conftest_deps(self, testdir):
|
def test_consider_conftest_deps(self, testdir):
|
||||||
mod = testdir.makepyfile("pytest_plugins='xyz'").pyimport()
|
mod = testdir.makepyfile("pytest_plugins='xyz'").pyimport()
|
||||||
pp = PytestPlugins()
|
pp = PluginManager()
|
||||||
py.test.raises(ImportError, "pp.consider_conftest(mod)")
|
py.test.raises(ImportError, "pp.consider_conftest(mod)")
|
||||||
|
|
||||||
def test_registry(self):
|
def test_registry(self):
|
||||||
pp = PytestPlugins()
|
pp = PluginManager()
|
||||||
a1, a2 = object(), object()
|
a1, a2 = object(), object()
|
||||||
pp.register(a1)
|
pp.register(a1)
|
||||||
assert pp.isregistered(a1)
|
assert pp.isregistered(a1)
|
||||||
|
@ -150,7 +150,7 @@ class TestPytestPluginInteractions:
|
||||||
""")
|
""")
|
||||||
config = Config()
|
config = Config()
|
||||||
config._conftest.importconftest(p)
|
config._conftest.importconftest(p)
|
||||||
print config.pytestplugins.getplugins()
|
print config.pluginmanager.getplugins()
|
||||||
config.parse([])
|
config.parse([])
|
||||||
assert not config.option.test123
|
assert not config.option.test123
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ class TestPytestPluginInteractions:
|
||||||
from py.__.test.config import Config
|
from py.__.test.config import Config
|
||||||
config = Config()
|
config = Config()
|
||||||
config.parse([])
|
config.parse([])
|
||||||
config.pytestplugins.do_configure(config=config)
|
config.pluginmanager.do_configure(config=config)
|
||||||
assert not hasattr(config.option, 'test123')
|
assert not hasattr(config.option, 'test123')
|
||||||
p = testdir.makepyfile("""
|
p = testdir.makepyfile("""
|
||||||
class ConftestPlugin:
|
class ConftestPlugin:
|
||||||
|
@ -179,30 +179,30 @@ class TestPytestPluginInteractions:
|
||||||
def xyz(self, obj):
|
def xyz(self, obj):
|
||||||
events.append(obj)
|
events.append(obj)
|
||||||
|
|
||||||
config.bus.register(A())
|
config.pluginmanager.register(A())
|
||||||
assert len(l) == 0
|
assert len(l) == 0
|
||||||
config.pytestplugins.do_configure(config=config)
|
config.pluginmanager.do_configure(config=config)
|
||||||
assert len(l) == 1
|
assert len(l) == 1
|
||||||
config.bus.register(A()) # this should lead to a configured() plugin
|
config.pluginmanager.register(A()) # this should lead to a configured() plugin
|
||||||
assert len(l) == 2
|
assert len(l) == 2
|
||||||
assert l[0] != l[1]
|
assert l[0] != l[1]
|
||||||
|
|
||||||
config.bus.call_each("xyz", obj=42)
|
config.pluginmanager.call_each("xyz", obj=42)
|
||||||
assert len(events) == 2
|
assert len(events) == 2
|
||||||
assert events == [42,42]
|
assert events == [42,42]
|
||||||
|
|
||||||
config.pytestplugins.do_unconfigure(config=config)
|
config.pluginmanager.do_unconfigure(config=config)
|
||||||
config.bus.register(A())
|
config.pluginmanager.register(A())
|
||||||
assert len(l) == 2
|
assert len(l) == 2
|
||||||
|
|
||||||
def test_MultiCall(self):
|
def test_MultiCall(self):
|
||||||
pp = PytestPlugins()
|
pp = PluginManager()
|
||||||
assert hasattr(pp, 'MultiCall')
|
assert hasattr(pp, 'MultiCall')
|
||||||
|
|
||||||
# lower level API
|
# lower level API
|
||||||
|
|
||||||
def test_getfirst(self):
|
def test_getfirst(self):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
class My1:
|
class My1:
|
||||||
x = 1
|
x = 1
|
||||||
assert plugins.getfirst("x") is None
|
assert plugins.getfirst("x") is None
|
||||||
|
@ -210,7 +210,7 @@ class TestPytestPluginInteractions:
|
||||||
assert plugins.getfirst("x") == 1
|
assert plugins.getfirst("x") == 1
|
||||||
|
|
||||||
def test_call_each(self):
|
def test_call_each(self):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
class My:
|
class My:
|
||||||
def method(self, arg):
|
def method(self, arg):
|
||||||
pass
|
pass
|
||||||
|
@ -221,7 +221,7 @@ class TestPytestPluginInteractions:
|
||||||
py.test.raises(TypeError, 'plugins.call_each("method", arg=42, s=13)')
|
py.test.raises(TypeError, 'plugins.call_each("method", arg=42, s=13)')
|
||||||
|
|
||||||
def test_call_firstresult(self):
|
def test_call_firstresult(self):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
class My1:
|
class My1:
|
||||||
def method(self):
|
def method(self):
|
||||||
pass
|
pass
|
||||||
|
@ -241,7 +241,7 @@ class TestPytestPluginInteractions:
|
||||||
assert plugins.call_firstresult("method") == True
|
assert plugins.call_firstresult("method") == True
|
||||||
|
|
||||||
def test_listattr(self):
|
def test_listattr(self):
|
||||||
plugins = PytestPlugins()
|
plugins = PluginManager()
|
||||||
class My2:
|
class My2:
|
||||||
x = 42
|
x = 42
|
||||||
plugins.register(My2())
|
plugins.register(My2())
|
||||||
|
@ -267,7 +267,7 @@ class TestPytestPluginInteractions:
|
||||||
return x+0
|
return x+0
|
||||||
""")
|
""")
|
||||||
l = []
|
l = []
|
||||||
call = modcol.config.pytestplugins.setupcall(modcol, "pytest_method", 1)
|
call = modcol.config.pluginmanager.setupcall(modcol, "pytest_method", 1)
|
||||||
assert len(call.methods) == 3
|
assert len(call.methods) == 3
|
||||||
results = call.execute()
|
results = call.execute()
|
||||||
assert results == [1,2,2]
|
assert results == [1,2,2]
|
||||||
|
|
Loading…
Reference in New Issue