; Copyright 2019-2023 Open Networking Foundation (ONF) and the ONF Contributors
;
; 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,py35,py36,py37,py38,3.9,3.10.6
skip_missing_interpreters = true

[testenv]
deps =
  nose2

commands =
  nose2 -c tox.ini --verbose --junit-xml

[flake8]
max-line-length = 119

[unittest]
plugins=nose2.plugins.junitxml

[junit-xml]
path=nose2-results.xml

[coverage]
always-on = True
coverage =
  python
coverage-report =
  xml
  term
