diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2ab8834b731..de459e93a5a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,14 +17,20 @@ is specified on the command line together with the ``--pyargs`` option. Thanks to `@taschini`_ for the PR (`#1597`_). +* Create correct diff for strings ending with newlines. Fixes (`#1553`_). + Thanks `@Vogtinator`_ for reporting. Thanks to `@RedBeardCode`_ and + `@tomviner`_ for PR. + * .. _#1580: https://github.com/pytest-dev/pytest/pull/1580 .. _#1605: https://github.com/pytest-dev/pytest/issues/1605 .. _#1597: https://github.com/pytest-dev/pytest/pull/1597 +.. _#1553: https://github.com/pytest-dev/pytest/issues/1553 .. _@graingert: https://github.com/graingert .. _@taschini: https://github.com/taschini +.. _@Vogtinator: https://github.com/Vogtinator 2.9.2 diff --git a/_pytest/assertion/util.py b/_pytest/assertion/util.py index f2f23efea27..d3983acf1af 100644 --- a/_pytest/assertion/util.py +++ b/_pytest/assertion/util.py @@ -225,9 +225,11 @@ def _diff_text(left, right, verbose=False): 'characters in diff, use -v to show') % i] left = left[:-i] right = right[:-i] + # We set splitlines' keepends=True, which can only be passed as a + # positional argument explanation += [line.strip('\n') - for line in ndiff(left.splitlines(), - right.splitlines())] + for line in ndiff(left.splitlines(True), + right.splitlines(True))] return explanation diff --git a/testing/test_assertion.py b/testing/test_assertion.py index 347278e1904..dfa1b942034 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -428,7 +428,7 @@ def test_long(): "*- 3", "*- 5", "*- 7", - "*truncated (191 more lines)*use*-vv*", + "*truncated (193 more lines)*use*-vv*", ]) @@ -626,3 +626,17 @@ def __hash__(self): + repr(3) """).strip() assert '\n'.join(expl) == dedent + +def test_diff_newline_at_end(monkeypatch, testdir): + testdir.makepyfile(r""" + def test_diff(): + assert 'asdf' == 'asdf\n' + """) + + result = testdir.runpytest() + result.stdout.fnmatch_lines(r""" + *assert 'asdf' == 'asdf\n' + * - asdf + * + asdf + * ? + + """)