Handle unittest.SkipTest exception with non-ascii characters

Fix #4669
This commit is contained in:
Bruno Oliveira 2019-01-28 12:50:04 -02:00
parent 16f8cdac95
commit 1c5009c3fb
3 changed files with 19 additions and 1 deletions

View File

@ -0,0 +1 @@
Correctly handle ``unittest.SkipTest`` exception containing non-ascii characters on Python 2.

View File

@ -5,6 +5,8 @@ from __future__ import print_function
import sys import sys
import six
from _pytest import python from _pytest import python
from _pytest import runner from _pytest import runner
from _pytest import unittest from _pytest import unittest
@ -24,7 +26,7 @@ def pytest_runtest_makereport(item, call):
if call.excinfo and call.excinfo.errisinstance(get_skip_exceptions()): if call.excinfo and call.excinfo.errisinstance(get_skip_exceptions()):
# let's substitute the excinfo with a pytest.skip one # let's substitute the excinfo with a pytest.skip one
call2 = runner.CallInfo.from_call( call2 = runner.CallInfo.from_call(
lambda: runner.skip(str(call.excinfo.value)), call.when lambda: runner.skip(six.text_type(call.excinfo.value)), call.when
) )
call.excinfo = call2.excinfo call.excinfo = call2.excinfo

View File

@ -1,3 +1,4 @@
# encoding: utf-8
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import division from __future__ import division
from __future__ import print_function from __future__ import print_function
@ -366,3 +367,17 @@ def test_nottest_class_decorator(testdir):
assert not reprec.getfailedcollections() assert not reprec.getfailedcollections()
calls = reprec.getreports("pytest_runtest_logreport") calls = reprec.getreports("pytest_runtest_logreport")
assert not calls assert not calls
def test_skip_test_with_unicode(testdir):
testdir.makepyfile(
"""
# encoding: utf-8
import unittest
class TestClass():
def test_io(self):
raise unittest.SkipTest(u'😊')
"""
)
result = testdir.runpytest()
result.stdout.fnmatch_lines("* 1 skipped *")