diff options
author | Aaron Ang <aaronang@users.noreply.github.com> | 2018-04-17 21:34:14 (GMT) |
---|---|---|
committer | Ćukasz Langa <lukasz@langa.pl> | 2018-04-17 21:34:14 (GMT) |
commit | c127a86e1862df88ec6f9d15b79c627fc616766e (patch) | |
tree | cbe57da6b7018dc0334591e324b9795edc7d290d /Lib/lib2to3 | |
parent | 36d56ea826caffbeac0fc0c6d90248b80516e33c (diff) | |
download | cpython-c127a86e1862df88ec6f9d15b79c627fc616766e.zip cpython-c127a86e1862df88ec6f9d15b79c627fc616766e.tar.gz cpython-c127a86e1862df88ec6f9d15b79c627fc616766e.tar.bz2 |
bpo-11594: Ensure line-endings are respected when using 2to3 (GH-6483)
Diffstat (limited to 'Lib/lib2to3')
-rw-r--r-- | Lib/lib2to3/refactor.py | 2 | ||||
-rw-r--r-- | Lib/lib2to3/tests/data/crlf.py | 6 | ||||
-rw-r--r-- | Lib/lib2to3/tests/test_refactor.py | 44 |
3 files changed, 34 insertions, 18 deletions
diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py index db2e38d..7c4e064 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 dbe2d7b..a83ca8f 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 e9bae5e..f3059a9 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() |