;
;    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]
# new environments will be excluded by default unless explicitly added to envlist.
envlist = py27,py35,py36,py37,py27-{gcp,cython,lint,lint3},py35-{gcp,cython,lint},py36-{gcp,cython},py37-{gcp,cython},docs
toxworkdir = {toxinidir}/target/{env:ENV_NAME:.tox}

[pycodestyle]
# Disable all errors and warnings except for the ones related to blank lines.
# pylint does not check the number of blank lines.
select = E3

# Shared environment options.
[testenv]
# Set [] options for pip installation of apache-beam tarball.
extras = test
# Don't warn that these commands aren't installed.
whitelist_externals =
  find
  time
deps =
  cython: cython==0.28.1
  future==0.16.0

# These 2 magic command overrides are required for Jenkins builds.
# Otherwise we get "OSError: [Errno 2] No such file or directory" errors.
# Source:
# https://github.com/tox-dev/tox/issues/123#issuecomment-284714629
install_command = {envbindir}/python {envbindir}/pip install --retries 10 {opts} {packages}
list_dependencies_command = {envbindir}/python {envbindir}/pip freeze
commands_pre =
  python --version
  pip --version
  pip check
  {toxinidir}/scripts/run_tox_cleanup.sh
commands_post =
  {toxinidir}/scripts/run_tox_cleanup.sh

[testenv:py27]
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests --ignore-files '.*py3.py$' {posargs}

[testenv:py35]
setenv =
  RUN_SKIPPED_PY3_TESTS=0
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests {posargs}

[testenv:py36]
setenv =
  RUN_SKIPPED_PY3_TESTS=0
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests {posargs}

[testenv:py37]
setenv =
  RUN_SKIPPED_PY3_TESTS=0
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests {posargs}

[testenv:py27-cython]
# cython tests are only expected to work in linux (2.x and 3.x)
# If we want to add other platforms in the future, it should be:
# `platform = linux2|darwin|...`
# See https://docs.python.org/2/library/sys.html#sys.platform for platform codes
platform = linux2
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests --ignore-files '.*py3.py$' {posargs}

[testenv:py35-cython]
# cython tests are only expected to work in linux (2.x and 3.x)
# If we want to add other platforms in the future, it should be:
# `platform = linux2|darwin|...`
# See https://docs.python.org/2/library/sys.html#sys.platform for platform codes
platform = linux
setenv =
  RUN_SKIPPED_PY3_TESTS=0
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests {posargs}

[testenv:py36-cython]
# cython tests are only expected to work in linux (2.x and 3.x)
# If we want to add other platforms in the future, it should be:
# `platform = linux2|darwin|...`
# See https://docs.python.org/2/library/sys.html#sys.platform for platform codes
platform = linux
setenv =
  RUN_SKIPPED_PY3_TESTS=0
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests {posargs}

[testenv:py37-cython]
# cython tests are only expected to work in linux (2.x and 3.x)
# If we want to add other platforms in the future, it should be:
# `platform = linux2|darwin|...`
# See https://docs.python.org/2/library/sys.html#sys.platform for platform codes
platform = linux
setenv =
  RUN_SKIPPED_PY3_TESTS=0
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests {posargs}

[testenv:py27-gcp]
extras = test,gcp
commands =
  python apache_beam/examples/complete/autocomplete_test.py
  python setup.py nosetests --ignore-files '.*py3.py$' {posargs}
  # Old and new Datastore client unit tests cannot be run in the same process
  # due to conflicting protobuf modules.
  # TODO(BEAM-4543): Remove these separate nosetests invocations once the
  # googledatastore dependency is removed.
  python setup.py nosetests {posargs} --tests apache_beam.io.gcp.datastore.v1
  python setup.py nosetests {posargs} --tests apache_beam.io.gcp.datastore.v1new

[testenv:py35-gcp]
setenv =
  RUN_SKIPPED_PY3_TESTS=0
extras = test,gcp
commands =
  python setup.py nosetests {posargs}

[testenv:py37-gcp]
setenv =
  RUN_SKIPPED_PY3_TESTS=0
extras = test,gcp
commands =
  python setup.py nosetests {posargs}

[testenv:py27-lint]
deps =
  pycodestyle==2.3.1
  pylint==1.9.3
  future==0.16.0
  isort==4.2.15
  flake8==3.5.0
commands =
  pylint --version
  time {toxinidir}/scripts/run_pylint.sh

[testenv:py27-lint3]
# Checks for py2/3 compatibility issues
deps =
  pycodestyle==2.3.1
  pylint==1.9.3
  future==0.16.0
  isort==4.2.15
  flake8==3.5.0
commands =
  pylint --version
  time {toxinidir}/scripts/run_pylint_2to3.sh


[testenv:py35-lint]
deps =
  pycodestyle==2.3.1
  pylint==2.1.1
  future==0.16.0
  isort==4.2.15
  flake8==3.5.0
commands =
  pylint --version
  time {toxinidir}/scripts/run_mini_py3lint.sh

[testenv:docs]
extras = test,gcp,docs
deps =
  Sphinx==1.6.5
  sphinx_rtd_theme==0.2.4
commands =
  time {toxinidir}/scripts/generate_pydoc.sh

[testenv:cover]
# This is not included in envlist which is defined in [tox].
deps =
  coverage==4.4.1
commands =
  # Clean up previously collected data.
  coverage erase
  coverage run setup.py test
  # Print coverage report to STDOUT
  coverage report --skip-covered
  # Generate report in xml format
  coverage xml
