import os
, filecmp
, shutil
, tempfile
from test
import test_support
class FileCompareTestCase(unittest
.TestCase
):
self
.name
= test_support
.TESTFN
self
.name_same
= test_support
.TESTFN
+ '-same'
self
.name_diff
= test_support
.TESTFN
+ '-diff'
data
= 'Contents of file go here.\n'
for name
in [self
.name
, self
.name_same
, self
.name_diff
]:
output
= open(self
.name_diff
, 'a+')
output
.write('An extra line.\n')
self
.dir = tempfile
.gettempdir()
os
.unlink(self
.name_same
)
os
.unlink(self
.name_diff
)
self
.failUnless(filecmp
.cmp(self
.name
, self
.name_same
),
"Comparing file to itself fails")
self
.failUnless(filecmp
.cmp(self
.name
, self
.name_same
, shallow
=False),
"Comparing file to itself fails")
self
.failUnless(filecmp
.cmp(self
.name
, self
.name
, shallow
=False),
"Comparing file to identical file fails")
self
.failUnless(filecmp
.cmp(self
.name
, self
.name
),
"Comparing file to identical file fails")
def test_different(self
):
self
.failIf(filecmp
.cmp(self
.name
, self
.name_diff
),
"Mismatched files compare as equal")
self
.failIf(filecmp
.cmp(self
.name
, self
.dir),
"File and directory compare as equal")
class DirCompareTestCase(unittest
.TestCase
):
tmpdir
= tempfile
.gettempdir()
self
.dir = os
.path
.join(tmpdir
, 'dir')
self
.dir_same
= os
.path
.join(tmpdir
, 'dir-same')
self
.dir_diff
= os
.path
.join(tmpdir
, 'dir-diff')
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
]:
if self
.caseinsensitive
and dir is self
.dir_same
:
fn
= 'FiLe' # Verify case-insensitive comparison
output
= open(os
.path
.join(dir, fn
), 'w')
output
= open(os
.path
.join(self
.dir_diff
, 'file2'), 'w')
output
.write('An extra file.\n')
shutil
.rmtree(self
.dir_same
)
shutil
.rmtree(self
.dir_diff
)
self
.failUnless(filecmp
.cmpfiles(self
.dir, self
.dir, ['file']) ==
"Comparing directory to itself fails")
self
.failUnless(filecmp
.cmpfiles(self
.dir, self
.dir_same
, ['file']) ==
"Comparing directory to same fails")
# Try it with shallow=False
self
.failUnless(filecmp
.cmpfiles(self
.dir, self
.dir, ['file'],
"Comparing directory to itself fails")
self
.failUnless(filecmp
.cmpfiles(self
.dir, self
.dir_same
, ['file'],
"Comparing directory to same fails")
output
= open(os
.path
.join(self
.dir, 'file2'), 'w')
output
.write('Different contents.\n')
self
.failIf(filecmp
.cmpfiles(self
.dir, self
.dir_same
,
(['file'], ['file2'], []),
"Comparing mismatched directories fails")
# Check attributes for comparison of two identical directories
d
= filecmp
.dircmp(self
.dir, self
.dir_same
)
self
.assertEqual([d
.left_list
, d
.right_list
],[['file'], ['FiLe']])
self
.assertEqual([d
.left_list
, d
.right_list
],[['file'], ['file']])
self
.failUnless(d
.common
== ['file'])
self
.failUnless(d
.left_only
== d
.right_only
== [])
self
.failUnless(d
.same_files
== ['file'])
self
.failUnless(d
.diff_files
== [])
# Check attributes for comparison of two different directories
d
= filecmp
.dircmp(self
.dir, self
.dir_diff
)
self
.failUnless(d
.left_list
== ['file'])
self
.failUnless(d
.right_list
== ['file', 'file2'])
self
.failUnless(d
.common
== ['file'])
self
.failUnless(d
.left_only
== [])
self
.failUnless(d
.right_only
== ['file2'])
self
.failUnless(d
.same_files
== ['file'])
self
.failUnless(d
.diff_files
== [])
output
= open(os
.path
.join(self
.dir, 'file2'), 'w')
output
.write('Different contents.\n')
d
= filecmp
.dircmp(self
.dir, self
.dir_diff
)
self
.failUnless(d
.same_files
== ['file'])
self
.failUnless(d
.diff_files
== ['file2'])
test_support
.run_unittest(FileCompareTestCase
, DirCompareTestCase
)
if __name__
== "__main__":