summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSanyam Khurana <8039608+CuriousLearner@users.noreply.github.com>2019-01-09 13:38:38 (GMT)
committerSenthil Kumaran <skumaran@gatech.edu>2019-01-09 13:38:38 (GMT)
commitcbb16459934eaf29c7c7d362939cd05550b2f21f (patch)
tree7a75c9b2b3d818fd8c2dec0cdcfc025ae1c01a59 /Lib
parenta234e148394c2c7419372ab65b773d53a57f3625 (diff)
downloadcpython-cbb16459934eaf29c7c7d362939cd05550b2f21f.zip
cpython-cbb16459934eaf29c7c7d362939cd05550b2f21f.tar.gz
cpython-cbb16459934eaf29c7c7d362939cd05550b2f21f.tar.bz2
bpo-24746: Avoid stripping trailing whitespace in doctest fancy diff (#10639)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/doctest.py2
-rw-r--r--Lib/test/test_doctest.py48
2 files changed, 47 insertions, 3 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py
index c1d8a1d..79d91a0 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -1690,8 +1690,6 @@ class OutputChecker:
kind = 'ndiff with -expected +actual'
else:
assert 0, 'Bad diff option'
- # Remove trailing whitespace on diff output.
- diff = [line.rstrip() + '\n' for line in diff]
return 'Differences (%s):\n' % kind + _indent(''.join(diff))
# If we're not using diff, then simply list the expected
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index efdce3c..c40c389 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -2451,6 +2451,11 @@ def test_unittest_reportflags():
Then the default eporting options are ignored:
>>> result = suite.run(unittest.TestResult())
+ """
+ """
+ *NOTE*: These doctest are intentionally not placed in raw string to depict
+ the trailing whitespace using `\x20` in the diff below.
+
>>> print(result.failures[0][1]) # doctest: +ELLIPSIS
Traceback ...
Failed example:
@@ -2464,7 +2469,7 @@ def test_unittest_reportflags():
Differences (ndiff with -expected +actual):
a
- <BLANKLINE>
- +
+ +\x20
b
<BLANKLINE>
<BLANKLINE>
@@ -2953,6 +2958,47 @@ Invalid doctest option:
"""
+def test_no_trailing_whitespace_stripping():
+ r"""
+ The fancy reports had a bug for a long time where any trailing whitespace on
+ the reported diff lines was stripped, making it impossible to see the
+ differences in line reported as different that differed only in the amount of
+ trailing whitespace. The whitespace still isn't particularly visible unless
+ you use NDIFF, but at least it is now there to be found.
+
+ *NOTE*: This snippet was intentionally put inside a raw string to get rid of
+ leading whitespace error in executing the example below
+
+ >>> def f(x):
+ ... r'''
+ ... >>> print('\n'.join(['a ', 'b']))
+ ... a
+ ... b
+ ... '''
+ """
+ """
+ *NOTE*: These doctest are not placed in raw string to depict the trailing whitespace
+ using `\x20`
+
+ >>> test = doctest.DocTestFinder().find(f)[0]
+ >>> flags = doctest.REPORT_NDIFF
+ >>> doctest.DocTestRunner(verbose=False, optionflags=flags).run(test)
+ ... # doctest: +ELLIPSIS
+ **********************************************************************
+ File ..., line 3, in f
+ Failed example:
+ print('\n'.join(['a ', 'b']))
+ Differences (ndiff with -expected +actual):
+ - a
+ + a
+ b
+ TestResults(failed=1, attempted=1)
+
+ *NOTE*: `\x20` is for checking the trailing whitespace on the +a line above.
+ We cannot use actual spaces there, as a commit hook prevents from committing
+ patches that contain trailing whitespace. More info on Issue 24746.
+ """
+
######################################################################
## Main
######################################################################