# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[tox]
envlist=py27,py26,py27e2e,py26e2e,pywin,py27ssh,pylint_code,pylint_tests,docs
processes={env:PYTEST_PROCESSES:auto}
py26={env:PY26:python2.6}

[testenv]
whitelist_externals=
  rm
passenv=
  TRAVIS
  PYTHON
  PYTHON_VERSION
  PYTHON_ARCH
deps=
  --requirement
    requirements.txt
  --requirement
    tests/requirements.txt
basepython=
  py26: {[tox]py26}
  py27: python2.7
  py26e2e: {[tox]py26}
  py27e2e: python2.7
  py26ssh: {[tox]py26}
  py27ssh: python2.7
  pywin: {env:PYTHON:}\python.exe
  pylint_code: python2.7
  pylint_tests: python2.7
  docs: python2.7

[testenv:py27]
commands=
  pytest tests \
    --numprocesses={[tox]processes} \
    --ignore=tests/end2end \
    --ignore=tests/orchestrator/execution_plugin/test_ssh.py \
    --cov-report term-missing \
    --cov aria

[testenv:py26]
commands=
  pytest tests \
    --numprocesses={[tox]processes} \
    --ignore=tests/end2end \
    --ignore=tests/orchestrator/execution_plugin/test_ssh.py \
    --cov-report term-missing \
    --cov aria

[testenv:py27e2e]
commands=
  pytest tests/end2end \
    --numprocesses={[tox]processes} \
    --cov-report term-missing \
    --cov aria

[testenv:py26e2e]
commands=
  pytest tests/end2end \
    --numprocesses={[tox]processes} \
    --cov-report term-missing \
    --cov aria

[testenv:pywin]
commands=
  pytest tests \
    --numprocesses={[tox]processes} \
    --ignore=tests/end2end \
    --ignore=tests/orchestrator/execution_plugin/test_ssh.py \
    --cov-report term-missing \
    --cov aria

[testenv:py27ssh]
install_command=
  pip install {opts} {packages} .[ssh]
commands=
  pytest tests/orchestrator/execution_plugin/test_ssh.py \
    --numprocesses={[tox]processes}

[testenv:py26ssh]
install_command=
  pip install {opts} {packages} .[ssh]
commands=
  pytest tests/orchestrator/execution_plugin/test_ssh.py \
  --numprocesses={[tox]processes}

[testenv:pylint_code]
commands=
  pylint aria extensions/aria_extension_tosca/ \
    --rcfile=aria/.pylintrc \
    --disable=fixme,missing-docstring

[testenv:pylint_tests]
commands=
  pylint tests \
    --rcfile=tests/.pylintrc \
    --disable=fixme,missing-docstring

[testenv:docs]
install_command=
  pip install {opts} {packages} \
    --requirement docs/requirements.txt
commands=
  rm --recursive --force docs/html
  sphinx-build -W -T -b html docs docs/html
