parameters:
  - name: ImageNames
    type: object
    default:
      Linux: "ubuntu-latest"
      Windows: "windows-latest"
      macOS: "macos-latest"
  - name: TestProjects
    type: string
    default: "tests/**/*Tests.csproj"
  - name: DotNetSdkVersion
    type: string
    default: 3.1.100

jobs:
  - job: MainTest
    displayName: Main Test
    strategy:
      matrix:
        ${{ each imageName in parameters.ImageNames }}:
          ${{ imageName.key }}:
            ImageName: ${{ imageName.value }}
      maxParallel: 3
    pool:
      vmImage: "$(ImageName)"
    steps:
      - checkout: self
        clean: true
        submodules: true
        persistCredentials: false

      - task: UseDotNet@2
        displayName: "Update DotNet"
        inputs:
          packageType: sdk
          version: ${{ parameters.DotNetSdkVersion }}

      - task: DotNetCoreCLI@2
        displayName: Run .NET Core CLI tests
        inputs:
          command: "test"
          projects: ${{ parameters.TestProjects }}
          arguments: '--configuration Release --collect:"XPlat Code Coverage" --settings tests/coverletArgs.runsettings --verbosity minimal "-p:GenerateDocumentationFile=False"'
          publishTestResults: true
          testRunTitle: $(Agent.JobName)
          workingDirectory: "$(Build.SourcesDirectory)"

      - task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
        condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux')) # !! THIS is for V1 only V2 will/should support merging
        displayName: ReportGenerator (merge)
        inputs:
          reports: "$(Agent.TempDirectory)/**/coverage.cobertura.xml"
          targetdir: "$(Agent.TempDirectory)/merged/"
          reporttypes: "Cobertura"

      ## V2 is already in the repository but it does not work "wrong number of segments" YAML error.
      - task: PublishCodeCoverageResults@1
        condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux')) # !! THIS is for V1 only V2 will/should support merging
        displayName: Publish Code Coverage
        inputs:
          codeCoverageTool: "cobertura"
          #summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' # !!THIS IS FOR V2
          summaryFileLocation: "$(Agent.TempDirectory)/merged/**.xml"
          pathToSources: $(Build.SourcesDirectory)
          failIfCoverageEmpty: true
