forked from panoramicdata/PanoramicData.OData.Client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRun-Coverage.ps1
More file actions
130 lines (104 loc) · 3.87 KB
/
Run-Coverage.ps1
File metadata and controls
130 lines (104 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<#
.SYNOPSIS
Runs tests with code coverage and generates a report.
.DESCRIPTION
This script runs all unit tests with code coverage enabled,
generates a coverage report, and optionally opens the HTML report.
.PARAMETER OpenReport
Opens the HTML coverage report in the default browser after generation.
.PARAMETER Filter
Filter expression for running specific tests (e.g., "FullyQualifiedName~UnitTests")
.EXAMPLE
.\Run-Coverage.ps1
.EXAMPLE
.\Run-Coverage.ps1 -OpenReport
.EXAMPLE
.\Run-Coverage.ps1 -Filter "FullyQualifiedName~QueryBuilder"
#>
param(
[switch]$OpenReport,
[string]$Filter
)
$ErrorActionPreference = 'Stop'
$solutionRoot = $PSScriptRoot
$testProject = Join-Path $solutionRoot "PanoramicData.OData.Client.Test\PanoramicData.OData.Client.Test.csproj"
$coverageDir = Join-Path $solutionRoot "coverage"
$reportDir = Join-Path $coverageDir "report"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " Code Coverage Runner" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
# Clean previous coverage results
if (Test-Path $coverageDir) {
Write-Host "`n>> Cleaning previous coverage results..." -ForegroundColor Yellow
Remove-Item $coverageDir -Recurse -Force
}
New-Item -ItemType Directory -Path $coverageDir -Force | Out-Null
# Build test command
$testArgs = @(
"test",
$testProject,
"--configuration", "Release",
"--collect:""XPlat Code Coverage""",
"--results-directory", $coverageDir,
"--settings", (Join-Path $solutionRoot "PanoramicData.OData.Client.Test\coverlet.runsettings.json"),
"-p:CollectCoverage=true",
"-p:CoverletOutputFormat=cobertura",
"-p:CoverletOutput=$coverageDir/"
)
if ($Filter) {
$testArgs += "--filter"
$testArgs += $Filter
}
# Run tests with coverage
Write-Host "`n>> Running tests with coverage..." -ForegroundColor Yellow
& dotnet @testArgs
if ($LASTEXITCODE -ne 0) {
Write-Host "Tests failed!" -ForegroundColor Red
exit 1
}
# Find the coverage file
$coverageFile = Get-ChildItem -Path $coverageDir -Filter "coverage.cobertura.xml" -Recurse | Select-Object -First 1
if (-not $coverageFile) {
# Try the default location from collect
$coverageFile = Get-ChildItem -Path $coverageDir -Filter "*.xml" -Recurse | Where-Object { $_.Name -like "*coverage*" } | Select-Object -First 1
}
if (-not $coverageFile) {
Write-Host "No coverage file found!" -ForegroundColor Red
exit 1
}
Write-Host "`n>> Coverage file: $($coverageFile.FullName)" -ForegroundColor Green
# Check if reportgenerator is installed
$reportGenerator = Get-Command reportgenerator -ErrorAction SilentlyContinue
if (-not $reportGenerator) {
Write-Host "`n>> Installing ReportGenerator..." -ForegroundColor Yellow
dotnet tool install --global dotnet-reportgenerator-globaltool
}
# Generate HTML report
Write-Host "`n>> Generating HTML report..." -ForegroundColor Yellow
reportgenerator `
-reports:$($coverageFile.FullName) `
-targetdir:$reportDir `
-reporttypes:"Html;Badges;MarkdownSummary" `
-title:"PanoramicData.OData.Client Coverage"
if ($LASTEXITCODE -ne 0) {
Write-Host "Report generation failed!" -ForegroundColor Red
exit 1
}
Write-Host "`n========================================" -ForegroundColor Green
Write-Host " Coverage report generated!" -ForegroundColor Green
Write-Host " Report: $reportDir\index.html" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
# Display summary
$summaryFile = Join-Path $reportDir "Summary.md"
if (Test-Path $summaryFile) {
Write-Host "`n>> Coverage Summary:" -ForegroundColor Cyan
Get-Content $summaryFile | Write-Host
}
# Open report if requested
if ($OpenReport) {
$indexFile = Join-Path $reportDir "index.html"
if (Test-Path $indexFile) {
Start-Process $indexFile
}
}
exit 0