diff -r a2d01ed713cb Lib/test/test_filecmp.py --- a/Lib/test/test_filecmp.py Sun Aug 03 15:27:18 2014 -0400 +++ b/Lib/test/test_filecmp.py Sun Aug 03 16:17:39 2014 -0700 @@ -12,19 +12,41 @@ self.name = support.TESTFN self.name_same = support.TESTFN + '-same' self.name_diff = support.TESTFN + '-diff' + self.name_same_diffsig = support.TESTFN + '-same-diffsig' + self.name_diff_samesig = support.TESTFN + '-diff-samesig' data = 'Contents of file go here.\n' - for name in [self.name, self.name_same, self.name_diff]: + for name in [self.name, self.name_same, self.name_diff, + self.name_same_diffsig]: with open(name, 'w') as output: output.write(data) with open(self.name_diff, 'a+') as output: output.write('An extra line.\n') + + with open(self.name_diff_samesig, 'w') as output: + output.write(data.upper()) + + st = os.stat(self.name) + atime = st.st_atime + mtime = st.st_mtime + mtime_diff = mtime - 24*60*60 # yesterday + + # these files are given the same atime and mtime as self.name + os.utime(self.name_same, (atime, mtime)) + os.utime(self.name_diff_samesig, (atime, mtime)) + + # these files get a different mtime + os.utime(self.name_diff, (atime, mtime_diff)) + os.utime(self.name_same_diffsig, (atime, mtime_diff)) + self.dir = tempfile.gettempdir() def tearDown(self): os.unlink(self.name) os.unlink(self.name_same) os.unlink(self.name_diff) + os.unlink(self.name_same_diffsig) + os.unlink(self.name_diff_samesig) def test_matching(self): self.assertTrue(filecmp.cmp(self.name, self.name_same), @@ -49,6 +71,22 @@ self.assertTrue(len(filecmp._cache) == 0, "Cache not cleared after calling clear_cache") + def test_shallow_false_negative(self): + self.assertFalse(filecmp.cmp(self.name, self.name_same_diffsig), + "Shallow comparison not done by file signature") + + def test_shallow_false_positive(self): + self.assertTrue(filecmp.cmp(self.name, self.name_diff_samesig), + "Shallow comparison not done by file signature") + + def test_deep_comparisons(self): + self.assertTrue(filecmp.cmp(self.name, self.name_same_diffsig, + shallow=False), + "Deep comparison not done by file contents") + self.assertFalse(filecmp.cmp(self.name, self.name_diff_samesig, + shallow=False), + "Deep comparison not done by file contents") + class DirCompareTestCase(unittest.TestCase): def setUp(self): tmpdir = tempfile.gettempdir() @@ -62,15 +100,17 @@ self.caseinsensitive = os.path.normcase('A') == os.path.normcase('a') data = 'Contents of file go here.\n' - for dir in (self.dir, self.dir_same, self.dir_diff, self.dir_ignored): + shutil.rmtree(self.dir, True) + os.mkdir(self.dir) + with open(os.path.join(self.dir, "file"), 'w') as output: + output.write(data) + + for dir in (self.dir_same, self.dir_diff, self.dir_ignored): shutil.rmtree(dir, True) - os.mkdir(dir) + shutil.copytree(self.dir, dir) if self.caseinsensitive and dir is self.dir_same: - fn = 'FiLe' # Verify case-insensitive comparison - else: - fn = 'file' - with open(os.path.join(dir, fn), 'w') as output: - output.write(data) + os.rename(os.path.join(dir, "file"), + os.path.join(dir, "FiLe")) with open(os.path.join(self.dir_diff, 'file2'), 'w') as output: output.write('An extra file.\n') diff -r a2d01ed713cb Lib/test/test_keyword.py --- a/Lib/test/test_keyword.py Sun Aug 03 15:27:18 2014 -0400 +++ b/Lib/test/test_keyword.py Sun Aug 03 16:17:39 2014 -0700 @@ -59,10 +59,12 @@ def test_real_grammar_and_keyword_file(self): self._copy_file_without_generated_keywords(KEYWORD_FILE, TEST_PY_FILE) self.addCleanup(support.unlink, TEST_PY_FILE) - self.assertFalse(filecmp.cmp(KEYWORD_FILE, TEST_PY_FILE)) + self.assertFalse(filecmp.cmp(KEYWORD_FILE, TEST_PY_FILE, + shallow=False)) self.assertEqual((0, b''), self._generate_keywords(GRAMMAR_FILE, TEST_PY_FILE)) - self.assertTrue(filecmp.cmp(KEYWORD_FILE, TEST_PY_FILE)) + self.assertTrue(filecmp.cmp(KEYWORD_FILE, TEST_PY_FILE, + shallow=False)) def test_grammar(self): self._copy_file_without_generated_keywords(KEYWORD_FILE, TEST_PY_FILE) @@ -116,7 +118,8 @@ self.addCleanup(support.unlink, TEST_PY_FILE) self.assertEqual((0, b''), self._generate_keywords(os.devnull, TEST_PY_FILE)) - self.assertTrue(filecmp.cmp(TEST_PY_FILE, PY_FILE_WITHOUT_KEYWORDS)) + self.assertTrue(filecmp.cmp(TEST_PY_FILE, PY_FILE_WITHOUT_KEYWORDS, + shallow=False)) def test_keywords_py_without_markers_produces_error(self): rc, stderr = self._generate_keywords(os.devnull, os.devnull)