# 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,pylint_code,pylint_tests

[testenv]
passenv =
    TRAVIS
    PYTHON
    PYTHON_VERSION
    PYTHON_ARCH
setenv =
    INSTALL_CTX=1
deps =
    -rrequirements.txt
    -rtests/requirements.txt
basepython =
  py26: python2.6
  py27: python2.7
  py26e2e: python2.6
  py27e2e: python2.7
  pywin: {env:PYTHON:}\python.exe
  pylint_code: python2.7
  pylint_tests: python2.7

[testenv:py27]
commands=pytest tests --ignore=tests/end2end --cov-report term-missing --cov aria

[testenv:py26]
commands=pytest tests --ignore=tests/end2end --cov-report term-missing --cov aria

[testenv:py27e2e]
commands=pytest tests/end2end --cov-report term-missing --cov aria

[testenv:py26e2e]
commands=pytest tests/end2end --cov-report term-missing --cov aria

[testenv:pywin]
commands=pytest tests --ignore=tests/end2end --cov-report term-missing --cov aria

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

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