diff --git a/AUTHORS b/AUTHORS index 80b6d5157..dac6f120b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -306,6 +306,7 @@ Nico Vidal Nikolay Kondratyev Nipunn Koorapati Oleg Pidsadnyi +Oleg Plisov Oleg Sushchenko Olga Matoula Oliver Bestwalter diff --git a/changelog/10704.improvement.rst b/changelog/10704.improvement.rst new file mode 100644 index 000000000..4c4ad4454 --- /dev/null +++ b/changelog/10704.improvement.rst @@ -0,0 +1 @@ +Terminal outputting string difference will now escape whitespace characters if those are the difference diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index a118befcc..cf99a3560 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -309,10 +309,22 @@ def _diff_text(left: str, right: str, verbose: int = 0) -> List[str]: left = left[:-i] right = right[:-i] keepends = True + diffspace = False + for i in range(min(len(left), len(right))): + if left[i] != right[i]: + if left[i].isspace() and right[i].isspace(): + diffspace = True # Check if difference in strings is whitespace symbol + break if left.isspace() or right.isspace(): left = repr(str(left)) right = repr(str(right)) explanation += ["Strings contain only whitespace, escaping them using repr()"] + elif diffspace: + left = repr(str(left)) + right = repr(str(right)) + explanation += [ + "Strings are different by whitespaces, escaping them using repr()" + ] # "right" is the expected base against which we compare "left", # see https://github.com/pytest-dev/pytest/issues/3333 explanation += [ diff --git a/testing/test_error_diffs.py b/testing/test_error_diffs.py index f290eb167..29ab0aecf 100644 --- a/testing/test_error_diffs.py +++ b/testing/test_error_diffs.py @@ -282,6 +282,20 @@ TESTCASES = [ """, id="Compare attrs classes", ), + pytest.param( + """ + def test_this(): + assert "word\t" == "word " + """, + """ + > assert "word\t" == "word " + E AssertionError: assert 'word\\t' == 'word ' + E Strings are different by whitespaces, escaping them using repr() + E - 'word ' + E + 'word\\t' + """, + id="Compare whitespaces", + ), ]