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