diff --git a/CHANGELOG b/CHANGELOG index 06f9fca05..d3da98594 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,9 @@ Unreleased - removed outdated japanese docs from source tree. +- Escape % character in the assertion message. + + 2.6.3 ----------- diff --git a/_pytest/assertion/rewrite.py b/_pytest/assertion/rewrite.py index 18df7791e..57edcd487 100644 --- a/_pytest/assertion/rewrite.py +++ b/_pytest/assertion/rewrite.py @@ -373,7 +373,7 @@ def _format_assertmsg(obj): t = py.builtin.text else: t = py.builtin.bytes - s = s.replace(t("\n"), t("\n~")) + s = s.replace(t("\n"), t("\n~")).replace(t("%"), t("%%")) if is_repr: s = s.replace(t("\\n"), t("\n~")) return s diff --git a/testing/test_assertmessage.py b/testing/test_assertmessage.py deleted file mode 100644 index ca67ff55a..000000000 --- a/testing/test_assertmessage.py +++ /dev/null @@ -1,18 +0,0 @@ - -def test_assert_message_fail(): - ''' - Check if custom message with % sign do not raise ValueError - Later test can be parametrized with other problematic chars - ''' - - MESSAGE = 'Message with %' - - try: - assert False, MESSAGE - except ValueError, ve: - assert False, 'ValueError was raised with the following message: ' \ - + ve.message - except AssertionError, ae: - assert MESSAGE == ae.message, 'Assertion message: ' + ae.message \ - + ' is different than expected: ' + MESSAGE - \ No newline at end of file diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index 9d69b5f49..225608281 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -172,6 +172,18 @@ class TestAssertionRewrite: "*assert 1 == 2*", ]) + def test_assertion_message_escape(self, testdir): + testdir.makepyfile(""" + def test_foo(): + assert 1 == 2, 'To be escaped: %' + """) + result = testdir.runpytest() + assert result.ret == 1 + result.stdout.fnmatch_lines([ + "*AssertionError: To be escaped: %", + "*assert 1 == 2", + ]) + def test_boolop(self): def f(): f = g = False