# Copyright 2018 Telefonica S.A.
#
# 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 = cover, flake8, unittest, pytest

[testenv]
usedevelop = True
basepython = python3

[testenv:cover]
basepython = python3
deps =
  nose2
  nose2-cov
  coverage
  pytest
  pytest-asyncio
  pycrypto

commands =
  coverage erase
  nose2 -C --coverage osm_common --plugin nose2.plugins.junitxml -s osm_common/tests
  coverage report --omit='*tests*'
  coverage html -d ./cover --omit='*tests*'
  coverage xml -o coverage.xml --omit='*tests*'

[testenv:pytest]
basepython = python3
deps = pytest
       pytest-asyncio
       pycrypto
commands = pytest osm_common

[testenv:flake8]
basepython = python3
deps = flake8
commands =
    flake8 osm_common/ setup.py --max-line-length 120 --exclude .svn,CVS,.gz,.git,__pycache__,.tox,local,temp --ignore W291,W293,E226

[testenv:unittest]
basepython = python3
deps = pycrypto
       pytest
commands = python3 -m unittest discover osm_common.tests

[testenv:build]
basepython = python3
deps = stdeb
       setuptools-version-command
commands = python3 setup.py --command-packages=stdeb.command bdist_deb

