trigger:
- master
- features

variables:
  PYTEST_ADDOPTS: "--junitxml=build/test-results/$(tox.env).xml -vv"
  python.needs_vc: False
  COVERAGE_FILE: "$(Build.Repository.LocalPath)/.coverage"
  COVERAGE_PROCESS_START: "$(Build.Repository.LocalPath)/.coveragerc"
  PYTEST_COVERAGE: '0'

jobs:

- job: 'Test'
  pool:
    vmImage: "vs2017-win2016"
  strategy:
    matrix:
      py27:
        python.version: '2.7'
        tox.env: 'py27'
      py27-nobyte-lsof-numpy:
        python.version: '2.7'
        tox.env: 'py27-lsof-nobyte-numpy'
        # Coverage for:
        # - test_supports_breakpoint_module_global
        # - test_terminal_reporter_writer_attr (without xdist)
        # - "if write" branch in _pytest.assertion.rewrite
        # - numpy
        # - pytester's LsofFdLeakChecker (being skipped)
        PYTEST_COVERAGE: '1'
      py27-twisted:
        python.version: '2.7'
        tox.env: 'py27-twisted'
        python.needs_vc: True
      py27-pluggymaster-xdist:
        python.version: '2.7'
        tox.env: 'py27-pluggymaster-xdist'
        # Coverage for:
        # - except-IOError in _attempt_to_close_capture_file for py2.
        #   Also seen with py27-nobyte (using xdist), and py27-xdist.
        #   But no exception with py27-pexpect,py27-twisted,py27-numpy.
        PYTEST_COVERAGE: '1'
      # -- pypy2 and pypy3 are disabled for now: #5279 --
      # pypy:
      #   python.version: 'pypy2'
      #   tox.env: 'pypy'
      # pypy3:
      #   python.version: 'pypy3'
      #   tox.env: 'pypy3'
      py35-xdist:
        python.version: '3.5'
        tox.env: 'py35-xdist'
        # Coverage for:
        # - test_supports_breakpoint_module_global
        PYTEST_COVERAGE: '1'
      py36-xdist:
        python.version: '3.6'
        tox.env: 'py36-xdist'
      py37:
        python.version: '3.7'
        tox.env: 'py37'
        # Coverage for:
        # - _py36_windowsconsoleio_workaround (with py36+)
        # - test_request_garbage (no xdist)
        PYTEST_COVERAGE: '1'
      py37-linting/docs/doctesting:
        python.version: '3.7'
        tox.env: 'linting,docs,doctesting'
      py37-twisted/numpy:
        python.version: '3.7'
        tox.env: 'py37-twisted,py37-numpy'
      py37-pluggymaster-xdist:
        python.version: '3.7'
        tox.env: 'py37-pluggymaster-xdist'
    maxParallel: 10

  steps:
  - task: UsePythonVersion@0
    inputs:
      versionSpec: '$(python.version)'
      architecture: 'x64'

  - script: choco install vcpython27
    condition: eq(variables['python.needs_vc'], True)
    displayName: 'Install VC for py27'

  - script: python -m pip install tox
    displayName: 'Install tox'

  - script: |
      call scripts/setup-coverage-vars.bat || goto :eof
      python -m tox -e $(tox.env)
    displayName: 'Run tests'

  - task: PublishTestResults@2
    inputs:
      testResultsFiles: 'build/test-results/$(tox.env).xml'
      testRunTitle: '$(tox.env)'
    condition: succeededOrFailed()

  - script: call scripts\upload-coverage.bat
    displayName: 'Report and upload coverage'
    condition: eq(variables['PYTEST_COVERAGE'], '1')
    env:
      CODECOV_TOKEN: $(CODECOV_TOKEN)
      PYTEST_CODECOV_NAME: $(tox.env)
