@@ -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
0 commit comments