[Python-checkins] bpo-43049: Use io.IncrementalNewlineDecoder for doctest newline conversion (GH-24359)

zware webhook-mailer at python.org
Tue Mar 2 12:06:28 EST 2021

commit: b36349a647b2bf8174f0e736a4fc347e92ae204e
branch: master
author: Peter Donis <peterdonis at alum.mit.edu>
committer: zware <zachary.ware at gmail.com>
date: 2021-03-02T11:06:20-06:00

bpo-43049: Use io.IncrementalNewlineDecoder for doctest newline conversion (GH-24359)

Followup to bpo-1812 and GH-17385.

M Lib/doctest.py

diff --git a/Lib/doctest.py b/Lib/doctest.py
index 5bb35c9715d1e..e95c333f48aad 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -102,7 +102,7 @@ def _test():
 import sys
 import traceback
 import unittest
-from io import StringIO
+from io import StringIO, IncrementalNewlineDecoder
 from collections import namedtuple
 TestResults = namedtuple('TestResults', 'failed attempted')
@@ -212,11 +212,8 @@ def _normalize_module(module, depth=2):
         raise TypeError("Expected a module, string, or None")
 def _newline_convert(data):
-    # We have two cases to cover and we need to make sure we do
-    # them in the right order
-    for newline in ('\r\n', '\r'):
-        data = data.replace(newline, '\n')
-    return data
+    # The IO module provides a handy decoder for universal newline conversion
+    return IncrementalNewlineDecoder(None, True).decode(data, True)
 def _load_testfile(filename, package, module_relative, encoding):
     if module_relative:

More information about the Python-checkins mailing list