Run-LocalCoverage.ps1 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # ------------------------------------------------------------
  2. # Run-LocalCoverage.ps1
  3. # Local-only: Unit + Parallel + Integration tests
  4. # Quiet, merged coverage in /Tests
  5. # ------------------------------------------------------------
  6. # 1. Define paths
  7. $testDir = Join-Path $PWD "Tests"
  8. $covDir = Join-Path $testDir "coverage"
  9. $reportDir = Join-Path $testDir "report"
  10. $resultsDir = Join-Path $testDir "TestResults"
  11. $mergedFile = Join-Path $covDir "coverage.merged.cobertura.xml"
  12. # 2. Clean old results - INCLUDING TestResults directory
  13. Write-Host "Cleaning old coverage files and test results..."
  14. Remove-Item -Recurse -Force $covDir, $reportDir, $resultsDir -ErrorAction SilentlyContinue
  15. New-Item -ItemType Directory -Path $covDir, $reportDir -Force | Out-Null
  16. dotnet build --configuration Debug --no-restore
  17. # ------------------------------------------------------------
  18. # 3. Run UNIT TESTS (non-parallel)
  19. # ------------------------------------------------------------
  20. Write-Host "`nRunning UnitTests (quiet)..."
  21. dotnet test Tests/UnitTests `
  22. --no-build `
  23. --verbosity minimal `
  24. --collect:"XPlat Code Coverage" `
  25. --settings Tests/UnitTests/runsettings.coverage.xml `
  26. --blame-hang-timeout 10s
  27. # ------------------------------------------------------------
  28. # 4. Run UNIT TESTS (parallel)
  29. # ------------------------------------------------------------
  30. Write-Host "`nRunning UnitTestsParallelizable (quiet)..."
  31. dotnet test Tests/UnitTestsParallelizable `
  32. --no-build `
  33. --verbosity minimal `
  34. --collect:"XPlat Code Coverage" `
  35. --settings Tests/UnitTestsParallelizable/runsettings.coverage.xml
  36. # ------------------------------------------------------------
  37. # 5. Run INTEGRATION TESTS
  38. # ------------------------------------------------------------
  39. Write-Host "`nRunning IntegrationTests (quiet)..."
  40. dotnet test Tests/IntegrationTests `
  41. --no-build `
  42. --verbosity minimal `
  43. --collect:"XPlat Code Coverage" `
  44. --settings Tests/IntegrationTests/runsettings.coverage.xml
  45. # ------------------------------------------------------------
  46. # 6. Find ALL coverage files (from all 3 projects) - NOW SCOPED TO Tests/TestResults
  47. # ------------------------------------------------------------
  48. Write-Host "`nCollecting coverage files..."
  49. $covFiles = Get-ChildItem -Path $resultsDir -Recurse -Filter coverage.cobertura.xml -File -ErrorAction SilentlyContinue
  50. if (-not $covFiles) {
  51. Write-Error "No coverage files found in $resultsDir. Did all tests run successfully?"
  52. exit 1
  53. }
  54. # ------------------------------------------------------------
  55. # 7. Move to Tests/coverage
  56. # ------------------------------------------------------------
  57. Write-Host "Moving $($covFiles.Count) coverage file(s) to $covDir..."
  58. $fileIndex = 1
  59. foreach ($f in $covFiles) {
  60. $destFile = Join-Path $covDir "coverage.$fileIndex.cobertura.xml"
  61. Copy-Item $f.FullName -Destination $destFile -Force
  62. $fileIndex++
  63. }
  64. # ------------------------------------------------------------
  65. # 8. Merge into one file
  66. # ------------------------------------------------------------
  67. Write-Host "Merging coverage from all test projects..."
  68. dotnet-coverage merge `
  69. -o $mergedFile `
  70. -f cobertura `
  71. "$covDir\*.cobertura.xml"
  72. # ------------------------------------------------------------
  73. # 9. Generate HTML + text report
  74. # ------------------------------------------------------------
  75. Write-Host "Generating final HTML report..."
  76. reportgenerator `
  77. -reports:$mergedFile `
  78. -targetdir:$reportDir `
  79. -reporttypes:"Html;TextSummary"
  80. # ------------------------------------------------------------
  81. # 10. Show summary + open report
  82. # ------------------------------------------------------------
  83. Write-Host "`n=== Final Coverage Summary (Unit + Integration) ==="
  84. Get-Content "$reportDir\Summary.txt"
  85. $indexHtml = Join-Path $reportDir "index.html"
  86. if (Test-Path $indexHtml) {
  87. Write-Host "Opening report in browser..."
  88. Start-Process $indexHtml
  89. } else {
  90. Write-Warning "HTML report not found at $indexHtml"
  91. }
  92. Write-Host "`nCoverage artifacts:"
  93. Write-Host " - Merged coverage: $mergedFile"
  94. Write-Host " - HTML report: $reportDir\index.html"
  95. Write-Host " - Test results: $resultsDir"