Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e63846d

Browse files
committed
Add test suite for filecmp.py, after some discussion on bug #680494.
Right now the test cases create a files and a directory in the temp. directory. Raymond suggested checking files in to the test/ directory, simplifying the setup/teardown methods; is that worth doing?
1 parent 8440761 commit e63846d

1 file changed

Lines changed: 128 additions & 0 deletions

File tree

Lib/test/test_filecmp.py

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
2+
import os, filecmp, shutil, tempfile
3+
import unittest
4+
from test import test_support
5+
6+
class FileCompareTestCase(unittest.TestCase):
7+
def setUp(self):
8+
self.name = test_support.TESTFN
9+
self.name_same = test_support.TESTFN + '-same'
10+
self.name_diff = test_support.TESTFN + '-diff'
11+
data = 'Contents of file go here.\n'
12+
for name in [self.name, self.name_same, self.name_diff]:
13+
output = open(name, 'w')
14+
output.write(data)
15+
output.close()
16+
17+
output = open(self.name_diff, 'a+')
18+
output.write('An extra line.\n')
19+
output.close()
20+
self.dir = tempfile.gettempdir()
21+
22+
def tearDown(self):
23+
os.unlink(self.name)
24+
os.unlink(self.name_same)
25+
os.unlink(self.name_diff)
26+
27+
def test_matching(self):
28+
self.failUnless(filecmp.cmp(self.name, self.name_same),
29+
"Comparing file to itself fails")
30+
self.failUnless(filecmp.cmp(self.name, self.name_same, shallow=False),
31+
"Comparing file to itself fails")
32+
self.failUnless(filecmp.cmp(self.name, self.name, shallow=False),
33+
"Comparing file to identical file fails")
34+
self.failUnless(filecmp.cmp(self.name, self.name),
35+
"Comparing file to identical file fails")
36+
37+
def test_different(self):
38+
self.failIf(filecmp.cmp(self.name, self.name_diff),
39+
"Mismatched files compare as equal")
40+
self.failIf(filecmp.cmp(self.name, self.dir),
41+
"File and directory compare as equal")
42+
43+
class DirCompareTestCase(unittest.TestCase):
44+
def setUp(self):
45+
tmpdir = tempfile.gettempdir()
46+
self.dir = os.path.join(tmpdir, 'dir')
47+
self.dir_same = os.path.join(tmpdir, 'dir-same')
48+
self.dir_diff = os.path.join(tmpdir, 'dir-diff')
49+
data = 'Contents of file go here.\n'
50+
for dir in [self.dir, self.dir_same, self.dir_diff]:
51+
os.mkdir(dir)
52+
output = open(os.path.join(dir, 'file'), 'w')
53+
output.write(data)
54+
output.close()
55+
56+
output = open(os.path.join(self.dir_diff, 'file2'), 'w')
57+
output.write('An extra file.\n')
58+
output.close()
59+
60+
def tearDown(self):
61+
shutil.rmtree(self.dir)
62+
shutil.rmtree(self.dir_same)
63+
shutil.rmtree(self.dir_diff)
64+
65+
def test_cmpfiles(self):
66+
self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file']) ==
67+
(['file'], [], []),
68+
"Comparing directory to itself fails")
69+
self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file']) ==
70+
(['file'], [], []),
71+
"Comparing directory to same fails")
72+
73+
# Try it with shallow=False
74+
self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file'],
75+
shallow=False) ==
76+
(['file'], [], []),
77+
"Comparing directory to itself fails")
78+
self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file'],
79+
shallow=False),
80+
"Comparing directory to same fails")
81+
82+
# Add different file2
83+
output = open(os.path.join(self.dir, 'file2'), 'w')
84+
output.write('Different contents.\n')
85+
output.close()
86+
87+
self.failIf(filecmp.cmpfiles(self.dir, self.dir_same,
88+
['file', 'file2']) ==
89+
(['file'], ['file2'], []),
90+
"Comparing mismatched directories fails")
91+
92+
93+
def test_dircmp(self):
94+
# Check attributes for comparison of two identical directories
95+
d = filecmp.dircmp(self.dir, self.dir_same)
96+
self.failUnless(d.left_list == d.right_list == ['file'])
97+
self.failUnless(d.common == ['file'])
98+
self.failUnless(d.left_only == d.right_only == [])
99+
self.failUnless(d.same_files == ['file'])
100+
self.failUnless(d.diff_files == [])
101+
102+
# Check attributes for comparison of two different directories
103+
d = filecmp.dircmp(self.dir, self.dir_diff)
104+
self.failUnless(d.left_list == ['file'])
105+
self.failUnless(d.right_list == ['file', 'file2'])
106+
self.failUnless(d.common == ['file'])
107+
self.failUnless(d.left_only == [])
108+
self.failUnless(d.right_only == ['file2'])
109+
self.failUnless(d.same_files == ['file'])
110+
self.failUnless(d.diff_files == [])
111+
112+
# Add different file2
113+
output = open(os.path.join(self.dir, 'file2'), 'w')
114+
output.write('Different contents.\n')
115+
output.close()
116+
d = filecmp.dircmp(self.dir, self.dir_diff)
117+
self.failUnless(d.same_files == ['file'])
118+
self.failUnless(d.diff_files == ['file2'])
119+
120+
121+
def test_main():
122+
suite = unittest.TestSuite()
123+
for cls in FileCompareTestCase, DirCompareTestCase:
124+
suite.addTest(unittest.makeSuite(cls))
125+
test_support.run_suite(suite)
126+
127+
if __name__ == "__main__":
128+
test_main()

0 commit comments

Comments
 (0)