bpo-15450: Allow subclassing of dircmp (GH-23424) (#23424) · python/cpython@2f2f9d0 (original) (raw)
`@@ -66,6 +66,8 @@ def setUp(self):
`
66
66
`for dir in (self.dir, self.dir_same, self.dir_diff, self.dir_ignored):
`
67
67
`shutil.rmtree(dir, True)
`
68
68
`os.mkdir(dir)
`
``
69
`+
subdir_path = os.path.join(dir, 'subdir')
`
``
70
`+
os.mkdir(subdir_path)
`
69
71
`if self.caseinsensitive and dir is self.dir_same:
`
70
72
`fn = 'FiLe' # Verify case-insensitive comparison
`
71
73
`else:
`
`@@ -110,24 +112,33 @@ def test_cmpfiles(self):
`
110
112
`"Comparing mismatched directories fails")
`
111
113
``
112
114
``
``
115
`+
def _assert_lists(self, actual, expected):
`
``
116
`+
"""Assert that two lists are equal, up to ordering."""
`
``
117
`+
self.assertEqual(sorted(actual), sorted(expected))
`
``
118
+
``
119
+
113
120
`def test_dircmp(self):
`
114
121
`# Check attributes for comparison of two identical directories
`
115
122
`left_dir, right_dir = self.dir, self.dir_same
`
116
123
`d = filecmp.dircmp(left_dir, right_dir)
`
117
124
`self.assertEqual(d.left, left_dir)
`
118
125
`self.assertEqual(d.right, right_dir)
`
119
126
`if self.caseinsensitive:
`
120
``
`-
self.assertEqual([d.left_list, d.right_list],[['file'], ['FiLe']])
`
``
127
`+
self._assert_lists(d.left_list, ['file', 'subdir'])
`
``
128
`+
self._assert_lists(d.right_list, ['FiLe', 'subdir'])
`
121
129
`else:
`
122
``
`-
self.assertEqual([d.left_list, d.right_list],[['file'], ['file']])
`
123
``
`-
self.assertEqual(d.common, ['file'])
`
``
130
`+
self._assert_lists(d.left_list, ['file', 'subdir'])
`
``
131
`+
self._assert_lists(d.right_list, ['file', 'subdir'])
`
``
132
`+
self._assert_lists(d.common, ['file', 'subdir'])
`
``
133
`+
self._assert_lists(d.common_dirs, ['subdir'])
`
124
134
`self.assertEqual(d.left_only, [])
`
125
135
`self.assertEqual(d.right_only, [])
`
126
136
`self.assertEqual(d.same_files, ['file'])
`
127
137
`self.assertEqual(d.diff_files, [])
`
128
138
`expected_report = [
`
129
139
`"diff {} {}".format(self.dir, self.dir_same),
`
130
140
`"Identical files : ['file']",
`
``
141
`+
"Common subdirectories : ['subdir']",
`
131
142
` ]
`
132
143
`self._assert_report(d.report, expected_report)
`
133
144
``
`@@ -136,9 +147,10 @@ def test_dircmp(self):
`
136
147
`d = filecmp.dircmp(left_dir, right_dir)
`
137
148
`self.assertEqual(d.left, left_dir)
`
138
149
`self.assertEqual(d.right, right_dir)
`
139
``
`-
self.assertEqual(d.left_list, ['file'])
`
140
``
`-
self.assertEqual(d.right_list, ['file', 'file2'])
`
141
``
`-
self.assertEqual(d.common, ['file'])
`
``
150
`+
self._assert_lists(d.left_list, ['file', 'subdir'])
`
``
151
`+
self._assert_lists(d.right_list, ['file', 'file2', 'subdir'])
`
``
152
`+
self._assert_lists(d.common, ['file', 'subdir'])
`
``
153
`+
self._assert_lists(d.common_dirs, ['subdir'])
`
142
154
`self.assertEqual(d.left_only, [])
`
143
155
`self.assertEqual(d.right_only, ['file2'])
`
144
156
`self.assertEqual(d.same_files, ['file'])
`
`@@ -147,6 +159,7 @@ def test_dircmp(self):
`
147
159
`"diff {} {}".format(self.dir, self.dir_diff),
`
148
160
`"Only in {} : ['file2']".format(self.dir_diff),
`
149
161
`"Identical files : ['file']",
`
``
162
`+
"Common subdirectories : ['subdir']",
`
150
163
` ]
`
151
164
`self._assert_report(d.report, expected_report)
`
152
165
``
`@@ -159,9 +172,9 @@ def test_dircmp(self):
`
159
172
`d = filecmp.dircmp(left_dir, right_dir)
`
160
173
`self.assertEqual(d.left, left_dir)
`
161
174
`self.assertEqual(d.right, right_dir)
`
162
``
`-
self.assertEqual(d.left_list, ['file', 'file2'])
`
163
``
`-
self.assertEqual(d.right_list, ['file'])
`
164
``
`-
self.assertEqual(d.common, ['file'])
`
``
175
`+
self._assert_lists(d.left_list, ['file', 'file2', 'subdir'])
`
``
176
`+
self._assert_lists(d.right_list, ['file', 'subdir'])
`
``
177
`+
self._assert_lists(d.common, ['file', 'subdir'])
`
165
178
`self.assertEqual(d.left_only, ['file2'])
`
166
179
`self.assertEqual(d.right_only, [])
`
167
180
`self.assertEqual(d.same_files, ['file'])
`
`@@ -170,6 +183,7 @@ def test_dircmp(self):
`
170
183
`"diff {} {}".format(self.dir, self.dir_diff),
`
171
184
`"Only in {} : ['file2']".format(self.dir),
`
172
185
`"Identical files : ['file']",
`
``
186
`+
"Common subdirectories : ['subdir']",
`
173
187
` ]
`
174
188
`self._assert_report(d.report, expected_report)
`
175
189
``
`@@ -183,24 +197,45 @@ def test_dircmp(self):
`
183
197
`"diff {} {}".format(self.dir, self.dir_diff),
`
184
198
`"Identical files : ['file']",
`
185
199
`"Differing files : ['file2']",
`
``
200
`+
"Common subdirectories : ['subdir']",
`
186
201
` ]
`
187
202
`self._assert_report(d.report, expected_report)
`
188
203
``
``
204
`+
def test_dircmp_subdirs_type(self):
`
``
205
`+
"""Check that dircmp.subdirs respects subclassing."""
`
``
206
`+
class MyDirCmp(filecmp.dircmp):
`
``
207
`+
pass
`
``
208
`+
d = MyDirCmp(self.dir, self.dir_diff)
`
``
209
`+
sub_dirs = d.subdirs
`
``
210
`+
self.assertEqual(list(sub_dirs.keys()), ['subdir'])
`
``
211
`+
sub_dcmp = sub_dirs['subdir']
`
``
212
`+
self.assertEqual(type(sub_dcmp), MyDirCmp)
`
``
213
+
189
214
`def test_report_partial_closure(self):
`
190
215
`left_dir, right_dir = self.dir, self.dir_same
`
191
216
`d = filecmp.dircmp(left_dir, right_dir)
`
``
217
`+
left_subdir = os.path.join(left_dir, 'subdir')
`
``
218
`+
right_subdir = os.path.join(right_dir, 'subdir')
`
192
219
`expected_report = [
`
193
220
`"diff {} {}".format(self.dir, self.dir_same),
`
194
221
`"Identical files : ['file']",
`
``
222
`+
"Common subdirectories : ['subdir']",
`
``
223
`+
'',
`
``
224
`+
"diff {} {}".format(left_subdir, right_subdir),
`
195
225
` ]
`
196
226
`self._assert_report(d.report_partial_closure, expected_report)
`
197
227
``
198
228
`def test_report_full_closure(self):
`
199
229
`left_dir, right_dir = self.dir, self.dir_same
`
200
230
`d = filecmp.dircmp(left_dir, right_dir)
`
``
231
`+
left_subdir = os.path.join(left_dir, 'subdir')
`
``
232
`+
right_subdir = os.path.join(right_dir, 'subdir')
`
201
233
`expected_report = [
`
202
234
`"diff {} {}".format(self.dir, self.dir_same),
`
203
235
`"Identical files : ['file']",
`
``
236
`+
"Common subdirectories : ['subdir']",
`
``
237
`+
'',
`
``
238
`+
"diff {} {}".format(left_subdir, right_subdir),
`
204
239
` ]
`
205
240
`self._assert_report(d.report_full_closure, expected_report)
`
206
241
``