# Path: venv_update.py
# DEFAULT_VIRTUALENV_PATH = 'venv'
# DEFAULT_OPTION_VALUES = {
#     'venv=': (DEFAULT_VIRTUALENV_PATH,),
#     'install=': ('-r', 'requirements.txt',),
#     'pip-command=': ('pip-faster', 'install', '--upgrade', '--prune'),
#     'bootstrap-deps=': ('venv-update==' + __version__,),
# }
# def parseargs(argv):
# def timid_relpath(arg):
# def shellescape(args):
# def colorize(cmd):
# def run(cmd):
# def info(msg):
# def check_output(cmd):
# def samefile(file1, file2):
# def exec_(argv):  # never returns
#     def __init__(self):
# def exec_scratch_virtualenv(args):
# def get_original_path(venv_path):  # TODO-TEST: a unit test
# def get_python_version(interpreter):
# def invalid_virtualenv_reason(venv_path, source_python, destination_python, virtualenv_system_site_packages):
# def ensure_virtualenv(args, return_values):
# def wait_for_all_subprocesses():
# def touch(filename, timestamp):
# def mark_venv_valid(venv_path):
# def mark_venv_invalid(venv_path):
# def dotpy(filename):
# def venv_executable(venv_path, executable):
# def venv_python(venv_path):
# def user_cache_dir():
# def venv_update(
#         venv=DEFAULT_OPTION_VALUES['venv='],
#         install=DEFAULT_OPTION_VALUES['install='],
#         pip_command=DEFAULT_OPTION_VALUES['pip-command='],
#         bootstrap_deps=DEFAULT_OPTION_VALUES['bootstrap-deps='],
# ):
# def execfile_(filename):
# def pip_faster(venv_path, pip_command, install, bootstrap_deps):
# def raise_on_failure(mainfunc, ignore_return=False):
# def main():
# class Scratch(object):
#     class return_values(object):


import fileinput
import pytest
from testing import enable_coverage
from testing import OtherPython
from testing import Path
from testing import pip_freeze
from testing import requirements
from testing import run
from testing import strip_pip_warnings
from testing import TOP
from testing import uncolor
from testing import venv_update
from testing import venv_update_symlink_pwd
from venv_update import __version__
    from sys import executable as python
    from sys import version
        from sys import executable as python
        out = uncolor(out)
        assert out.startswith('''\
> virtualenv --python={} venv
Removing invalidated virtualenv. (base executable python version changed'''.format(python))


@pytest.mark.usefixtures('pypi_server')
def it_gives_the_same_python_version_as_we_started_with(tmpdir):
    other_python = OtherPython()
    with tmpdir.as_cwd():
        requirements('')

        # first simulate some unrelated use of venv-update
        # this guards against statefulness in the venv-update scratch dir
        venv_update('venv=', 'unrelated_venv', 'pip-command=', 'true')

        run('virtualenv', '--python', other_python.interpreter, 'venv')
        initial_version = assert_python_version(other_python.version_prefix)

        venv_update_symlink_pwd()
        out, err = run('./venv/bin/python', 'venv_update.py')

        err = strip_pip_warnings(err)
        assert err == ''
        out = uncolor(out)
        assert out.startswith('''\
> virtualenv venv
Keeping valid virtualenv from previous run.
> rm -rf venv/local
> pip install venv-update=={}

# Path: venv_update.py
# DEFAULT_VIRTUALENV_PATH = 'venv'
# DEFAULT_OPTION_VALUES = {
#     'venv=': (DEFAULT_VIRTUALENV_PATH,),
#     'install=': ('-r', 'requirements.txt',),
#     'pip-command=': ('pip-faster', 'install', '--upgrade', '--prune'),
#     'bootstrap-deps=': ('venv-update==' + __version__,),
# }
# def parseargs(argv):
# def timid_relpath(arg):
# def shellescape(args):
# def colorize(cmd):
# def run(cmd):
# def info(msg):
# def check_output(cmd):
# def samefile(file1, file2):
# def exec_(argv):  # never returns
#     def __init__(self):
# def exec_scratch_virtualenv(args):
# def get_original_path(venv_path):  # TODO-TEST: a unit test
# def get_python_version(interpreter):
# def invalid_virtualenv_reason(venv_path, source_python, destination_python, virtualenv_system_site_packages):
# def ensure_virtualenv(args, return_values):
# def wait_for_all_subprocesses():
# def touch(filename, timestamp):
# def mark_venv_valid(venv_path):
# def mark_venv_invalid(venv_path):
# def dotpy(filename):
# def venv_executable(venv_path, executable):
# def venv_python(venv_path):
# def user_cache_dir():
# def venv_update(
#         venv=DEFAULT_OPTION_VALUES['venv='],
#         install=DEFAULT_OPTION_VALUES['install='],
#         pip_command=DEFAULT_OPTION_VALUES['pip-command='],
#         bootstrap_deps=DEFAULT_OPTION_VALUES['bootstrap-deps='],
# ):
# def execfile_(filename):
# def pip_faster(venv_path, pip_command, install, bootstrap_deps):
# def raise_on_failure(mainfunc, ignore_return=False):
# def main():
# class Scratch(object):
#     class return_values(object):


# Path: tests/functional/validation.py
import fileinput
import pytest
from testing import enable_coverage
from testing import OtherPython
from testing import Path
from testing import pip_freeze
from testing import requirements
from testing import run
from testing import strip_pip_warnings
from testing import TOP
from testing import uncolor
from testing import venv_update
from testing import venv_update_symlink_pwd
from venv_update import __version__
    from sys import executable as python
    from sys import version
        from sys import executable as python

        out = uncolor(out)
        assert out.startswith('''\
> virtualenv --python={} venv
Removing invalidated virtualenv. (base executable python version changed'''.format(python))


@pytest.mark.usefixtures('pypi_server')
def it_gives_the_same_python_version_as_we_started_with(tmpdir):
    other_python = OtherPython()
    with tmpdir.as_cwd():
        requirements('')

        # first simulate some unrelated use of venv-update
        # this guards against statefulness in the venv-update scratch dir
        venv_update('venv=', 'unrelated_venv', 'pip-command=', 'true')

        run('virtualenv', '--python', other_python.interpreter, 'venv')
        initial_version = assert_python_version(other_python.version_prefix)

        venv_update_symlink_pwd()
        out, err = run('./venv/bin/python', 'venv_update.py')

        err = strip_pip_warnings(err)
        assert err == ''
        out = uncolor(out)
        assert out.startswith('''\
> virtualenv venv
Keeping valid virtualenv from previous run.
> rm -rf venv/local
> pip install venv-update=={}

'''.format(__version__))