pytest.fail with non-ascii characters raises an internal pytest error

Fix #1178
This commit is contained in:
Bruno Oliveira 2016-03-05 16:09:01 -03:00
parent 3884398055
commit 24d3e01548
4 changed files with 25 additions and 2 deletions

View File

@ -5,6 +5,10 @@
* *
* Fix (`#1178 <https://github.com/pytest-dev/pytest/issues/1178>`_):
``pytest.fail`` with non-ascii characters raises an internal pytest error.
Thanks `@nicoddemus`_ for the PR.
* Fix (`#469`_): junit parses report.nodeid incorrectly, when params IDs * Fix (`#469`_): junit parses report.nodeid incorrectly, when params IDs
contain ``::``. Thanks `@tomviner`_ for the PR (`#1431`_). contain ``::``. Thanks `@tomviner`_ for the PR (`#1431`_).

View File

@ -740,7 +740,7 @@ class FunctionMixin(PyobjMixin):
def _repr_failure_py(self, excinfo, style="long"): def _repr_failure_py(self, excinfo, style="long"):
if excinfo.errisinstance(pytest.fail.Exception): if excinfo.errisinstance(pytest.fail.Exception):
if not excinfo.value.pytrace: if not excinfo.value.pytrace:
return str(excinfo.value) return py._builtin._totext(excinfo.value)
return super(FunctionMixin, self)._repr_failure_py(excinfo, return super(FunctionMixin, self)._repr_failure_py(excinfo,
style=style) style=style)

View File

@ -435,7 +435,7 @@ class OutcomeException(Exception):
def __repr__(self): def __repr__(self):
if self.msg: if self.msg:
return str(self.msg) return py._builtin._totext(self.msg)
return "<%s instance>" %(self.__class__.__name__,) return "<%s instance>" %(self.__class__.__name__,)
__str__ = __repr__ __str__ = __repr__

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import with_statement from __future__ import with_statement
import _pytest._code import _pytest._code
@ -439,6 +440,24 @@ def test_pytest_fail_notrace(testdir):
assert 'def teardown_function' not in result.stdout.str() assert 'def teardown_function' not in result.stdout.str()
def test_pytest_fail_notrace_unicode(testdir):
"""Fix pytest.fail with pytrace=False with non-ascii characters (#1178).
"""
testdir.makepyfile(u"""
# coding: utf-8
import pytest
def test_hello():
pytest.fail(u'oh oh: ☺', pytrace=False)
""")
result = testdir.runpytest()
if sys.version_info[0] >= 3:
result.stdout.fnmatch_lines(['*test_hello*', "oh oh: ☺"])
else:
result.stdout.fnmatch_lines(['*test_hello*', "oh oh: *"])
assert 'def test_hello' not in result.stdout.str()
def test_pytest_no_tests_collected_exit_status(testdir): def test_pytest_no_tests_collected_exit_status(testdir):
result = testdir.runpytest() result = testdir.runpytest()
result.stdout.fnmatch_lines('*collected 0 items*') result.stdout.fnmatch_lines('*collected 0 items*')