diff --git a/Lib/test/test_keyword.py b/Lib/test/test_keyword.py --- a/Lib/test/test_keyword.py +++ b/Lib/test/test_keyword.py @@ -1,7 +1,6 @@ import keyword import unittest from test import support -import filecmp import os import sys import subprocess @@ -15,6 +14,13 @@ PY_FILE_WITHOUT_KEYWORDS = 'minimal_keyword.py' NONEXISTENT_FILE = 'not_here.txt' +def _compare_files(f1, f2): + """ + Compare content of two text files, ignoring newlines. + """ + with open(f1) as fp1, open(f2) as fp2: + return fp1.read() == fp2.read() + class Test_iskeyword(unittest.TestCase): def test_true_is_a_keyword(self): @@ -30,7 +36,7 @@ # preserved for backward compatibility. def test_changing_the_kwlist_does_not_affect_iskeyword(self): oldlist = keyword.kwlist - self.addCleanup(lambda: setattr(keyword, 'kwlist', oldlist)) + self.addCleanup(setattr, keyword, 'kwlist', oldlist) keyword.kwlist = ['its', 'all', 'eggs', 'beans', 'and', 'a', 'slice'] self.assertFalse(keyword.iskeyword('eggs')) @@ -56,15 +62,15 @@ 'test only works from source build directory') def test_real_grammar_and_keyword_file(self): self._copy_file_without_generated_keywords(KEYWORD_FILE, TEST_PY_FILE) - self.addCleanup(lambda: support.unlink(TEST_PY_FILE)) - self.assertFalse(filecmp.cmp(KEYWORD_FILE, TEST_PY_FILE)) + self.addCleanup(support.unlink, TEST_PY_FILE) + self.assertFalse(_compare_files(KEYWORD_FILE, TEST_PY_FILE)) self.assertEqual(0, self._generate_keywords(GRAMMAR_FILE, TEST_PY_FILE)[0]) - self.assertTrue(filecmp.cmp(KEYWORD_FILE, TEST_PY_FILE)) + self.assertTrue(_compare_files(KEYWORD_FILE, TEST_PY_FILE)) def test_grammar(self): self._copy_file_without_generated_keywords(KEYWORD_FILE, TEST_PY_FILE) - self.addCleanup(lambda: support.unlink(TEST_PY_FILE)) + self.addCleanup(support.unlink, TEST_PY_FILE) with open(GRAMMAR_TEST_FILE, 'w') as fp: # Some of these are probably implementation accidents. fp.writelines(textwrap.dedent("""\ @@ -86,7 +92,7 @@ {1, 'no good'} {283, 0}, {1, "too many spaces"}""")) - self.addCleanup(lambda: support.unlink(GRAMMAR_TEST_FILE)) + self.addCleanup(support.unlink, GRAMMAR_TEST_FILE) self._generate_keywords(GRAMMAR_TEST_FILE, TEST_PY_FILE) expected = [ " 'This one is tab indented',\n", @@ -109,17 +115,18 @@ def test_empty_grammar_results_in_no_keywords(self): self._copy_file_without_generated_keywords(KEYWORD_FILE, PY_FILE_WITHOUT_KEYWORDS) - self.addCleanup(lambda: support.unlink(PY_FILE_WITHOUT_KEYWORDS)) + self.addCleanup(support.unlink, PY_FILE_WITHOUT_KEYWORDS) shutil.copyfile(KEYWORD_FILE, TEST_PY_FILE) - self.addCleanup(lambda: support.unlink(TEST_PY_FILE)) + self.addCleanup(support.unlink, TEST_PY_FILE) self.assertEqual(0, self._generate_keywords(os.devnull, TEST_PY_FILE)[0]) - self.assertTrue(filecmp.cmp(TEST_PY_FILE, PY_FILE_WITHOUT_KEYWORDS)) + self.assertTrue(_compare_files(TEST_PY_FILE, PY_FILE_WITHOUT_KEYWORDS)) def test_keywords_py_without_markers_produces_error(self): rc, stderr = self._generate_keywords(os.devnull, os.devnull) self.assertNotEqual(rc, 0) - self.assertEqual(stderr, b'target does not contain format markers\n') + self.assertTrue( + stderr.startswith(b'target does not contain format markers')) def test_missing_grammar_file_produces_error(self): rc, stderr = self._generate_keywords(NONEXISTENT_FILE, KEYWORD_FILE)