Source code for tests.helpers

# copyright 2008 by Ronny Pfannschmidt
# license lgpl3 or later

from __future__ import with_statement

from anyvc.metadata import state_descriptions


[docs]class WdWrap(object): """ :param wd: the workdir to wrap :type wd: subclass of :class:`anyvc.common.workdir.Workdir` decorator for a vcs workdir instance adds testing utility functions and proxies the other methods/attributes to the real instance """ def __init__(self, wd): self.__wd = wd def __getattr__(self, name): return getattr(self.__wd, name)
[docs] def put_files(self, mapping): """ :type mapping: dict of (filename, text content) the text content will be rstripped and get a newline appended """ for name, content in mapping.items(): path = self.path.ensure(name) path.write(content.rstrip() + '\n')
[docs] def has_files(self, *files): """ :arg files: a listing of filenames that shsould exist """ missing = [name for name in map(self.path.join, files) if not name.check()] assert not missing, 'missing %s' % ', '.join(missing) return not missing
[docs] def delete_files(self, *relpaths): """ :arg relpaths: listing of files to remove """ for path in relpaths: self.path.join(path).remove()
[docs] def check_states(self, exact=True, **kw): """ .. better listing of the states! :param bool exact: if true, ignore additional states :keyword $statename: state name for that particular file list :type $statename: list of relative path :returns: True if all supplied files have the asumed state """ __tracebackhide__ = True assert isinstance(exact, bool) mapping = dict((rn, state) for state, rns in kw.items() for rn in rns) print mapping used = set() all = set() infos = list(self.status()) print infos for info in infos: all.add(info.abspath) print info assert info.state in state_descriptions if info.relpath in mapping: expected = mapping[info.relpath] assert info.state == expected, '%s wanted %s but got %s' % ( info.relpath, expected, info.state, ) used.add(info.relpath) untested = set(mapping) - used print 'all:', sorted(all) print 'used:', sorted(used) print 'missing?:', sorted(all - used) print 'untested:', sorted(untested) assert not untested, 'not all excepted stated occured'
[docs]class VcsMan(object): """ utility class to manage the creation of repositories and workdirs inside of a specific path (usually the tmpdir funcarg of a test) """ def __init__(self, vc, base, backend): self.vc = vc self.base = base.ensure(dir=True) self.backend = backend def __repr__(self): return '<VcsMan %(vc)s %(base)r>' % vars(self)
[docs] def create_wd(self, workdir, source=None): """ :param workdir: name of the target workdir :type workdir: str :param source: name of a source repository :type source: repo or None create a workdir if `source` is given, use it as base """ path = self.base.join(workdir) source_path = getattr(source, 'path', None) wd = self.backend.Workdir(path, create=True, source=source_path) return WdWrap(wd)
[docs] def make_repo(self, name): """ :param name: name of the repository to create create a repository using the given name """ return self.backend.Repository(path=self.base.join(name), create=True)