@@ -66,6 +66,8 @@ def setUp(self):
6666 for dir in (self .dir , self .dir_same , self .dir_diff , self .dir_ignored ):
6767 shutil .rmtree (dir , True )
6868 os .mkdir (dir )
69+ subdir_path = os .path .join (dir , 'subdir' )
70+ os .mkdir (subdir_path )
6971 if self .caseinsensitive and dir is self .dir_same :
7072 fn = 'FiLe' # Verify case-insensitive comparison
7173 else :
@@ -110,24 +112,33 @@ def test_cmpfiles(self):
110112 "Comparing mismatched directories fails" )
111113
112114
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+
113120 def test_dircmp (self ):
114121 # Check attributes for comparison of two identical directories
115122 left_dir , right_dir = self .dir , self .dir_same
116123 d = filecmp .dircmp (left_dir , right_dir )
117124 self .assertEqual (d .left , left_dir )
118125 self .assertEqual (d .right , right_dir )
119126 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' ])
121129 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' ])
124134 self .assertEqual (d .left_only , [])
125135 self .assertEqual (d .right_only , [])
126136 self .assertEqual (d .same_files , ['file' ])
127137 self .assertEqual (d .diff_files , [])
128138 expected_report = [
129139 "diff {} {}" .format (self .dir , self .dir_same ),
130140 "Identical files : ['file']" ,
141+ "Common subdirectories : ['subdir']" ,
131142 ]
132143 self ._assert_report (d .report , expected_report )
133144
@@ -136,9 +147,10 @@ def test_dircmp(self):
136147 d = filecmp .dircmp (left_dir , right_dir )
137148 self .assertEqual (d .left , left_dir )
138149 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' ])
142154 self .assertEqual (d .left_only , [])
143155 self .assertEqual (d .right_only , ['file2' ])
144156 self .assertEqual (d .same_files , ['file' ])
@@ -147,6 +159,7 @@ def test_dircmp(self):
147159 "diff {} {}" .format (self .dir , self .dir_diff ),
148160 "Only in {} : ['file2']" .format (self .dir_diff ),
149161 "Identical files : ['file']" ,
162+ "Common subdirectories : ['subdir']" ,
150163 ]
151164 self ._assert_report (d .report , expected_report )
152165
@@ -159,9 +172,9 @@ def test_dircmp(self):
159172 d = filecmp .dircmp (left_dir , right_dir )
160173 self .assertEqual (d .left , left_dir )
161174 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 ' ])
165178 self .assertEqual (d .left_only , ['file2' ])
166179 self .assertEqual (d .right_only , [])
167180 self .assertEqual (d .same_files , ['file' ])
@@ -170,6 +183,7 @@ def test_dircmp(self):
170183 "diff {} {}" .format (self .dir , self .dir_diff ),
171184 "Only in {} : ['file2']" .format (self .dir ),
172185 "Identical files : ['file']" ,
186+ "Common subdirectories : ['subdir']" ,
173187 ]
174188 self ._assert_report (d .report , expected_report )
175189
@@ -183,24 +197,45 @@ def test_dircmp(self):
183197 "diff {} {}" .format (self .dir , self .dir_diff ),
184198 "Identical files : ['file']" ,
185199 "Differing files : ['file2']" ,
200+ "Common subdirectories : ['subdir']" ,
186201 ]
187202 self ._assert_report (d .report , expected_report )
188203
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+
189214 def test_report_partial_closure (self ):
190215 left_dir , right_dir = self .dir , self .dir_same
191216 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' )
192219 expected_report = [
193220 "diff {} {}" .format (self .dir , self .dir_same ),
194221 "Identical files : ['file']" ,
222+ "Common subdirectories : ['subdir']" ,
223+ '' ,
224+ "diff {} {}" .format (left_subdir , right_subdir ),
195225 ]
196226 self ._assert_report (d .report_partial_closure , expected_report )
197227
198228 def test_report_full_closure (self ):
199229 left_dir , right_dir = self .dir , self .dir_same
200230 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' )
201233 expected_report = [
202234 "diff {} {}" .format (self .dir , self .dir_same ),
203235 "Identical files : ['file']" ,
236+ "Common subdirectories : ['subdir']" ,
237+ '' ,
238+ "diff {} {}" .format (left_subdir , right_subdir ),
204239 ]
205240 self ._assert_report (d .report_full_closure , expected_report )
206241
0 commit comments