From bf57fa16fc04507fa873017d62cea4080ed0c77e Mon Sep 17 00:00:00 2001 From: micbou Date: Sat, 24 Mar 2018 21:47:32 +0100 Subject: [PATCH] Add JEDI_TEST_ENVIRONMENT_EXECUTABLE for AppVeyor --- .travis.yml | 21 ++++++++----- appveyor.yml | 50 +++++++++++++++---------------- conftest.py | 18 ++++++----- test/test_api/test_environment.py | 19 ++++++++++-- tox.ini | 8 +++++ travis_install.sh | 31 ++++++++++++++----- 6 files changed, 97 insertions(+), 50 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5239b059..a3f9de81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,11 +8,11 @@ python: - 3.6 env: - - JEDI_TEST_ENVIRONMENT=/opt/python/2.7/bin/python - - JEDI_TEST_ENVIRONMENT=/opt/python/3.3/bin/python - - JEDI_TEST_ENVIRONMENT=/opt/python/3.4/bin/python - - JEDI_TEST_ENVIRONMENT=/opt/python/3.5/bin/python - - JEDI_TEST_ENVIRONMENT=/opt/python/3.6/bin/python + - JEDI_TEST_ENVIRONMENT=27 + - JEDI_TEST_ENVIRONMENT=33 + - JEDI_TEST_ENVIRONMENT=34 + - JEDI_TEST_ENVIRONMENT=35 + - JEDI_TEST_ENVIRONMENT=36 matrix: allow_failures: @@ -20,13 +20,13 @@ matrix: - env: TOXENV=sith - env: - TOXENV=cov - - JEDI_TEST_ENVIRONMENT=/opt/python/3.6/bin/python + - JEDI_TEST_ENVIRONMENT=36 - python: 3.7-dev include: - python: 3.6 env: - TOXENV=cov - - JEDI_TEST_ENVIRONMENT=/opt/python/3.6/bin/python + - JEDI_TEST_ENVIRONMENT=36 - python: 3.6 env: TOXENV=sith # For now ignore pypy, there are so many issues that we don't really need @@ -35,6 +35,13 @@ matrix: - python: "3.7-dev" before_install: - ./travis_install.sh + # Need to add the path to the Python versions in the end. This might add + # something twice, but it doesn't really matter, because they are appended. + - export PATH=$PATH:/opt/python/3.3/bin + - export PATH=$PATH:/opt/python/3.5/bin + # 3.6 was not installed manually, but already is on the system. However + # it's not on path (unless 3.6 is selected). + - export PATH=$PATH:/opt/python/3.6/bin install: - pip install --quiet tox-travis script: diff --git a/appveyor.yml b/appveyor.yml index 4d0a026e..788b00cc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,83 +2,83 @@ environment: matrix: - TOXENV: py27 PYTHON_PATH: C:\Python27 - JEDI_TEST_ENVIRONMENT: C:\Python27\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python27\python.exe - TOXENV: py27 PYTHON_PATH: C:\Python27 - JEDI_TEST_ENVIRONMENT: C:\Python33\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python33\python.exe - TOXENV: py27 PYTHON_PATH: C:\Python27 - JEDI_TEST_ENVIRONMENT: C:\Python34\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python34\python.exe - TOXENV: py27 PYTHON_PATH: C:\Python27 - JEDI_TEST_ENVIRONMENT: C:\Python35\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python35\python.exe - TOXENV: py27 PYTHON_PATH: C:\Python27 - JEDI_TEST_ENVIRONMENT: C:\Python36\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python36\python.exe - TOXENV: py33 PYTHON_PATH: C:\Python33 - JEDI_TEST_ENVIRONMENT: C:\Python27\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python27\python.exe - TOXENV: py33 PYTHON_PATH: C:\Python33 - JEDI_TEST_ENVIRONMENT: C:\Python33\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python33\python.exe - TOXENV: py33 PYTHON_PATH: C:\Python33 - JEDI_TEST_ENVIRONMENT: C:\Python34\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python34\python.exe - TOXENV: py33 PYTHON_PATH: C:\Python33 - JEDI_TEST_ENVIRONMENT: C:\Python35\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python35\python.exe - TOXENV: py33 PYTHON_PATH: C:\Python33 - JEDI_TEST_ENVIRONMENT: C:\Python36\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python36\python.exe - TOXENV: py34 PYTHON_PATH: C:\Python34 - JEDI_TEST_ENVIRONMENT: C:\Python27\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python27\python.exe - TOXENV: py34 PYTHON_PATH: C:\Python34 - JEDI_TEST_ENVIRONMENT: C:\Python33\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python33\python.exe - TOXENV: py34 PYTHON_PATH: C:\Python34 - JEDI_TEST_ENVIRONMENT: C:\Python34\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python34\python.exe - TOXENV: py34 PYTHON_PATH: C:\Python34 - JEDI_TEST_ENVIRONMENT: C:\Python35\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python35\python.exe - TOXENV: py34 PYTHON_PATH: C:\Python34 - JEDI_TEST_ENVIRONMENT: C:\Python36\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python36\python.exe - TOXENV: py35 PYTHON_PATH: C:\Python35 - JEDI_TEST_ENVIRONMENT: C:\Python27\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python27\python.exe - TOXENV: py35 PYTHON_PATH: C:\Python35 - JEDI_TEST_ENVIRONMENT: C:\Python33\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python33\python.exe - TOXENV: py35 PYTHON_PATH: C:\Python35 - JEDI_TEST_ENVIRONMENT: C:\Python34\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python34\python.exe - TOXENV: py35 PYTHON_PATH: C:\Python35 - JEDI_TEST_ENVIRONMENT: C:\Python35\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python35\python.exe - TOXENV: py35 PYTHON_PATH: C:\Python35 - JEDI_TEST_ENVIRONMENT: C:\Python36\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python36\python.exe - TOXENV: py36 PYTHON_PATH: C:\Python36 - JEDI_TEST_ENVIRONMENT: C:\Python27\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python27\python.exe - TOXENV: py36 PYTHON_PATH: C:\Python36 - JEDI_TEST_ENVIRONMENT: C:\Python33\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python33\python.exe - TOXENV: py36 PYTHON_PATH: C:\Python36 - JEDI_TEST_ENVIRONMENT: C:\Python34\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python34\python.exe - TOXENV: py36 PYTHON_PATH: C:\Python36 - JEDI_TEST_ENVIRONMENT: C:\Python35\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python35\python.exe - TOXENV: py36 PYTHON_PATH: C:\Python36 - JEDI_TEST_ENVIRONMENT: C:\Python36\python.exe + JEDI_TEST_ENVIRONMENT_EXECUTABLE: C:\Python36\python.exe install: - set PATH=%PYTHON_PATH%;%PYTHON_PATH%\Scripts;%PATH% - pip install --disable-pip-version-check --user --upgrade pip diff --git a/conftest.py b/conftest.py index 8652b55d..c3ee3789 100644 --- a/conftest.py +++ b/conftest.py @@ -87,16 +87,18 @@ def clean_jedi_cache(request): @pytest.fixture(scope='session') def environment(request): - python = request.config.option.env - if python is None: - python = os.environ.get('JEDI_TEST_ENVIRONMENT', 'python') + python = os.environ.get('JEDI_TEST_ENVIRONMENT_EXECUTABLE') + if python: + return get_python_environment(python) - environment = get_python_environment(python) - version_info = environment.version_info - if int(str(version_info.major) + str(version_info.minor)) == py_version: - return get_default_environment() + version = request.config.option.env + if version is None: + version = os.environ.get('JEDI_TEST_ENVIRONMENT', str(py_version)) - return environment + if int(version) == py_version: + return get_default_environment() + + return get_python_environment('python%s.%s' % tuple(version)) @pytest.fixture(scope='session') diff --git a/test/test_api/test_environment.py b/test/test_api/test_environment.py index da9af13d..9f5eac86 100644 --- a/test/test_api/test_environment.py +++ b/test/test_api/test_environment.py @@ -24,10 +24,23 @@ def test_find_python_environments(): assert parser_version[:2] == env.version_info[:2] -def test_version(): - env = Environment('some path', sys.executable) +@pytest.mark.skipif("os.name == 'nt'") +@pytest.mark.parametrize( + 'version', + ['2.7', '3.3', '3.4', '3.5', '3.6', '3.7'] +) +def test_versions(version): + executable = 'python' + version + try: + env = Environment('some path', executable) + except InvalidPythonEnvironment: + if int(version.replace('.', '')) == py_version: + # At least the current version has to work + raise + return + sys_path = env.get_sys_path() - assert any(sys.prefix in p for p in sys_path) + assert any(executable in p for p in sys_path) def test_load_module(evaluator): diff --git a/tox.ini b/tox.ini index ae69e87b..bda6963b 100644 --- a/tox.ini +++ b/tox.ini @@ -14,6 +14,14 @@ setenv = # https://github.com/tomchristie/django-rest-framework/issues/1957 # tox corrupts __pycache__, solution from here: PYTHONDONTWRITEBYTECODE=1 +# To test Jedi in different versions than the same Python version, set a +# different test environment. + env27: JEDI_TEST_ENVIRONMENT=27 + env33: JEDI_TEST_ENVIRONMENT=33 + env34: JEDI_TEST_ENVIRONMENT=34 + env35: JEDI_TEST_ENVIRONMENT=35 + env36: JEDI_TEST_ENVIRONMENT=36 + env37: JEDI_TEST_ENVIRONMENT=37 commands = py.test {posargs:jedi test} [testenv:py27] diff --git a/travis_install.sh b/travis_install.sh index 46812c0e..4dbdcdf5 100755 --- a/travis_install.sh +++ b/travis_install.sh @@ -1,13 +1,30 @@ #! /usr/bin/env bash set -e -# Check if the desired Python version already exists. -$JEDI_TEST_ENVIRONMENT --version && exit 0 || true +if [[ $JEDI_TEST_ENVIRONMENT == "33" ]]; then + VERSION=3.3 + DOWNLOAD=1 +fi +if [[ $JEDI_TEST_ENVIRONMENT == "35" ]]; then + VERSION=3.5 + DOWNLOAD=1 +fi -# Otherwise download and install. -VERSION=`expr "$JEDI_TEST_ENVIRONMENT" : '.*\([0-9]\.[0-9]\)'` -DOWNLOAD_NAME=python-$VERSION -wget https://s3.amazonaws.com/travis-python-archives/binaries/ubuntu/14.04/x86_64/$DOWNLOAD_NAME.tar.bz2 -sudo tar xjf $DOWNLOAD_NAME.tar.bz2 --directory / +if [[ -z $VERSION ]]; then + echo "Environments should already be installed" + exit 0 +fi + +PYTHON=python-$VERSION + +# Check if the desired Python version already exists. +$PYTHON --version && exit 0 || true + +if [[ $DOWNLOAD == 1 ]]; then + # Otherwise download and install. + DOWNLOAD_NAME=python-$VERSION + wget https://s3.amazonaws.com/travis-python-archives/binaries/ubuntu/14.04/x86_64/$DOWNLOAD_NAME.tar.bz2 + sudo tar xjf $DOWNLOAD_NAME.tar.bz2 --directory / +fi echo "Successfully installed environment."