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

``