[py-svn] commit/pytest: hpk42: fix #59: provide better Jenkins stdout and stderr sections
Bitbucket
commits-noreply at bitbucket.org
Tue Jul 12 23:09:41 CEST 2011
1 new changeset in pytest:
http://bitbucket.org/hpk42/pytest/changeset/d32c80505d56/
changeset: d32c80505d56
user: hpk42
date: 2011-07-12 23:09:03
summary: fix #59: provide better Jenkins stdout and stderr sections
affected #: 9 files (1.5 KB)
--- a/CHANGELOG Tue Jul 12 11:13:34 2011 -0500
+++ b/CHANGELOG Tue Jul 12 23:09:03 2011 +0200
@@ -1,6 +1,7 @@
Changes between 2.1.0 and 2.1.1.DEV
----------------------------------------------
+- fix issue59: provide system-out/err tags for junitxml output
- fix assertion rewriting on boolean operations with 3 or more operands
Changes between 2.0.3 and 2.1.0.DEV
--- a/_pytest/__init__.py Tue Jul 12 11:13:34 2011 -0500
+++ b/_pytest/__init__.py Tue Jul 12 23:09:03 2011 +0200
@@ -1,2 +1,2 @@
#
-__version__ = '2.1.1.dev1'
+__version__ = '2.1.1.dev2'
--- a/_pytest/capture.py Tue Jul 12 11:13:34 2011 -0500
+++ b/_pytest/capture.py Tue Jul 12 23:09:03 2011 +0200
@@ -12,12 +12,9 @@
help="shortcut for --capture=no.")
def addouterr(rep, outerr):
- repr = getattr(rep, 'longrepr', None)
- if not hasattr(repr, 'addsection'):
- return
for secname, content in zip(["out", "err"], outerr):
if content:
- repr.addsection("Captured std%s" % secname, content.rstrip())
+ rep.sections.append(("Captured std%s" % secname, content))
def pytest_unconfigure(config):
# registered in config.py during early conftest.py loading
--- a/_pytest/junitxml.py Tue Jul 12 11:13:34 2011 -0500
+++ b/_pytest/junitxml.py Tue Jul 12 23:09:03 2011 +0200
@@ -114,8 +114,16 @@
'<skipped message="xfail-marked test passes unexpectedly"/>')
self.skipped += 1
else:
- self.appendlog('<failure message="test failure">%s</failure>',
- report.longrepr)
+ sec = dict(report.sections)
+ fmt = '<failure message="test failure">%s'
+ args = [report.longrepr]
+ for name in ('out', 'err'):
+ content = sec.get("Captured std%s" % name)
+ if content:
+ fmt += "<system-%s>%%s</system-%s>" % (name, name)
+ args.append(content)
+ fmt += "</failure>"
+ self.appendlog(fmt, *args)
self.failed += 1
self._closetestcase()
--- a/_pytest/runner.py Tue Jul 12 11:13:34 2011 -0500
+++ b/_pytest/runner.py Tue Jul 12 23:09:03 2011 +0200
@@ -167,7 +167,7 @@
they fail).
"""
def __init__(self, nodeid, location,
- keywords, outcome, longrepr, when):
+ keywords, outcome, longrepr, when, sections=()):
#: normalized collection node id
self.nodeid = nodeid
@@ -189,6 +189,10 @@
#: one of 'setup', 'call', 'teardown' to indicate runtest phase.
self.when = when
+ #: list of (secname, data) extra information which needs to
+ #: marshallable
+ self.sections = list(sections)
+
def __repr__(self):
return "<TestReport %r when=%r outcome=%r>" % (
self.nodeid, self.when, self.outcome)
@@ -198,6 +202,7 @@
when = "teardown"
def __init__(self, longrepr):
self.longrepr = longrepr
+ self.sections = []
def pytest_make_collect_report(collector):
call = CallInfo(collector._memocollect, "memocollect")
@@ -219,11 +224,12 @@
getattr(call, 'result', None))
class CollectReport(BaseReport):
- def __init__(self, nodeid, outcome, longrepr, result):
+ def __init__(self, nodeid, outcome, longrepr, result, sections=()):
self.nodeid = nodeid
self.outcome = outcome
self.longrepr = longrepr
self.result = result or []
+ self.sections = list(sections)
@property
def location(self):
--- a/_pytest/terminal.py Tue Jul 12 11:13:34 2011 -0500
+++ b/_pytest/terminal.py Tue Jul 12 23:09:03 2011 +0200
@@ -393,7 +393,7 @@
else:
msg = self._getfailureheadline(rep)
self.write_sep("_", msg)
- rep.toterminal(self._tw)
+ self._outrep_summary(rep)
def summary_errors(self):
if self.config.option.tbstyle != "no":
@@ -411,7 +411,15 @@
elif rep.when == "teardown":
msg = "ERROR at teardown of " + msg
self.write_sep("_", msg)
- rep.toterminal(self._tw)
+ self._outrep_summary(rep)
+
+ def _outrep_summary(self, rep):
+ rep.toterminal(self._tw)
+ for secname, content in rep.sections:
+ self._tw.sep("-", secname)
+ if content[-1:] == "\n":
+ content = content[:-1]
+ self._tw.line(content)
def summary_stats(self):
session_duration = py.std.time.time() - self._sessionstarttime
--- a/setup.py Tue Jul 12 11:13:34 2011 -0500
+++ b/setup.py Tue Jul 12 23:09:03 2011 +0200
@@ -24,7 +24,7 @@
name='pytest',
description='py.test: simple powerful testing with Python',
long_description = long_description,
- version='2.1.1.dev1',
+ version='2.1.1.dev2',
url='http://pytest.org',
license='MIT license',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
@@ -32,7 +32,7 @@
author_email='holger at merlinux.eu',
entry_points= make_entry_points(),
# the following should be enabled for release
- install_requires=['py>=1.4.4'],
+ install_requires=['py>=1.4.5.dev1'],
classifiers=['Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
--- a/testing/test_junitxml.py Tue Jul 12 11:13:34 2011 -0500
+++ b/testing/test_junitxml.py Tue Jul 12 23:09:03 2011 +0200
@@ -131,7 +131,14 @@
assert "Division" in fnode.toxml()
def test_failure_function(self, testdir):
- testdir.makepyfile("def test_fail(): raise ValueError(42)")
+ testdir.makepyfile("""
+ import sys
+ def test_fail():
+ print ("hello-stdout")
+ sys.stderr.write("hello-stderr\\n")
+ raise ValueError(42)
+ """)
+
result, dom = runandparse(testdir)
assert result.ret
node = dom.getElementsByTagName("testsuite")[0]
@@ -143,6 +150,10 @@
fnode = tnode.getElementsByTagName("failure")[0]
assert_attr(fnode, message="test failure")
assert "ValueError" in fnode.toxml()
+ systemout = fnode.getElementsByTagName("system-out")[0]
+ assert "hello-stdout" in systemout.toxml()
+ systemerr = fnode.getElementsByTagName("system-err")[0]
+ assert "hello-stderr" in systemerr.toxml()
def test_failure_escape(self, testdir):
testdir.makepyfile("""
--- a/testing/test_terminal.py Tue Jul 12 11:13:34 2011 -0500
+++ b/testing/test_terminal.py Tue Jul 12 23:09:03 2011 +0200
@@ -258,10 +258,13 @@
def test_repr_python_version(monkeypatch):
- monkeypatch.setattr(sys, 'version_info', (2, 5, 1, 'final', 0))
- assert repr_pythonversion() == "2.5.1-final-0"
- py.std.sys.version_info = x = (2,3)
- assert repr_pythonversion() == str(x)
+ try:
+ monkeypatch.setattr(sys, 'version_info', (2, 5, 1, 'final', 0))
+ assert repr_pythonversion() == "2.5.1-final-0"
+ py.std.sys.version_info = x = (2,3)
+ assert repr_pythonversion() == str(x)
+ finally:
+ monkeypatch.undo() # do this early as pytest can get confused
class TestFixtureReporting:
def test_setup_fixture_error(self, testdir):
Repository URL: https://bitbucket.org/hpk42/pytest/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the pytest-commit
mailing list