summaryrefslogtreecommitdiff
path: root/Lib/lib2to3
diff options
context:
space:
mode:
authorAaron Ang <aaronang@users.noreply.github.com>2018-04-17 14:34:14 -0700
committerƁukasz Langa <lukasz@langa.pl>2018-04-17 14:34:14 -0700
commitc127a86e1862df88ec6f9d15b79c627fc616766e (patch)
treecbe57da6b7018dc0334591e324b9795edc7d290d /Lib/lib2to3
parent36d56ea826caffbeac0fc0c6d90248b80516e33c (diff)
downloadcpython-git-c127a86e1862df88ec6f9d15b79c627fc616766e.tar.gz
bpo-11594: Ensure line-endings are respected when using 2to3 (GH-6483)
Diffstat (limited to 'Lib/lib2to3')
-rw-r--r--Lib/lib2to3/refactor.py2
-rw-r--r--Lib/lib2to3/tests/data/crlf.py6
-rw-r--r--Lib/lib2to3/tests/test_refactor.py44
3 files changed, 34 insertions, 18 deletions
diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py
index db2e38d22f..7c4e064997 100644
--- a/Lib/lib2to3/refactor.py
+++ b/Lib/lib2to3/refactor.py
@@ -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):
diff --git a/Lib/lib2to3/tests/data/crlf.py b/Lib/lib2to3/tests/data/crlf.py
index dbe2d7bb10..a83ca8f0a2 100644
--- a/Lib/lib2to3/tests/data/crlf.py
+++ b/Lib/lib2to3/tests/data/crlf.py
@@ -1,3 +1,3 @@
-print "hi"
-
-print "Like bad Windows newlines?"
+print "hi"
+
+print "Like bad Windows newlines?"
diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py
index e9bae5e45d..f3059a9311 100644
--- a/Lib/lib2to3/tests/test_refactor.py
+++ b/Lib/lib2to3/tests/test_refactor.py
@@ -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()