]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-24746: Avoid stripping trailing whitespace in doctest fancy diff (GH-10639) ...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 9 Jan 2019 14:46:28 +0000 (06:46 -0800)
committerSenthil Kumaran <skumaran@gatech.edu>
Wed, 9 Jan 2019 14:46:28 +0000 (06:46 -0800)
(cherry picked from commit cbb16459934eaf29c7c7d362939cd05550b2f21f)

Co-authored-by: Sanyam Khurana <8039608+CuriousLearner@users.noreply.github.com>
Lib/doctest.py
Lib/test/test_doctest.py
Misc/NEWS.d/next/Library/2018-11-22-15-22-56.bpo-24746.eSLKBE.rst [new file with mode: 0644]

index 0b78544d8d0ee0f9802be0e372b1cda601b0ed7c..ca5be5927594613f3b64a9110119c5f52e39fc3c 100644 (file)
@@ -1691,8 +1691,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
index 2258c6b1baed26bd930bc0bfd202838001a7d1d3..ad527626d1b012e218edb0c87ee6fa1ef16e0171 100644 (file)
@@ -2431,6 +2431,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:
@@ -2444,7 +2449,7 @@ def test_unittest_reportflags():
       Differences (ndiff with -expected +actual):
             a
           - <BLANKLINE>
-          +
+          +\x20
             b
       <BLANKLINE>
       <BLANKLINE>
@@ -2933,6 +2938,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
 ######################################################################
diff --git a/Misc/NEWS.d/next/Library/2018-11-22-15-22-56.bpo-24746.eSLKBE.rst b/Misc/NEWS.d/next/Library/2018-11-22-15-22-56.bpo-24746.eSLKBE.rst
new file mode 100644 (file)
index 0000000..c592516
--- /dev/null
@@ -0,0 +1,2 @@
+Avoid stripping trailing whitespace in doctest fancy diff. Orignial patch by
+R. David Murray & Jairo Trad. Enhanced by Sanyam Khurana.