source | issues

Source code for tests.workdir.test_common

"""
    this is a series of functional tests
    each begins at a given state and runs a series of actions,
    asserting the workdir state between each
"""


# copyright 2008 by Ronny Pfannschmidt
# license lgpl2 or later
import py
from anyvc.exc import NotFoundError
from anyvc.metadata import get_wd_impl


has_files = py.test.mark.files({
        'test.py':'print "test"',
        })

commited = py.test.mark.commit

@has_files
[docs]def test_workdir_add(wd): """ * add a unknown file * commit it """ wd.check_states(unknown=['test.py']) print wd.add(paths=['test.py']) wd.check_states(added=['test.py']) print wd.commit(paths=['test.py'], message='add test.py') wd.check_states(clean=['test.py'])
[docs]def test_subdir_state_add(wd): """ * add a file in a subdir """ wd.put_files({ 'subdir/test.py':'test', }) print wd.add(paths=['subdir/test.py']) wd.check_states(added=['subdir/test.py']) print wd.commit(message='add subdir/test.py') wd.check_states(clean=['subdir/test.py'])
@has_files @commited
[docs]def test_workdir_remove(wd): """ * remove a known file * commit the removal """ wd.check_states(clean=['test.py']) wd.remove(paths=['test.py']) wd.check_states(removed=['test.py']) wd.commit(message='*') py.test.raises(AssertionError,wd.check_states, clean=['test.py']) assert not wd.path.join('test.py').check()
@has_files @commited
[docs]def test_workdir_rename(wd): """ * rename a known file * check the add/remove pair * commit """ wd.rename(source='test.py', target='test2.py') wd.check_states( removed=['test.py'], added=['test2.py'], ) wd.commit(message='renamed') wd.check_states(clean=['test2.py'])
@has_files @commited
[docs]def test_workdir_revert(wd): """ * remove a known file (vcs command) * revert * change the content of a known file * revert """ wd.remove(paths=['test.py']) wd.check_states(removed=['test.py']) wd.revert(paths=['test.py']) wd.check_states(clean=['test.py']) wd.put_files({ 'test.py':'oooo' }) wd.check_states(modified=['test.py']) wd.revert(paths=['test.py']) wd.check_states(clean=['test.py'])
@has_files
[docs]def test_diff_all(wd): """ * change a known file * check the diff """ wd.add(paths=['test.py']) wd.commit(message='*') wd.put_files({ 'test.py':'ooo' }) diff = wd.diff() print diff assert 'ooo' in diff assert 'print "test"' in diff
@has_files @commited
[docs]def test_file_missing(wd): """ * delete a known file (just in the workdir) * check the missing state """ wd.delete_files('test.py') wd.check_states(missing=['test.py'])
@has_files @commited
[docs]def test_status_subdir_only(wd): """ * add a file in a subdir * commit * change the file in the subdir * check status for the subdir only returning items of that subdir """ wd.put_files({ 'subdir/a.py':'foo\n', }) wd.add(paths=['subdir/a.py']) wd.check_states(added=['subdir/a.py']) print wd.commit(message='add some subdir') wd.check_states(clean=['subdir/a.py']) wd.put_files({ 'subdir/a.py':'bar\nfoo\n', #XXX: different size needed for hg status }) stats = list(wd.status(paths=['subdir'])) assert any(s.relpath == 'subdir/a.py' for s in stats) wd.check_states(modified=['subdir/a.py'])
@has_files @commited
[docs]def test_workdir_open(wd, backend): """ check if anyvc.workdir.open works as expected """ import anyvc wd2 = anyvc.workdir.open(wd.path) assert backend.is_workdir(wd2.path)
@has_files @commited
[docs]def test_workdir_open_honors_ANYVC_IGNORED_WORKDIRS(monkeypatch, wd): """ check that :func:`anyvc.workdir.open` honors `ANYVC_IGNORED_WORKDIRS` """ import anyvc assert anyvc.workdir.open(wd.path) is not None monkeypatch.setenv('ANYVC_IGNORED_WORKDIRS', wd.path) assert anyvc.workdir.open(wd.path) is None
def test_disallowed_paths(monkeypatch): from anyvc._workdir import _disallowd_workdirs monkeypatch.setenv('ANYVC_IGNORED_WORKDIRS', '/a:/b') dirs = _disallowd_workdirs() assert '/a' in dirs assert '/b' in dirs monkeypatch.setenv('ANYVC_IGNORED_WORKDIRS', '~') dirs = _disallowd_workdirs() assert py.std.os.environ['HOME'] in dirs