# 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=core,e2e,windows,ssh,pylint_core,pylint_tests,docs
processes={env:PYTEST_PROCESSES:auto}

[testenv]
whitelist_externals=
  rm
passenv=
  TRAVIS
  PYTHON
  PYTHON_VERSION
  PYTHON_ARCH
deps=
  --requirement
    requirements.txt
  --requirement
    tests/requirements.txt
basepython=
  core: python2.7
  e2e: python2.7
  ssh: python2.7
  windows: {env:PYTHON:}\python.exe
  pylint_core: python2.7
  pylint_tests: python2.7
  docs: python2.7

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

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

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

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

[testenv:pylint_core]
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
