sapling/tests/comprehensive/test-hgsubversion-stupid-pull.py
Kostia Balytskyi f47acc0834 hgsubversion: fixup comprehensive tests imports
Summary:
Here we make imports in `hgsubversion` tests work again.
This consists of two main parts:
1. tests were importing each other as python modules. Now that they have `-` in
their names, it is impossible. However, we can utilize some tricks to work
around this (`imp.load_source`)
2. tests where doing some weird location assumptions, we clean that up


Depends on D6719890

Test Plan: - `./run-tests -l test-hgsubversion-*`, see non-import-exception failures

Reviewers: #sourcecontrol

Differential Revision: https://phabricator.intern.facebook.com/D6719894
2018-01-17 03:23:44 -08:00

66 lines
2.5 KiB
Python

# no-check-code -- see T24862348
import os
import sys
from mercurial import hg
import test_hgsubversion_util
from hgext.hgsubversion import svnwrap
def _do_case(self, name, layout):
subdir = test_hgsubversion_util.subdir.get(name, '')
config = {}
u = test_hgsubversion_util.testui()
for branch, path in test_hgsubversion_util.custom.get(name, {}).iteritems():
config['hgsubversionbranch.%s' % branch] = path
u.setconfig('hgsubversionbranch', branch, path)
repo, repo_path = self.load_and_fetch(name,
subdir=subdir,
layout=layout,
config=config)
assert test_hgsubversion_util.repolen(self.repo) > 0, \
'Repo had no changes, maybe you need to add a subdir entry in test_hgsubversion_util?'
wc2_path = self.wc_path + '_stupid'
checkout_path = repo_path
if subdir:
checkout_path += '/' + subdir
u.setconfig('hgsubversion', 'stupid', '1')
u.setconfig('hgsubversion', 'layout', layout)
cp = test_hgsubversion_util.fileurl(checkout_path)
test_hgsubversion_util.hgclone(u, cp, wc2_path, update=False)
if layout == 'single':
self.assertEqual(len(self.repo.heads()), 1)
self.repo2 = hg.repository(test_hgsubversion_util.testui(), wc2_path)
self.assertEqual(self.repo.heads(), self.repo2.heads())
def buildmethod(case, name, layout):
m = lambda self: self._do_case(case, layout)
m.__name__ = name
m.__doc__ = 'Test stupid produces same as real on %s. (%s)' % (case, layout)
return m
if svnwrap.subversion_version < (1, 9, 0):
attrs = {'_do_case': _do_case,
}
for case in (f for f in os.listdir(test_hgsubversion_util.FIXTURES)
if f.endswith('.svndump')):
if case == 'corrupt.svndump':
continue
name = 'test_' + case[:-len('.svndump')].replace('-', '_')
# Automatic layout branchtag collision exposes a minor defect
# here, but since it isn't a regression we suppress the test case.
if case != 'branchtagcollision.svndump':
attrs[name] = buildmethod(case, name, 'auto')
attrs[name + '_single'] = buildmethod(case, name + '_single', 'single')
if case in test_hgsubversion_util.custom:
attrs[name + '_custom'] = buildmethod(case, name + '_custom', 'custom')
StupidPullTests = type('StupidPullTests', (test_hgsubversion_util.TestBase,), attrs)
if __name__ == '__main__':
import silenttestrunner
silenttestrunner.main(__name__)