[svn r63566] the InternalException event class bites the dust.

--HG--
branch : trunk
This commit is contained in:
hpk 2009-04-03 16:18:47 +02:00
parent d1946ae978
commit 45e0499f10
11 changed files with 31 additions and 33 deletions

View File

@ -140,7 +140,7 @@ class DSession(Session):
except KeyboardInterrupt:
exitstatus = outcome.EXIT_INTERRUPTED
except:
self.bus.notify("internalerror", event.InternalException())
self.config.pytestplugins.notify_exception()
exitstatus = outcome.EXIT_INTERNALERROR
self.config.bus.unregister(loopstate)
if exitstatus == 0 and self._testsfailed:

View File

@ -109,7 +109,7 @@ class TestMasterSlaveConnection:
node = mysetup.makenode(item.config)
node.channel.close()
py.test.raises(IOError, "node.send(item)")
#ev = self.geteventargs(event.InternalException)
#ev = self.getevents("internalerror")
#assert ev.excinfo.errisinstance(IOError)
def test_send_one(self, testdir, mysetup):

View File

@ -63,7 +63,7 @@ class TXNode(object):
except:
excinfo = py.code.ExceptionInfo()
print "!" * 20, excinfo
self.notify("internalerror", event.InternalException(excinfo))
self.notify_internal(excinfo)
def send(self, item):
assert item is not None
@ -127,7 +127,8 @@ class SlaveNode(object):
except KeyboardInterrupt:
raise
except:
self.sendevent("internalerror", event.InternalException())
er = py.code.ExceptionInfo().getrepr(funcargs=True, showlocals=True)
self.sendevent("internalerror", excrepr=er)
raise
def runtest(self, item):

View File

@ -18,16 +18,6 @@ def timestamp():
class NOP(BaseEvent):
pass
# ----------------------------------------------------------------------
# Basic Live Reporting Events
# ----------------------------------------------------------------------
class InternalException(BaseEvent):
def __init__(self, excinfo=None):
if excinfo is None:
excinfo = py.code.ExceptionInfo()
self.repr = excinfo.getrepr(funcargs=True, showlocals=True)
# ----------------------------------------------------------------------
# Events related to collecting and executing test Items
# ----------------------------------------------------------------------
@ -36,7 +26,6 @@ class Deselected(BaseEvent):
def __init__(self, items):
self.items = items
class BaseReport(BaseEvent):
def toterminal(self, out):
longrepr = self.longrepr

View File

@ -73,7 +73,7 @@ class Events:
def pyevent__trace(self, category, msg):
""" called for tracing events. """
def pyevent__internalerror(self, event):
def pyevent__internalerror(self, excrepr):
""" called for internal errors. """
def pyevent__itemstart(self, item, node=None):

View File

@ -264,7 +264,7 @@ class ParsedEvent:
self.__dict__ = locals.copy()
def __repr__(self):
return "<Event %r>" %(self.__dict__,)
return "<ParsedEvent %r>" %(self.__dict__,)
class EventRecorder(object):
def __init__(self, pyplugins, debug=False): # True):
@ -288,6 +288,7 @@ class EventRecorder(object):
raise KeyError("popevent: %r not found in %r" %(name, self.events))
def getevents(self, eventname):
""" return list of ParsedEvent instances matching the given eventname. """
method = self.geteventmethod(eventname)
l = []
for event in self.events:

View File

@ -178,10 +178,10 @@ class ResultDB(object):
if not event.passed:
self.log_outcome(event)
def pyevent__internalerror(self, event):
path = event.repr.reprcrash.path # fishing :(
self.write_log_entry(event, '!', path, str(event.repr))
def pyevent__internalerror(self, excrepr):
path = excrepr.reprcrash.path
XXX # we don't have an event
self.write_log_entry(event, '!', path, str(excrepr))
SQL_CREATE_TABLES = """
create table pytest_results (
@ -368,9 +368,9 @@ class TestWithFunctionIntegration:
try:
raise ValueError
except ValueError:
excinfo = event.InternalException()
excinfo = py.code.ExceptionInfo()
reslog = ResultDB(StringIO.StringIO())
reslog.pyevent("internalerror", (excinfo,), {})
reslog.pyevent("internalerror", (excinfo.getrepr(),), {})
entry = reslog.logfile.getvalue()
entry_lines = entry.splitlines()

View File

@ -90,8 +90,9 @@ class ResultLog(object):
if not event.passed:
self.log_outcome(event)
elif eventname == "internalerror":
path = event.repr.reprcrash.path # fishing :(
self.write_log_entry('!', path, str(event.repr))
excrepr = args[0]
path = excrepr.reprcrash.path # fishing :(
self.write_log_entry('!', path, str(excrepr))
# ===============================================================================
@ -224,9 +225,9 @@ class TestWithFunctionIntegration:
try:
raise ValueError
except ValueError:
excinfo = event.InternalException()
excinfo = py.code.ExceptionInfo()
reslog = ResultLog(StringIO.StringIO())
reslog.pyevent("internalerror", (excinfo,), {})
reslog.pyevent("internalerror", (excinfo.getrepr(),), {})
entry = reslog.logfile.getvalue()
entry_lines = entry.splitlines()

View File

@ -82,9 +82,9 @@ class TerminalReporter:
else:
return "???", dict(red=True)
def pyevent__internalerror(self, event):
for line in str(event.repr).split("\n"):
self.write_line("InternalException: " + line)
def pyevent__internalerror(self, excrepr):
for line in str(excrepr).split("\n"):
self.write_line("INTERNALERROR> " + line)
def pyevent__gwmanage_newgateway(self, gateway, rinfo):
#self.write_line("%s instantiated gateway from spec %r" %(gateway.id, gateway.spec._spec))
@ -438,9 +438,9 @@ 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(event.InternalException(excinfo))
rep.pyevent__internalerror(excinfo.getrepr())
linecomp.assert_contains_lines([
"InternalException: >*raise ValueError*"
"INTERNALERROR> *raise ValueError*"
])
def test_gwmanage_events(self, testdir, linecomp):

View File

@ -77,6 +77,12 @@ class PytestPlugins(object):
def notify(self, eventname, *args, **kwargs):
return self.pyplugins.notify(eventname, *args, **kwargs)
def notify_exception(self, excinfo=None):
if excinfo is None:
excinfo = py.code.ExceptionInfo()
excrepr = excinfo.getrepr(funcargs=True, showlocals=True)
return self.notify("internalerror", excrepr)
def do_addoption(self, parser):
methods = self.pyplugins.listattr("pytest_addoption", reverse=True)
mc = py._com.MultiCall(methods, parser=parser)

View File

@ -121,7 +121,7 @@ class Session(object):
exitstatus = outcome.EXIT_INTERRUPTED
except:
captured_excinfo = py.code.ExceptionInfo()
self.bus.notify("internalerror", event.InternalException(captured_excinfo))
self.config.pytestplugins.notify_exception(captured_excinfo)
exitstatus = outcome.EXIT_INTERNALERROR
if exitstatus == 0 and self._testsfailed:
exitstatus = outcome.EXIT_TESTSFAILED