]> granicus.if.org Git - python/commitdiff
bpo-11594: Ensure line-endings are respected when using 2to3 (GH-6483)
authorAaron Ang <aaronang@users.noreply.github.com>
Tue, 17 Apr 2018 21:34:14 +0000 (14:34 -0700)
committerŁukasz Langa <lukasz@langa.pl>
Tue, 17 Apr 2018 21:34:14 +0000 (14:34 -0700)
Lib/lib2to3/refactor.py
Lib/lib2to3/tests/data/crlf.py
Lib/lib2to3/tests/test_refactor.py
Misc/NEWS.d/next/Library/2018-04-16-08-42-03.bpo-11594.QLo4vv.rst [new file with mode: 0644]

index db2e38d22f16f086625b5126608f7ac988521622..7c4e0649975cecb90241edf60d6daeec9eb82e55 100644 (file)
@@ -314,7 +314,7 @@ class RefactoringTool(object):
             encoding = tokenize.detect_encoding(f.readline)[0]
         finally:
             f.close()
-        with io.open(filename, "r", encoding=encoding) as f:
+        with io.open(filename, "r", encoding=encoding, newline='') as f:
             return f.read(), encoding
 
     def refactor_file(self, filename, write=False, doctests_only=False):
index dbe2d7bb1012ba87a4ba8dae3aca05666f0b1d67..a83ca8f0a2068f47ffb56ca08cd8592dd65308e7 100644 (file)
@@ -1,3 +1,3 @@
-print "hi"
-
-print "Like bad Windows newlines?"
+print "hi"\r
+\r
+print "Like bad Windows newlines?"\r
index e9bae5e45d0136f984801c07718f66b4f759e756..f3059a93113b1cb1b91dc7c5c779dd176c9dd5cd 100644 (file)
@@ -180,32 +180,42 @@ from __future__ import print_function"""
     def check_file_refactoring(self, test_file, fixers=_2TO3_FIXERS,
                                options=None, mock_log_debug=None,
                                actually_write=True):
-        tmpdir = tempfile.mkdtemp(prefix="2to3-test_refactor")
-        self.addCleanup(shutil.rmtree, tmpdir)
-        # make a copy of the tested file that we can write to
-        shutil.copy(test_file, tmpdir)
-        test_file = os.path.join(tmpdir, os.path.basename(test_file))
-        os.chmod(test_file, 0o644)
-
-        def read_file():
-            with open(test_file, "rb") as fp:
-                return fp.read()
-
-        old_contents = read_file()
+        test_file = self.init_test_file(test_file)
+        old_contents = self.read_file(test_file)
         rt = self.rt(fixers=fixers, options=options)
         if mock_log_debug:
             rt.log_debug = mock_log_debug
 
         rt.refactor_file(test_file)
-        self.assertEqual(old_contents, read_file())
+        self.assertEqual(old_contents, self.read_file(test_file))
 
         if not actually_write:
             return
         rt.refactor_file(test_file, True)
-        new_contents = read_file()
+        new_contents = self.read_file(test_file)
         self.assertNotEqual(old_contents, new_contents)
         return new_contents
 
+    def init_test_file(self, test_file):
+        tmpdir = tempfile.mkdtemp(prefix="2to3-test_refactor")
+        self.addCleanup(shutil.rmtree, tmpdir)
+        shutil.copy(test_file, tmpdir)
+        test_file = os.path.join(tmpdir, os.path.basename(test_file))
+        os.chmod(test_file, 0o644)
+        return test_file
+
+    def read_file(self, test_file):
+        with open(test_file, "rb") as fp:
+            return fp.read()
+
+    def refactor_file(self, test_file, fixers=_2TO3_FIXERS):
+        test_file = self.init_test_file(test_file)
+        old_contents = self.read_file(test_file)
+        rt = self.rt(fixers=fixers)
+        rt.refactor_file(test_file, True)
+        new_contents = self.read_file(test_file)
+        return old_contents, new_contents
+
     def test_refactor_file(self):
         test_file = os.path.join(FIXER_DIR, "parrot_example.py")
         self.check_file_refactoring(test_file, _DEFAULT_FIXERS)
@@ -285,6 +295,12 @@ from __future__ import print_function"""
         finally:
             os.linesep = old_sep
 
+    def test_crlf_unchanged(self):
+        fn = os.path.join(TEST_DATA_DIR, "crlf.py")
+        old, new = self.refactor_file(fn)
+        self.assertIn(b"\r\n", old)
+        self.assertIn(b"\r\n", new)
+
     def test_refactor_docstring(self):
         rt = self.rt()
 
diff --git a/Misc/NEWS.d/next/Library/2018-04-16-08-42-03.bpo-11594.QLo4vv.rst b/Misc/NEWS.d/next/Library/2018-04-16-08-42-03.bpo-11594.QLo4vv.rst
new file mode 100644 (file)
index 0000000..be2abf6
--- /dev/null
@@ -0,0 +1 @@
+Ensure line-endings are respected when using lib2to3.