示例#1
0
def test_save_results(vcs):
    with vcs.temp_copy() as copy:
        with contextmanagers.chdir(copy.path):
            os.mkdir('dir')
            assert not os.system('touch a b c dir/a dir/b dir/c')
        save_results(vcs, 'signature1', copy.path, ['dir/***', 'a'])
    with contextmanagers.chdir(_get_results_directory(vcs, 'signature1')):
        assert os.path.exists('results/dir/a')
        assert os.path.exists('results/dir/b')
        assert os.path.exists('results/dir/c')
        assert os.path.exists('results/a')
        assert not os.path.exists('results/b')
        assert not os.path.exists('results/c')
        with open('patterns', 'r') as f:
            assert set(f.read().strip().split()) == set(['dir/***', 'a'])
示例#2
0
def test_save_results(vcs):
    with vcs.temp_copy() as copy:
        with contextmanagers.chdir(copy.path):
            os.mkdir('dir')
            assert not os.system('touch a b c dir/a dir/b dir/c')
        save_results(vcs, 'signature1', copy.path, ['dir/***', 'a'])
    with contextmanagers.chdir(_get_results_directory(vcs, 'signature1')):
        assert os.path.exists('results/dir/a')
        assert os.path.exists('results/dir/b')
        assert os.path.exists('results/dir/c')
        assert os.path.exists('results/a')
        assert not os.path.exists('results/b')
        assert not os.path.exists('results/c')
        with open('patterns', 'r') as f:
            assert set(f.read().strip().split()) == set(['dir/***', 'a'])
示例#3
0
def test_get_ignored_files(git, repo_path):
    with contextmanagers.chdir(repo_path):
        with open('.gitignore', 'w') as f:
            f.write('a\n')
        assert not os.system('mkdir a && touch a/1.txt a/2.txt')
        assert set(git.get_ignored_files()) == set(
            [os.path.join(repo_path, 'a/1.txt'), os.path.join(repo_path, 'a/2.txt')])
示例#4
0
def test_sync_results(vcs):
    results_dir = _get_results_directory(vcs, 'signature1')
    os.makedirs(results_dir)
    with contextmanagers.chdir(results_dir):
        with open('patterns', 'w') as f:
            f.write('\n'.join(['dir/***', 'a']))
        os.mkdir('results')
        with contextmanagers.chdir('results'):
            os.mkdir('dir')
            assert not os.system('touch a dir/a dir/b dir/c')
    with contextmanagers.chdir(vcs.path):
        assert not os.system('touch b c')
        with open('a', 'w') as f:
            f.write('testing')
    sync_results(vcs, 'signature1')
    with contextmanagers.chdir(vcs.path):
        assert os.path.exists('dir/a')
        assert os.path.exists('dir/b')
        assert os.path.exists('dir/c')
        assert os.path.exists('a')
        assert os.path.exists('b')
        assert os.path.exists('c')
        with open('a', 'r') as f:
            assert f.read() == ''
示例#5
0
def test_sync_results(vcs):
    results_dir = _get_results_directory(vcs, 'signature1')
    os.makedirs(results_dir)
    with contextmanagers.chdir(results_dir):
        with open('patterns', 'w') as f:
            f.write('\n'.join(['dir/***', 'a']))
        os.mkdir('results')
        with contextmanagers.chdir('results'):
            os.mkdir('dir')
            assert not os.system('touch a dir/a dir/b dir/c')
    with contextmanagers.chdir(vcs.path):
        assert not os.system('touch b c')
        with open('a', 'w') as f:
            f.write('testing')
    sync_results(vcs, 'signature1')
    with contextmanagers.chdir(vcs.path):
        assert os.path.exists('dir/a')
        assert os.path.exists('dir/b')
        assert os.path.exists('dir/c')
        assert os.path.exists('a')
        assert os.path.exists('b')
        assert os.path.exists('c')
        with open('a', 'r') as f:
            assert f.read() == ''
示例#6
0
文件: test.py 项目: naphatkrit/easyci
def test(ctx, staged_only, head_only):
    """Run tests. If a passing test run is found in the tests run history,
    then this does not run any tests.
    """
    git = ctx.obj['vcs']

    click.echo('Making a temporary copy of your project...', nl=False)
    with git.temp_copy() as copy:
        click.echo('Done.')
        if head_only:
            click.echo('Resetting to HEAD...', nl=False)
            copy.clear('HEAD')
            click.echo('Done.')
        elif staged_only:
            click.echo('Resetting to staged files...', nl=False)
            copy.remove_unstaged_files()
            click.echo('Done.')

        click.echo('Loading config file...', nl=False)
        try:
            config = load_user_config(copy)
            click.echo('Done.')
        except ConfigFormatError:
            click.echo("Invalid config")
            ctx.abort()
        except ConfigNotFoundError:
            click.echo("No config file")
            config = _default_config

        click.echo('Checking if tests were already run...', nl=False)
        new_signature = copy.get_signature()

        with locking.lock(git, locking.Lock.tests_history):
            in_committed = new_signature in get_committed_signatures(git)
            in_staged = new_signature in get_staged_signatures(git)
            if not in_committed and not in_staged:
                stage_signature(git, new_signature)
            if in_committed:
                click.echo('')
                click.echo(click.style('OK', bg='green', fg='black') +
                           ' Tests already ran.')
                try:
                    click.echo('Syncing test results...', nl=False)
                    sync_results(git, new_signature)
                    click.echo('Done')
                except ResultsNotFoundError:
                    click.echo('No results to sync.')
                ctx.exit(exit_codes.SUCCESS)
            if in_staged:
                click.echo('')
                click.echo(click.style('In Progress', bg='yellow', fg='black') +
                           ' Tests already running.')
                ctx.exit(exit_codes.ALREADY_RUNNING)
        click.echo('Done.')
        with contextmanagers.chdir(copy.path):
            all_passed = True
            for test in config['tests']:
                click.echo('Running test: {}'.format(test))

                # ok to use shell=True, as the whole point of EasyCI is to run
                # arbitrary code
                ret = subprocess.call(test, shell=True)
                if ret == 0:
                    click.secho('Passed', bg='green', fg='black')
                else:
                    click.secho('Failed', bg='red', fg='black')
                    all_passed = False

        with locking.lock(git, locking.Lock.tests_history):
            # collect results
            if len(config['collect_results']) > 0:
                click.echo('Collecting results...', nl=False)
                save_results(git, new_signature, copy.path,
                             config['collect_results'])
                click.echo('Done')
                click.echo('Syncing test results...', nl=False)
                sync_results(git, new_signature)
                click.echo('Done')

            # save signature
            if not all_passed:
                unstage_signature(git, new_signature)
                ctx.exit(exit_codes.FAILURE)
            else:
                commit_signature(git, config, new_signature)
                ctx.exit(exit_codes.SUCCESS)
示例#7
0
def temp_path():
    with contextmanagers.temp_dir() as temp:
        with contextmanagers.chdir(temp):
            yield temp
示例#8
0
def test_chdir(temp_dir):
    current = os.getcwd()
    with contextmanagers.chdir(temp_dir):
        assert os.path.realpath(os.getcwd()) == os.path.realpath(temp_dir)
    assert os.getcwd() == current
示例#9
0
def temp_path():
    with contextmanagers.temp_dir() as temp:
        with contextmanagers.chdir(temp):
            yield temp
示例#10
0
def test_path_is_ignored(git, repo_path):
    with contextmanagers.chdir(repo_path):
        with open('.gitignore', 'w') as f:
            f.write('a\n')
        assert git.path_is_ignored('a')
        assert not git.path_is_ignored('b')