view tests/comprehensive/test_stupid_pull.py @ 607:b5f1b629c629

svn_swig_wrapper: improved handling of missing or outdated bindings. Instead of aborting with a generic message when Subversion bindings are missing, provide a helpful message. Also, the version check is refactored to make it easier to bump our requirements in the future. Finally, error messages are shorten so they fit in 80 columns along with the standard `abort: ' prefix.
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Fri, 30 Apr 2010 17:35:36 +0200
parents 1fd3cfa47c5e
children 58f397523604
line wrap: on
line source

import os
import pickle
import unittest

from mercurial import hg
from mercurial import ui

from tests import test_util
from hgsubversion import wrappers


def _do_case(self, name, layout):
    subdir = test_util.subdir.get(name, '')
    self._load_fixture_and_fetch(name, subdir=subdir, stupid=False, layout=layout)
    assert len(self.repo) > 0, 'Repo had no changes, maybe you need to add a subdir entry in test_util?'
    wc2_path = self.wc_path + '_stupid'
    u = ui.ui()
    checkout_path = self.repo_path
    if subdir:
        checkout_path += '/' + subdir
    u.setconfig('hgsubversion', 'stupid', '1')
    u.setconfig('hgsubversion', 'layout', layout)
    hg.clone(u, test_util.fileurl(checkout_path), wc2_path, update=False)
    if layout == 'single':
        self.assertEqual(len(self.repo.heads()), 1)
    self.repo2 = hg.repository(ui.ui(), 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

attrs = {'_do_case': _do_case,
         }
for case in (f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')):
    name = 'test_' + case[:-len('.svndump')]
    attrs[name] = buildmethod(case, name, 'auto')
    name += '_single'
    attrs[name] = buildmethod(case, name, 'single')

StupidPullTests = type('StupidPullTests', (test_util.TestBase, ), attrs)


def suite():
    all = [unittest.TestLoader().loadTestsFromTestCase(StupidPullTests),
          ]
    return unittest.TestSuite(all)