summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorholger krekel <holger@merlinux.eu>2013-10-21 16:54:25 +0200
committerholger krekel <holger@merlinux.eu>2013-10-21 16:54:25 +0200
commitcf9d34538266de8c55d49f8b391850d746b41426 (patch)
tree95b3259be8c726f1cc68f6f1c46f0d52dc0414a3
parent0d8392bc45c812c7fe90ab38792238ac7a2af3c9 (diff)
downloadpytest-cf9d34538266de8c55d49f8b391850d746b41426.tar.gz
fix unicode handling with junitxml, fixes issue368.
-rw-r--r--CHANGELOG2
-rw-r--r--_pytest/__init__.py2
-rw-r--r--_pytest/junitxml.py15
-rw-r--r--setup.py2
-rw-r--r--testing/test_junitxml.py27
5 files changed, 36 insertions, 12 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 8401f361d..1ad13fb41 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,8 @@ Changes between 2.4.2 and 2.4.3
- fix unicode handling with new monkeypatch.setattr(import_path, value)
API. Thanks Rob Dennis. Fixes issue371.
+- fix unicode handling with junitxml, fixes issue368.
+
- In assertion rewriting mode on Python 2, fix the detection of coding
cookies. See issue #330.
diff --git a/_pytest/__init__.py b/_pytest/__init__.py
index 9442951b6..f615b5252 100644
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
#
-__version__ = '2.4.3.dev1'
+__version__ = '2.4.3.dev2'
diff --git a/_pytest/junitxml.py b/_pytest/junitxml.py
index 88c16f1f2..550ae24fd 100644
--- a/_pytest/junitxml.py
+++ b/_pytest/junitxml.py
@@ -9,7 +9,6 @@ import re
import sys
import time
-
# Python 2.X and 3.X compatibility
try:
unichr(65)
@@ -131,31 +130,31 @@ class LogXML(object):
self.skipped += 1
else:
fail = Junit.failure(message="test failure")
- fail.append(str(report.longrepr))
+ fail.append(unicode(report.longrepr))
self.append(fail)
self.failed += 1
self._write_captured_output(report)
def append_collect_failure(self, report):
#msg = str(report.longrepr.reprtraceback.extraline)
- self.append(Junit.failure(str(report.longrepr),
+ self.append(Junit.failure(unicode(report.longrepr),
message="collection failure"))
self.errors += 1
def append_collect_skipped(self, report):
#msg = str(report.longrepr.reprtraceback.extraline)
- self.append(Junit.skipped(str(report.longrepr),
+ self.append(Junit.skipped(unicode(report.longrepr),
message="collection skipped"))
self.skipped += 1
def append_error(self, report):
- self.append(Junit.error(str(report.longrepr),
+ self.append(Junit.error(unicode(report.longrepr),
message="test setup failure"))
self.errors += 1
def append_skipped(self, report):
if hasattr(report, "wasxfail"):
- self.append(Junit.skipped(str(report.wasxfail),
+ self.append(Junit.skipped(unicode(report.wasxfail),
message="expected test failure"))
else:
filename, lineno, skipreason = report.longrepr
@@ -201,10 +200,10 @@ class LogXML(object):
classname="pytest",
name="internal"))
- def pytest_sessionstart(self, session):
+ def pytest_sessionstart(self):
self.suite_start_time = time.time()
- def pytest_sessionfinish(self, session, exitstatus, __multicall__):
+ def pytest_sessionfinish(self):
if py.std.sys.version_info[0] < 3:
logfile = py.std.codecs.open(self.logfile, 'w', encoding='utf-8')
else:
diff --git a/setup.py b/setup.py
index 6e601d9ee..a58284b28 100644
--- a/setup.py
+++ b/setup.py
@@ -27,7 +27,7 @@ def main():
name='pytest',
description='py.test: simple powerful testing with Python',
long_description = long_description,
- version='2.4.3.dev1',
+ version='2.4.3.dev2',
url='http://pytest.org',
license='MIT license',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
diff --git a/testing/test_junitxml.py b/testing/test_junitxml.py
index 4c856959a..3f1e5b7be 100644
--- a/testing/test_junitxml.py
+++ b/testing/test_junitxml.py
@@ -1,5 +1,8 @@
+# -*- coding: utf-8 -*-
+
from xml.dom import minidom
import py, sys, os
+from _pytest.junitxml import LogXML
def runandparse(testdir, *args):
resultpath = testdir.tmpdir.join("junit.xml")
@@ -423,8 +426,6 @@ def test_invalid_xml_escape():
assert chr(i) == bin_xml_escape(unichr(i)).uniobj
def test_logxml_path_expansion(tmpdir, monkeypatch):
- from _pytest.junitxml import LogXML
-
home_tilde = py.path.local(os.path.expanduser('~')).join('test.xml')
xml_tilde = LogXML('~%stest.xml' % tmpdir.sep, None)
@@ -461,3 +462,25 @@ def test_escaped_parametrized_names_xml(testdir):
assert_attr(node,
name="test_func[#x00]")
+def test_unicode_issue368(testdir):
+ path = testdir.tmpdir.join("test.xml")
+ log = LogXML(str(path), None)
+ class report:
+ longrepr = u"ВНИМАНИЕ!"
+ sections = []
+ nodeid = "something"
+
+ # hopefully this is not too brittle ...
+ log.pytest_sessionstart()
+ log._opentestcase(report)
+ log.append_failure(report)
+ log.append_collect_failure(report)
+ log.append_collect_skipped(report)
+ log.append_error(report)
+ report.longrepr = "filename", 1, u"ВНИМАНИЕ!"
+ log.append_skipped(report)
+ report.wasxfail = u"ВНИМАНИЕ!"
+ log.append_skipped(report)
+ log.pytest_sessionfinish()
+
+