From eb126eddbd7542ac9d7cd2736116aee2e0bd03dd Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 30 Jan 2018 11:31:10 -0800 Subject: [PATCH] [3.6] compare with difflib not diff(1) (GH-5450) (GH-5453) Co-authored-by: Benjamin Peterson --- Lib/lib2to3/tests/test_parser.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Lib/lib2to3/tests/test_parser.py b/Lib/lib2to3/tests/test_parser.py index 9d444c204a..3fc4995224 100644 --- a/Lib/lib2to3/tests/test_parser.py +++ b/Lib/lib2to3/tests/test_parser.py @@ -12,6 +12,7 @@ from .support import driver, driver_no_print_statement from test.support import verbose # Python imports +import difflib import importlib import operator import os @@ -429,8 +430,8 @@ class TestParserIdempotency(support.TestCase): except ParseError as err: self.fail('ParseError on file %s (%s)' % (filepath, err)) new = str(tree) - x = diff(filepath, new, encoding=encoding) - if x: + if new != source: + print(diff_texts(source, new, filepath)) self.fail("Idempotency failed: %s" % filepath) def test_extended_unpacking(self): @@ -473,14 +474,9 @@ class TestLiterals(GrammarTest): self.validate(s) -def diff(fn, result, encoding='utf-8'): - try: - with open('@', 'w', encoding=encoding, newline='\n') as f: - f.write(str(result)) - fn = fn.replace('"', '\\"') - return subprocess.call(['diff', '-u', fn, '@'], stdout=(subprocess.DEVNULL if verbose < 1 else None)) - finally: - try: - os.remove("@") - except OSError: - pass +def diff_texts(a, b, filename): + a = a.splitlines() + b = b.splitlines() + return difflib.unified_diff(a, b, filename, filename, + "(original)", "(reserialized)", + lineterm="") -- 2.40.0