[tox]
envlist = py26,py27,py33,py34,py35,pypy,gae,cover

[testenv]
basedeps = mock>=1.3.0
           pycrypto>=2.6
           cryptography>=1.0
           pyopenssl>=0.14
           webtest
           nose
           flask
           unittest2
           sqlalchemy
           fasteners
deps = {[testenv]basedeps}
       django
       keyring
setenv =
    pypy: with_gmp=no
    DJANGO_SETTINGS_MODULE=tests.contrib.django_util.settings
commands = nosetests --ignore-files=test_appengine\.py --ignore-files=test__appengine_ndb\.py {posargs}

[coverbase]
basepython = python2.7
commands =
    nosetests \
      --with-coverage \
      --cover-package=oauth2client \
      --cover-package=tests \
      --cover-erase \
      --cover-tests \
      --cover-branches \
      --ignore-files=test_appengine\.py \
      --ignore-files=test__appengine_ndb\.py
    nosetests \
      --with-coverage \
      --cover-package=oauth2client.contrib.appengine \
      --cover-package=oauth2client.contrib._appengine_ndb \
      --cover-package=tests.contrib.test_appengine \
      --cover-package=tests.contrib.test__appengine_ndb \
      --with-gae \
      --cover-tests \
      --cover-branches \
      --gae-application=tests/data \
      --gae-lib-root={env:GAE_PYTHONPATH:google_appengine} \
      --logging-level=INFO \
      tests/contrib/test_appengine.py \
      tests/contrib/test__appengine_ndb.py
deps = {[testenv]deps}
    coverage
    nosegae

[testenv:py26]
basepython =
    python2.6
commands =
    nosetests \
      --ignore-files=test_appengine\.py \
      --ignore-files=test__appengine_ndb\.py \
      --ignore-files=test_keyring_storage\.py \
      --exclude-dir=oauth2client/contrib/django_util \
      --exclude-dir=tests/contrib/django_util \
      {posargs}
deps = {[testenv]basedeps}
       nose-exclude

[testenv:py33]
basepython =
    python3.3
commands =
    nosetests \
      --ignore-files=test_appengine\.py \
      --ignore-files=test__appengine_ndb\.py \
      --ignore-files=test_django_orm\.py \
      --ignore-files=test_django_settings\.py \
      --ignore-files=test_django_util\.py \
      --exclude-dir=oauth2client/contrib/django_util \
      --exclude-dir=tests/contrib/django_util \
      {posargs}
deps = {[testenv]basedeps}
       keyring
       nose-exclude

[testenv:cover]
basepython = {[coverbase]basepython}
commands =
    {[coverbase]commands}
    coverage report --show-missing --cover-min-percentage=100
deps =
    {[coverbase]deps}

[testenv:coveralls]
basepython = {[coverbase]basepython}
commands =
    {[coverbase]commands}
    coverage report --show-missing
    coveralls
deps =
    {[coverbase]deps}
    coveralls
passenv = {[testenv:system-tests]passenv}

[testenv:docs]
basepython = python2.7
deps =
    {[testenv:cover]deps}
    python-gflags
    pyyaml
    sphinx>=1.3b2
    sphinx-rtd-theme
    webapp2
commands = {toxinidir}/scripts/build_docs.sh

[testenv:gae]
basepython = python2.7
deps = {[testenv]basedeps}
       nosegae
commands =
    nosetests \
      --with-gae \
      --gae-lib-root={env:GAE_PYTHONPATH:google_appengine} \
      --gae-application=tests/data \
      --logging-level=INFO \
      tests/contrib/test_appengine.py \
      tests/contrib/test__appengine_ndb.py

[testenv:system-tests]
basepython =
    python2.7
commands =
    {toxinidir}/scripts/run_system_tests.sh
deps =
    pycrypto>=2.6
    cryptography>=1.0
    pyopenssl>=0.14
passenv = GOOGLE_* OAUTH2CLIENT_* TRAVIS*

[testenv:system-tests3]
basepython =
    python3.4
commands =
    {toxinidir}/scripts/run_system_tests.sh
deps =
    pycrypto>=2.6
    cryptography>=1.0
    pyopenssl>=0.14
passenv = {[testenv:system-tests]passenv}

[testenv:gce-system-tests]
basepython =
    python2.7
commands =
    python {toxinidir}/scripts/run_gce_system_tests.py
deps =
    pycrypto>=2.6
    unittest2
passenv = {[testenv:system-tests]passenv}

[testenv:flake8]
commands = flake8 --import-order-style google {posargs}
deps =
    flake8-putty
    flake8-import-order

[flake8]
exclude = .tox,.git,./*.egg,build,
application-import-names = oauth2client
putty-ignore =
  # E402 module level import not at top of file
  # These files have needed configurations defined before import
  docs/conf.py : E402
  tests/contrib/test_appengine.py : E402
  # Additionally, ignore E100 (imports in wrong order) for Django configuration
  tests/contrib/test_django_orm.py : E402,I100
  # E501 line too long
  # Ignore lines over 80 chars that include "http:" or "https:"
  /http:/ : E501
  /https:/ : E501