#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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

[testenv]
deps=
    pytest
    coverage
    pytest-cov
setenv=
    PYTHONWARNINGS=all
passenv =
    HADOOP_HOME
    HIVE_HOME
    LENS_GIT_PATH

[pytest]
addopts=--ignore setup.py --doctest-modules
norecursedirs=.tox .git

[testenv:py27]
commands=
    py.test

[testenv:py35]
commands=
    py.test

[testenv:py27verbose]
basepython=python
commands=
    py.test --cov=. --cov-report term

[testenv:py35verbose]
basepython=python3.5
commands=
    py.test --cov=. --cov-report term