# Copyright 2019 ETSI OSM
#
# All Rights Reserved.
#
#    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 = py36,flakes
toxworkdir={toxinidir}/.tox

[testenv]
deps = -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
install_command = python3 -m pip install -U {opts} {packages}
commands=nosetests

[testenv:flakes]
basepython = python3
deps = flake8
       pyflakes
       -r{toxinidir}/requirements.txt
       -r{toxinidir}/test-requirements.txt
install_command = python3 -m pip install -U {opts} {packages}
commands =
    flake8 setup.py
    pyflakes osmclient

[testenv:build]
basepython = python
deps = stdeb
       setuptools-version-command
       -r{toxinidir}/requirements.txt
install_command = python2 -m pip install -U {opts} {packages}
commands = python2 setup.py --command-packages=stdeb.command bdist_deb

[testenv:build3]
basepython = python3
deps = stdeb
       setuptools-version-command
       -r{toxinidir}/requirements.txt
install_command = python3 -m pip install -U {opts} {packages}
commands = python3 setup.py --command-packages=stdeb.command bdist_deb

