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.assertTrue(filecmp.cmp(self.name, self.name_same),
|
---|
29 | "Comparing file to itself fails")
|
---|
30 | self.assertTrue(filecmp.cmp(self.name, self.name_same, shallow=False),
|
---|
31 | "Comparing file to itself fails")
|
---|
32 | self.assertTrue(filecmp.cmp(self.name, self.name, shallow=False),
|
---|
33 | "Comparing file to identical file fails")
|
---|
34 | self.assertTrue(filecmp.cmp(self.name, self.name),
|
---|
35 | "Comparing file to identical file fails")
|
---|
36 |
|
---|
37 | def test_different(self):
|
---|
38 | self.assertFalse(filecmp.cmp(self.name, self.name_diff),
|
---|
39 | "Mismatched files compare as equal")
|
---|
40 | self.assertFalse(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.assertTrue(filecmp.cmpfiles(self.dir, self.dir, ['file']) ==
|
---|
73 | (['file'], [], []),
|
---|
74 | "Comparing directory to itself fails")
|
---|
75 | self.assertTrue(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.assertTrue(filecmp.cmpfiles(self.dir, self.dir, ['file'],
|
---|
81 | shallow=False) ==
|
---|
82 | (['file'], [], []),
|
---|
83 | "Comparing directory to itself fails")
|
---|
84 | self.assertTrue(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.assertFalse(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.assertTrue(d.common == ['file'])
|
---|
107 | self.assertTrue(d.left_only == d.right_only == [])
|
---|
108 | self.assertTrue(d.same_files == ['file'])
|
---|
109 | self.assertTrue(d.diff_files == [])
|
---|
110 |
|
---|
111 | # Check attributes for comparison of two different directories
|
---|
112 | d = filecmp.dircmp(self.dir, self.dir_diff)
|
---|
113 | self.assertTrue(d.left_list == ['file'])
|
---|
114 | self.assertTrue(d.right_list == ['file', 'file2'])
|
---|
115 | self.assertTrue(d.common == ['file'])
|
---|
116 | self.assertTrue(d.left_only == [])
|
---|
117 | self.assertTrue(d.right_only == ['file2'])
|
---|
118 | self.assertTrue(d.same_files == ['file'])
|
---|
119 | self.assertTrue(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.assertTrue(d.same_files == ['file'])
|
---|
127 | self.assertTrue(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()
|
---|