comparison tests/test_externals.py @ 1060:7d82131e7801

test_externals: use stupid mode metaclass
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Fri, 09 Aug 2013 23:45:53 +0200
parents 2d7398fffd0d
children 258fb67fb956
comparison
equal deleted inserted replaced
1059:da2c835cd6b8 1060:7d82131e7801
14 subrepo = None 14 subrepo = None
15 15
16 from hgsubversion import svnexternals 16 from hgsubversion import svnexternals
17 17
18 class TestFetchExternals(test_util.TestBase): 18 class TestFetchExternals(test_util.TestBase):
19 stupid_mode_tests = True
20
19 def test_externalsfile(self): 21 def test_externalsfile(self):
20 f = svnexternals.externalsfile() 22 f = svnexternals.externalsfile()
21 f['t1'] = 'dir1 -r10 svn://foobar' 23 f['t1'] = 'dir1 -r10 svn://foobar'
22 f['t 2'] = 'dir2 -r10 svn://foobar' 24 f['t 2'] = 'dir2 -r10 svn://foobar'
23 f['t3'] = ['dir31 -r10 svn://foobar', 'dir32 -r10 svn://foobar'] 25 f['t3'] = ['dir31 -r10 svn://foobar', 'dir32 -r10 svn://foobar']
72 ] 74 ]
73 75
74 for line, expected in samples: 76 for line, expected in samples:
75 self.assertEqual(expected, svnexternals.parsedefinition(line)) 77 self.assertEqual(expected, svnexternals.parsedefinition(line))
76 78
77 def test_externals(self, stupid=False): 79 def test_externals(self):
78 repo = self._load_fixture_and_fetch('externals.svndump', stupid=stupid) 80 repo = self._load_fixture_and_fetch('externals.svndump')
79 81
80 ref0 = """[.] 82 ref0 = """[.]
81 ^/externals/project1 deps/project1 83 ^/externals/project1 deps/project1
82 """ 84 """
83 self.assertMultiLineEqual(ref0, repo[0]['.hgsvnexternals'].data()) 85 self.assertMultiLineEqual(ref0, repo[0]['.hgsvnexternals'].data())
122 124
123 ref6 = """[.] 125 ref6 = """[.]
124 -r2 ^/externals/project2@2 deps/project2 126 -r2 ^/externals/project2@2 deps/project2
125 """ 127 """
126 self.assertEqual(ref6, repo[6]['.hgsvnexternals'].data()) 128 self.assertEqual(ref6, repo[6]['.hgsvnexternals'].data())
127
128 def test_externals_stupid(self):
129 self.test_externals(True)
130 129
131 def test_updateexternals(self): 130 def test_updateexternals(self):
132 def checkdeps(deps, nodeps, repo, rev=None): 131 def checkdeps(deps, nodeps, repo, rev=None):
133 svnexternals.updateexternals(ui, [rev], repo) 132 svnexternals.updateexternals(ui, [rev], repo)
134 for d in deps: 133 for d in deps:
139 p = os.path.join(repo.root, d) 138 p = os.path.join(repo.root, d)
140 self.assertTrue(not os.path.isdir(p), 139 self.assertTrue(not os.path.isdir(p),
141 'unexpected: %s@%r' % (d, rev)) 140 'unexpected: %s@%r' % (d, rev))
142 141
143 ui = self.ui() 142 ui = self.ui()
144 repo = self._load_fixture_and_fetch('externals.svndump', stupid=0) 143 repo = self._load_fixture_and_fetch('externals.svndump')
145 commands.update(ui, repo) 144 commands.update(ui, repo)
146 checkdeps(['deps/project1'], [], repo, 0) 145 checkdeps(['deps/project1'], [], repo, 0)
147 checkdeps(['deps/project1', 'deps/project2'], [], repo, 1) 146 checkdeps(['deps/project1', 'deps/project2'], [], repo, 1)
148 checkdeps(['subdir/deps/project1', 'subdir2/deps/project1', 147 checkdeps(['subdir/deps/project1', 'subdir2/deps/project1',
149 'deps/project2'], 148 'deps/project2'],
150 ['deps/project1'], repo, 2) 149 ['deps/project1'], repo, 2)
151 checkdeps(['subdir/deps/project1', 'deps/project2'], 150 checkdeps(['subdir/deps/project1', 'deps/project2'],
152 ['subdir2/deps/project1'], repo, 3) 151 ['subdir2/deps/project1'], repo, 3)
153 checkdeps(['subdir/deps/project1'], ['deps/project2'], repo, 4) 152 checkdeps(['subdir/deps/project1'], ['deps/project2'], repo, 4)
154 153
155 def test_hgsub(self, stupid=False): 154 def test_hgsub(self):
156 if subrepo is None: 155 if subrepo is None:
157 return 156 return
158 repo = self._load_fixture_and_fetch('externals.svndump', 157 repo = self._load_fixture_and_fetch('externals.svndump',
159 externals='subrepos', 158 externals='subrepos')
160 stupid=stupid)
161 self.assertEqual("""\ 159 self.assertEqual("""\
162 deps/project1 = [hgsubversion] :^/externals/project1 deps/project1 160 deps/project1 = [hgsubversion] :^/externals/project1 deps/project1
163 """, repo[0]['.hgsub'].data()) 161 """, repo[0]['.hgsub'].data())
164 self.assertEqual("""\ 162 self.assertEqual("""\
165 HEAD deps/project1 163 HEAD deps/project1
214 deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2 212 deps/project2 = [hgsubversion] :-r{REV} ^/externals/project2@2 deps/project2
215 """, repo[6]['.hgsub'].data()) 213 """, repo[6]['.hgsub'].data())
216 self.assertEqual("""\ 214 self.assertEqual("""\
217 2 deps/project2 215 2 deps/project2
218 """, repo[6]['.hgsubstate'].data()) 216 """, repo[6]['.hgsubstate'].data())
219
220 def test_hgsub_stupid(self):
221 self.test_hgsub(True)
222 217
223 def test_ignore(self): 218 def test_ignore(self):
224 repo = self._load_fixture_and_fetch('externals.svndump', 219 repo = self._load_fixture_and_fetch('externals.svndump',
225 externals='ignore') 220 externals='ignore')
226 for rev in repo: 221 for rev in repo:
244 if subrepo is None: 239 if subrepo is None:
245 return 240 return
246 241
247 ui = self.ui() 242 ui = self.ui()
248 repo = self._load_fixture_and_fetch('externals.svndump', 243 repo = self._load_fixture_and_fetch('externals.svndump',
249 stupid=0, externals='subrepos') 244 externals='subrepos')
250 checkdeps(ui, repo, 0, ['deps/project1'], []) 245 checkdeps(ui, repo, 0, ['deps/project1'], [])
251 checkdeps(ui, repo, 1, ['deps/project1', 'deps/project2'], []) 246 checkdeps(ui, repo, 1, ['deps/project1', 'deps/project2'], [])
252 checkdeps(ui, repo, 2, ['subdir/deps/project1', 'subdir2/deps/project1', 247 checkdeps(ui, repo, 2, ['subdir/deps/project1', 'subdir2/deps/project1',
253 'deps/project2'], 248 'deps/project2'],
254 ['deps/project1']) 249 ['deps/project1'])
258 253
259 # Test update --clean, used to crash 254 # Test update --clean, used to crash
260 repo.wwrite('subdir/deps/project1/a', 'foobar', '') 255 repo.wwrite('subdir/deps/project1/a', 'foobar', '')
261 commands.update(ui, repo, node='4', clean=True) 256 commands.update(ui, repo, node='4', clean=True)
262 257
263 def test_mergeexternals(self, stupid=False): 258 def test_mergeexternals(self):
264 if subrepo is None: 259 if subrepo is None:
265 return 260 return
266 repo = self._load_fixture_and_fetch('mergeexternals.svndump', 261 repo = self._load_fixture_and_fetch('mergeexternals.svndump',
267 externals='subrepos', 262 externals='subrepos')
268 stupid=stupid)
269 # Check merged directories externals are fine 263 # Check merged directories externals are fine
270 self.assertEqual("""\ 264 self.assertEqual("""\
271 d1/ext = [hgsubversion] d1:^/trunk/common/ext ext 265 d1/ext = [hgsubversion] d1:^/trunk/common/ext ext
272 d2/ext = [hgsubversion] d2:^/trunk/common/ext ext 266 d2/ext = [hgsubversion] d2:^/trunk/common/ext ext
273 d3/ext3 = [hgsubversion] d3:^/trunk/common/ext ext3 267 d3/ext3 = [hgsubversion] d3:^/trunk/common/ext ext3
274 """, repo['tip']['.hgsub'].data()) 268 """, repo['tip']['.hgsub'].data())
275 269
276 def test_mergeexternals_stupid(self):
277 self.test_mergeexternals(True)
278
279 class TestPushExternals(test_util.TestBase): 270 class TestPushExternals(test_util.TestBase):
271 stupid_mode_tests = True
280 obsolete_mode_tests = True 272 obsolete_mode_tests = True
281 273
282 def test_push_externals(self, stupid=False): 274 def test_push_externals(self):
283 repo = self._load_fixture_and_fetch('pushexternals.svndump') 275 repo = self._load_fixture_and_fetch('pushexternals.svndump')
284 # Add a new reference on an existing and non-existing directory 276 # Add a new reference on an existing and non-existing directory
285 changes = [ 277 changes = [
286 ('.hgsvnexternals', '.hgsvnexternals', 278 ('.hgsvnexternals', '.hgsvnexternals',
287 """[dir] 279 """[dir]
293 """), 285 """),
294 ('subdir1/a', 'subdir1/a', 'a'), 286 ('subdir1/a', 'subdir1/a', 'a'),
295 ('subdir2/a', 'subdir2/a', 'a'), 287 ('subdir2/a', 'subdir2/a', 'a'),
296 ] 288 ]
297 self.commitchanges(changes) 289 self.commitchanges(changes)
298 self.pushrevisions(stupid) 290 self.pushrevisions()
299 self.assertchanges(changes, self.repo['tip']) 291 self.assertchanges(changes, self.repo['tip'])
300 292
301 # Remove all references from one directory, add a new one 293 # Remove all references from one directory, add a new one
302 # to the other (test multiline entries) 294 # to the other (test multiline entries)
303 changes = [ 295 changes = [
308 """), 300 """),
309 # This removal used to trigger the parent directory removal 301 # This removal used to trigger the parent directory removal
310 ('subdir1/a', None, None), 302 ('subdir1/a', None, None),
311 ] 303 ]
312 self.commitchanges(changes) 304 self.commitchanges(changes)
313 self.pushrevisions(stupid) 305 self.pushrevisions()
314 self.assertchanges(changes, self.repo['tip']) 306 self.assertchanges(changes, self.repo['tip'])
315 # Check subdir2/a is still there even if the externals were removed 307 # Check subdir2/a is still there even if the externals were removed
316 self.assertTrue('subdir2/a' in self.repo['tip']) 308 self.assertTrue('subdir2/a' in self.repo['tip'])
317 self.assertTrue('subdir1/a' not in self.repo['tip']) 309 self.assertTrue('subdir1/a' not in self.repo['tip'])
318 310
319 # Test externals removal 311 # Test externals removal
320 changes = [ 312 changes = [
321 ('.hgsvnexternals', None, None), 313 ('.hgsvnexternals', None, None),
322 ] 314 ]
323 self.commitchanges(changes) 315 self.commitchanges(changes)
324 self.pushrevisions(stupid) 316 self.pushrevisions()
325 self.assertchanges(changes, self.repo['tip']) 317 self.assertchanges(changes, self.repo['tip'])
326 318
327 def test_push_externals_stupid(self): 319 def test_push_hgsub(self):
328 self.test_push_externals(True)
329
330 def test_push_hgsub(self, stupid=False):
331 if subrepo is None: 320 if subrepo is None:
332 return 321 return
333 322
334 repo, repo_path = self.load_and_fetch('pushexternals.svndump', 323 repo, repo_path = self.load_and_fetch('pushexternals.svndump',
335 externals='subrepos') 324 externals='subrepos')
350 ] 339 ]
351 self.svnco(repo_path, 'externals/project2', '2', 'dir/deps/project2') 340 self.svnco(repo_path, 'externals/project2', '2', 'dir/deps/project2')
352 self.svnco(repo_path, 'externals/project1', '2', 'subdir1/deps/project1') 341 self.svnco(repo_path, 'externals/project1', '2', 'subdir1/deps/project1')
353 self.svnco(repo_path, 'externals/project2', '2', 'subdir2/deps/project2') 342 self.svnco(repo_path, 'externals/project2', '2', 'subdir2/deps/project2')
354 self.commitchanges(changes) 343 self.commitchanges(changes)
355 self.pushrevisions(stupid) 344 self.pushrevisions()
356 self.assertchanges(changes, self.repo['tip']) 345 self.assertchanges(changes, self.repo['tip'])
357 346
358 # Check .hgsub and .hgsubstate were not pushed 347 # Check .hgsub and .hgsubstate were not pushed
359 self.assertEqual(['dir', 'subdir1', 'subdir1/a', 'subdir2', 348 self.assertEqual(['dir', 'subdir1', 'subdir1/a', 'subdir2',
360 'subdir2/a'], test_util.svnls(repo_path, 'trunk')) 349 'subdir2/a'], test_util.svnls(repo_path, 'trunk'))
374 ('subdir1/a', None, None), 363 ('subdir1/a', None, None),
375 ] 364 ]
376 self.svnco(repo_path, 'externals/project1', '2', 'subdir1/deps/project1') 365 self.svnco(repo_path, 'externals/project1', '2', 'subdir1/deps/project1')
377 self.svnco(repo_path, 'externals/project2', '2', 'subdir1/deps/project2') 366 self.svnco(repo_path, 'externals/project2', '2', 'subdir1/deps/project2')
378 self.commitchanges(changes) 367 self.commitchanges(changes)
379 self.pushrevisions(stupid) 368 self.pushrevisions()
380 self.assertchanges(changes, self.repo['tip']) 369 self.assertchanges(changes, self.repo['tip'])
381 # Check subdir2/a is still there even if the externals were removed 370 # Check subdir2/a is still there even if the externals were removed
382 self.assertTrue('subdir2/a' in self.repo['tip']) 371 self.assertTrue('subdir2/a' in self.repo['tip'])
383 self.assertTrue('subdir1/a' not in self.repo['tip']) 372 self.assertTrue('subdir1/a' not in self.repo['tip'])
384 373
391 ('.hgsubstate', '.hgsubstate', """\ 380 ('.hgsubstate', '.hgsubstate', """\
392 HEAD subdir1/deps/project1 381 HEAD subdir1/deps/project1
393 """), 382 """),
394 ] 383 ]
395 self.commitchanges(changes) 384 self.commitchanges(changes)
396 self.pushrevisions(stupid) 385 self.pushrevisions()
397 self.assertchanges(changes, self.repo['tip']) 386 self.assertchanges(changes, self.repo['tip'])
398 387
399 # Test externals removal 388 # Test externals removal
400 changes = [ 389 changes = [
401 ('.hgsub', None, None), 390 ('.hgsub', None, None),
402 ('.hgsubstate', None, None), 391 ('.hgsubstate', None, None),
403 ] 392 ]
404 self.commitchanges(changes) 393 self.commitchanges(changes)
405 self.pushrevisions(stupid) 394 self.pushrevisions()
406 self.assertchanges(changes, self.repo['tip']) 395 self.assertchanges(changes, self.repo['tip'])