[Pytest-commit] commit/pytest: hpk42: fix unicode handling with junitxml, fixes issue368.

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Mon Oct 21 16:55:19 CEST 2013


1 new commit in pytest:

https://bitbucket.org/hpk42/pytest/commits/e8e4c19c61c7/
Changeset:   e8e4c19c61c7
User:        hpk42
Date:        2013-10-21 16:54:25
Summary:     fix unicode handling with junitxml, fixes issue368.
Affected #:  5 files

diff -r 75b0af8a0a2b26a683d51331f6d69088ef18501a -r e8e4c19c61c73b5d741229e5caa55005e47d12c5 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,8 @@
 - 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 -r 75b0af8a0a2b26a683d51331f6d69088ef18501a -r e8e4c19c61c73b5d741229e5caa55005e47d12c5 _pytest/__init__.py
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
 #
-__version__ = '2.4.3.dev1'
+__version__ = '2.4.3.dev2'

diff -r 75b0af8a0a2b26a683d51331f6d69088ef18501a -r e8e4c19c61c73b5d741229e5caa55005e47d12c5 _pytest/junitxml.py
--- a/_pytest/junitxml.py
+++ b/_pytest/junitxml.py
@@ -9,7 +9,6 @@
 import sys
 import time
 
-
 # Python 2.X and 3.X compatibility
 try:
     unichr(65)
@@ -131,31 +130,31 @@
             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 @@
                     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 -r 75b0af8a0a2b26a683d51331f6d69088ef18501a -r e8e4c19c61c73b5d741229e5caa55005e47d12c5 setup.py
--- a/setup.py
+++ b/setup.py
@@ -27,7 +27,7 @@
         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 -r 75b0af8a0a2b26a683d51331f6d69088ef18501a -r e8e4c19c61c73b5d741229e5caa55005e47d12c5 testing/test_junitxml.py
--- 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 @@
         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 @@
     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()
+
+

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