|
1 |
|
2 import os, filecmp, shutil, tempfile, shutil |
|
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 self.caseinsensitive = os.path.normcase('A') == os.path.normcase('a') |
|
50 data = 'Contents of file go here.\n' |
|
51 for dir in [self.dir, self.dir_same, self.dir_diff]: |
|
52 shutil.rmtree(dir, True) |
|
53 os.mkdir(dir) |
|
54 if self.caseinsensitive and dir is self.dir_same: |
|
55 fn = 'FiLe' # Verify case-insensitive comparison |
|
56 else: |
|
57 fn = 'file' |
|
58 output = open(os.path.join(dir, fn), 'w') |
|
59 output.write(data) |
|
60 output.close() |
|
61 |
|
62 output = open(os.path.join(self.dir_diff, 'file2'), 'w') |
|
63 output.write('An extra file.\n') |
|
64 output.close() |
|
65 |
|
66 def tearDown(self): |
|
67 shutil.rmtree(self.dir) |
|
68 shutil.rmtree(self.dir_same) |
|
69 shutil.rmtree(self.dir_diff) |
|
70 |
|
71 def test_cmpfiles(self): |
|
72 self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file']) == |
|
73 (['file'], [], []), |
|
74 "Comparing directory to itself fails") |
|
75 self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file']) == |
|
76 (['file'], [], []), |
|
77 "Comparing directory to same fails") |
|
78 |
|
79 # Try it with shallow=False |
|
80 self.failUnless(filecmp.cmpfiles(self.dir, self.dir, ['file'], |
|
81 shallow=False) == |
|
82 (['file'], [], []), |
|
83 "Comparing directory to itself fails") |
|
84 self.failUnless(filecmp.cmpfiles(self.dir, self.dir_same, ['file'], |
|
85 shallow=False), |
|
86 "Comparing directory to same fails") |
|
87 |
|
88 # Add different file2 |
|
89 output = open(os.path.join(self.dir, 'file2'), 'w') |
|
90 output.write('Different contents.\n') |
|
91 output.close() |
|
92 |
|
93 self.failIf(filecmp.cmpfiles(self.dir, self.dir_same, |
|
94 ['file', 'file2']) == |
|
95 (['file'], ['file2'], []), |
|
96 "Comparing mismatched directories fails") |
|
97 |
|
98 |
|
99 def test_dircmp(self): |
|
100 # Check attributes for comparison of two identical directories |
|
101 d = filecmp.dircmp(self.dir, self.dir_same) |
|
102 if self.caseinsensitive: |
|
103 self.assertEqual([d.left_list, d.right_list],[['file'], ['FiLe']]) |
|
104 else: |
|
105 self.assertEqual([d.left_list, d.right_list],[['file'], ['file']]) |
|
106 self.failUnless(d.common == ['file']) |
|
107 self.failUnless(d.left_only == d.right_only == []) |
|
108 self.failUnless(d.same_files == ['file']) |
|
109 self.failUnless(d.diff_files == []) |
|
110 |
|
111 # Check attributes for comparison of two different directories |
|
112 d = filecmp.dircmp(self.dir, self.dir_diff) |
|
113 self.failUnless(d.left_list == ['file']) |
|
114 self.failUnless(d.right_list == ['file', 'file2']) |
|
115 self.failUnless(d.common == ['file']) |
|
116 self.failUnless(d.left_only == []) |
|
117 self.failUnless(d.right_only == ['file2']) |
|
118 self.failUnless(d.same_files == ['file']) |
|
119 self.failUnless(d.diff_files == []) |
|
120 |
|
121 # Add different file2 |
|
122 output = open(os.path.join(self.dir, 'file2'), 'w') |
|
123 output.write('Different contents.\n') |
|
124 output.close() |
|
125 d = filecmp.dircmp(self.dir, self.dir_diff) |
|
126 self.failUnless(d.same_files == ['file']) |
|
127 self.failUnless(d.diff_files == ['file2']) |
|
128 |
|
129 |
|
130 def test_main(): |
|
131 test_support.run_unittest(FileCompareTestCase, DirCompareTestCase) |
|
132 |
|
133 if __name__ == "__main__": |
|
134 test_main() |