(fixes issue85) correctly write non-ascii test output to junitxml files, refine some internal methods for it

--HG--
branch : trunk
This commit is contained in:
holger krekel
2010-04-27 15:15:43 +02:00
parent f6a04b92d2
commit c8d78177b9
7 changed files with 68 additions and 17 deletions

View File

@@ -43,6 +43,10 @@ class LogXML(object):
def _closetestcase(self):
self.test_logs.append("</testcase>")
def appendlog(self, fmt, *args):
args = tuple([py.xml.escape(arg) for arg in args])
self.test_logs.append(fmt % args)
def append_pass(self, report):
self.passed += 1
@@ -51,10 +55,9 @@ class LogXML(object):
def append_failure(self, report):
self._opentestcase(report)
s = py.xml.escape(str(report.longrepr))
#msg = str(report.longrepr.reprtraceback.extraline)
self.test_logs.append(
'<failure message="test failure">%s</failure>' % (s))
self.appendlog('<failure message="test failure">%s</failure>',
report.longrepr)
self._closetestcase()
self.failed += 1
@@ -69,33 +72,30 @@ class LogXML(object):
def append_collect_failure(self, report):
self._opentestcase_collectfailure(report)
s = py.xml.escape(str(report.longrepr))
#msg = str(report.longrepr.reprtraceback.extraline)
self.test_logs.append(
'<failure message="collection failure">%s</failure>' % (s))
self.appendlog('<failure message="collection failure">%s</failure>',
report.longrepr)
self._closetestcase()
self.errors += 1
def append_collect_skipped(self, report):
self._opentestcase_collectfailure(report)
s = py.xml.escape(str(report.longrepr))
#msg = str(report.longrepr.reprtraceback.extraline)
self.test_logs.append(
'<skipped message="collection skipped">%s</skipped>' % (s))
self.appendlog('<skipped message="collection skipped">%s</skipped>',
report.longrepr)
self._closetestcase()
self.skipped += 1
def append_error(self, report):
self._opentestcase(report)
s = py.xml.escape(str(report.longrepr))
self.test_logs.append(
'<error message="test setup failure">%s</error>' % s)
self.appendlog('<error message="test setup failure">%s</error>',
report.longrepr)
self._closetestcase()
self.errors += 1
def append_skipped(self, report):
self._opentestcase(report)
self.test_logs.append("<skipped/>")
self.appendlog("<skipped/>")
self._closetestcase()
self.skipped += 1
@@ -126,7 +126,7 @@ class LogXML(object):
def pytest_internalerror(self, excrepr):
self.errors += 1
data = py.xml.escape(str(excrepr))
data = py.xml.escape(excrepr)
self.test_logs.append(
'\n<testcase classname="pytest" name="internal">'
' <error message="internal error">'
@@ -136,7 +136,11 @@ class LogXML(object):
self.suite_start_time = time.time()
def pytest_sessionfinish(self, session, exitstatus, __multicall__):
logfile = open(self.logfile, 'w', 1) # line buffered
if py.std.sys.version_info[0] < 3:
logfile = py.std.codecs.open(self.logfile, 'w', encoding='utf-8')
else:
logfile = open(self.logfile, 'w', encoding='utf-8')
suite_stop_time = time.time()
suite_time_delta = suite_stop_time - self.suite_start_time
numtests = self.passed + self.failed