parent
2dd3ea7041
commit
0c4fc99a6f
|
@ -42,7 +42,7 @@ class Config(object):
|
|||
self.pytestplugins = pytestplugins
|
||||
self._conftest = Conftest(onimport=self._onimportconftest)
|
||||
self._setupstate = SetupState()
|
||||
self.api = pytestplugins._getapi()
|
||||
self.api = pytestplugins.api
|
||||
|
||||
def _onimportconftest(self, conftestmodule):
|
||||
self.trace("loaded conftestmodule %r" %(conftestmodule,))
|
||||
|
|
|
@ -15,7 +15,7 @@ class NodeManager(object):
|
|||
self._nodesready = py.std.threading.Event()
|
||||
|
||||
def trace(self, msg):
|
||||
self.config.bus.notify("trace", "nodemanage", msg)
|
||||
self.config.api.pytest_trace(category="nodemanage", msg=msg)
|
||||
|
||||
def config_getignores(self):
|
||||
return self.config.getconftest_pathlist("rsyncignore")
|
||||
|
|
|
@ -198,15 +198,6 @@ class TestDSession:
|
|||
session.loop_once(loopstate)
|
||||
assert len(session.node2pending) == 1
|
||||
|
||||
def test_event_propagation(self, testdir):
|
||||
item = testdir.getitem("def test_func(): pass")
|
||||
session = DSession(item.config)
|
||||
|
||||
evrec = testdir.geteventrecorder(session.bus)
|
||||
session.queueevent("NOP", 42)
|
||||
session.loop_once(session._initloopstate([]))
|
||||
assert evrec.getcall('NOP')
|
||||
|
||||
def runthrough(self, item):
|
||||
session = DSession(item.config)
|
||||
node = MockNode()
|
||||
|
|
|
@ -104,11 +104,10 @@ class TestNodeManager:
|
|||
config = py.test.config._reparse([source, '--debug'])
|
||||
assert config.option.debug
|
||||
nodemanager = NodeManager(config, specs)
|
||||
sorter = testdir.geteventrecorder(config.bus)
|
||||
sorter = testdir.geteventrecorder(config.bus).callrecorder
|
||||
nodemanager.setup_nodes(putevent=[].append)
|
||||
for spec in nodemanager.gwmanager.specs:
|
||||
l = sorter.getcalls("trace")
|
||||
print sorter.events
|
||||
l = sorter.getcalls("pytest_trace")
|
||||
assert l
|
||||
nodemanager.teardown_nodes()
|
||||
|
||||
|
|
|
@ -9,9 +9,6 @@ class EventQueue:
|
|||
self.queue = queue
|
||||
bus.register(self)
|
||||
|
||||
def pyevent(self, eventname, args, kwargs):
|
||||
self.queue.put((eventname, args, kwargs))
|
||||
|
||||
def geteventargs(self, eventname, timeout=2.0):
|
||||
events = []
|
||||
while 1:
|
||||
|
@ -30,7 +27,7 @@ class EventQueue:
|
|||
return args
|
||||
return kwargs
|
||||
events.append(name)
|
||||
if name == "internalerror":
|
||||
if name == "pytest_internalerror":
|
||||
print str(kwargs["excrepr"])
|
||||
|
||||
class MySetup:
|
||||
|
@ -113,7 +110,7 @@ class TestMasterSlaveConnection:
|
|||
node = mysetup.makenode(item.config)
|
||||
node.channel.close()
|
||||
py.test.raises(IOError, "node.send(item)")
|
||||
#ev = self.getcalls("internalerror")
|
||||
#ev = self.getcalls(pytest_internalerror)
|
||||
#assert ev.excinfo.errisinstance(IOError)
|
||||
|
||||
def test_send_one(self, testdir, mysetup):
|
||||
|
|
|
@ -130,5 +130,5 @@ class SlaveNode(object):
|
|||
raise
|
||||
except:
|
||||
er = py.code.ExceptionInfo().getrepr(funcargs=True, showlocals=True)
|
||||
self.sendevent("internalerror", excrepr=er)
|
||||
self.sendevent("pytest_internalerror", excrepr=er)
|
||||
raise
|
||||
|
|
|
@ -113,19 +113,9 @@ class PluginHooks:
|
|||
def pytest_looponfailinfo(self, failreports, rootdirs):
|
||||
""" info for repeating failing tests. """
|
||||
|
||||
|
||||
class Events:
|
||||
# Events
|
||||
def pyevent(self, eventname, args, kwargs):
|
||||
""" generically called for each notification event. """
|
||||
|
||||
def pyevent__NOP(self, *args, **kwargs):
|
||||
""" the no-operation call. """
|
||||
|
||||
def pyevent__trace(self, category, msg):
|
||||
""" called for tracing events. """
|
||||
|
||||
def pyevent__internalerror(self, excrepr):
|
||||
def pytest_internalerror(self, excrepr):
|
||||
""" called for internal errors. """
|
||||
|
||||
def pytest_trace(self, category, msg):
|
||||
""" called for tracing events. """
|
||||
|
||||
|
|
|
@ -45,7 +45,6 @@ class PluginTester(Support):
|
|||
pm = py.test._PytestPlugins()
|
||||
methods = collectattr(pluginclass)
|
||||
hooks = collectattr(api.PluginHooks)
|
||||
hooks.update(collectattr(api.Events))
|
||||
getargs = py.std.inspect.getargs
|
||||
|
||||
def isgenerichook(name):
|
||||
|
@ -78,7 +77,7 @@ class PluginTester(Support):
|
|||
if fail:
|
||||
py.test.fail("Plugin API error")
|
||||
|
||||
def collectattr(obj, prefixes=("pytest_", "pyevent__")):
|
||||
def collectattr(obj, prefixes=("pytest_",)):
|
||||
methods = {}
|
||||
for apiname in vars(obj):
|
||||
for prefix in prefixes:
|
||||
|
|
|
@ -285,13 +285,6 @@ class EventRecorder(object):
|
|||
self.debug = debug
|
||||
pyplugins.register(self)
|
||||
|
||||
def pyevent(self, name, args, kwargs):
|
||||
if name == "plugin_registered" and args == (self,):
|
||||
return
|
||||
if self.debug:
|
||||
print "[event: %s]: %s **%s" %(name, ", ".join(map(str, args)), kwargs,)
|
||||
self.events.append(Event(name, args, kwargs))
|
||||
|
||||
def popcall(self, name):
|
||||
for i, event in py.builtin.enumerate(self.events):
|
||||
if event.name == name:
|
||||
|
|
|
@ -349,7 +349,7 @@ class TestWithFunctionIntegration:
|
|||
except ValueError:
|
||||
excinfo = py.code.ExceptionInfo()
|
||||
reslog = ResultDB(StringIO.StringIO())
|
||||
reslog.pyevent__internalerror(excinfo.getrepr)
|
||||
reslog.pytest_internalerror(excinfo.getrepr)
|
||||
entry = reslog.logfile.getvalue()
|
||||
entry_lines = entry.splitlines()
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ class ResultLog(object):
|
|||
longrepr = str(rep.longrepr.reprcrash)
|
||||
self.log_outcome(rep, code, longrepr)
|
||||
|
||||
def pyevent__internalerror(self, excrepr):
|
||||
def pytest_internalerror(self, excrepr):
|
||||
path = excrepr.reprcrash.path
|
||||
self.write_log_entry(path, '!', str(excrepr))
|
||||
|
||||
|
@ -214,7 +214,7 @@ class TestWithFunctionIntegration:
|
|||
except ValueError:
|
||||
excinfo = py.code.ExceptionInfo()
|
||||
reslog = ResultLog(StringIO.StringIO())
|
||||
reslog.pyevent__internalerror(excinfo.getrepr())
|
||||
reslog.pytest_internalerror(excinfo.getrepr())
|
||||
entry = reslog.logfile.getvalue()
|
||||
entry_lines = entry.splitlines()
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ class TerminalReporter:
|
|||
else:
|
||||
return "???", dict(red=True)
|
||||
|
||||
def pyevent__internalerror(self, excrepr):
|
||||
def pytest_internalerror(self, excrepr):
|
||||
for line in str(excrepr).split("\n"):
|
||||
self.write_line("INTERNALERROR> " + line)
|
||||
|
||||
|
@ -131,7 +131,7 @@ class TerminalReporter:
|
|||
if error:
|
||||
self.write_line("%s node down, error: %s" %(node.gateway.id, error))
|
||||
|
||||
def pyevent__trace(self, category, msg):
|
||||
def pytest_trace(self, category, msg):
|
||||
if self.config.option.debug or \
|
||||
self.config.option.traceconfig and category.find("config") != -1:
|
||||
self.write_line("[%s] %s" %(category, msg))
|
||||
|
@ -437,7 +437,7 @@ class TestTerminal:
|
|||
modcol = testdir.getmodulecol("def test_one(): pass")
|
||||
rep = TerminalReporter(modcol.config, file=linecomp.stringio)
|
||||
excinfo = py.test.raises(ValueError, "raise ValueError('hello')")
|
||||
rep.pyevent__internalerror(excinfo.getrepr())
|
||||
rep.pytest_internalerror(excinfo.getrepr())
|
||||
linecomp.assert_contains_lines([
|
||||
"INTERNALERROR> *raise ValueError*"
|
||||
])
|
||||
|
|
|
@ -12,9 +12,9 @@ class PytestPlugins(object):
|
|||
self.MultiCall = self.pyplugins.MultiCall
|
||||
self._plugins = {}
|
||||
|
||||
def _getapi(self):
|
||||
return py._com.PluginAPI(apiclass=api.PluginHooks,
|
||||
plugins=self.pyplugins)
|
||||
self.api = py._com.PluginAPI(
|
||||
apiclass=api.PluginHooks,
|
||||
plugins=self.pyplugins)
|
||||
|
||||
def register(self, plugin):
|
||||
self.pyplugins.register(plugin)
|
||||
|
@ -86,7 +86,7 @@ class PytestPlugins(object):
|
|||
if excinfo is None:
|
||||
excinfo = py.code.ExceptionInfo()
|
||||
excrepr = excinfo.getrepr(funcargs=True, showlocals=True)
|
||||
return self.notify("internalerror", excrepr=excrepr)
|
||||
return self.api.pytest_internalerror(excrepr=excrepr)
|
||||
|
||||
def do_addoption(self, parser):
|
||||
methods = self.pyplugins.listattr("pytest_addoption", reverse=True)
|
||||
|
|
|
@ -176,7 +176,7 @@ class TestPytestPluginInteractions:
|
|||
class A:
|
||||
def pytest_configure(self, config):
|
||||
l.append(self)
|
||||
def pyevent__hello(self, obj):
|
||||
def xyz(self, obj):
|
||||
events.append(obj)
|
||||
|
||||
config.bus.register(A())
|
||||
|
@ -187,7 +187,7 @@ class TestPytestPluginInteractions:
|
|||
assert len(l) == 2
|
||||
assert l[0] != l[1]
|
||||
|
||||
config.bus.notify("hello", 42)
|
||||
config.bus.call_each("xyz", obj=42)
|
||||
assert len(events) == 2
|
||||
assert events == [42,42]
|
||||
|
||||
|
|
Loading…
Reference in New Issue