test: remove exact duplicate coverage

This commit is contained in:
Erik 2026-08-18 12:36:41 +02:00
parent 9c6b143a03
commit 5fa9933636
7 changed files with 133 additions and 32 deletions

View file

@ -224,6 +224,24 @@ function Get-WaitSites {
return @($sites)
}
function Get-BodyFingerprint {
param([Parameter(Mandatory)]$Method)
$bodyNode = if ($null -ne $Method.Body) {
$Method.Body
} else {
$Method.ExpressionBody
}
if ($null -eq $bodyNode) {
return $null
}
$bodyText = $bodyNode.ToString().Replace("`r`n", "`n")
$bytes = [Text.Encoding]::UTF8.GetBytes($bodyText)
return [Convert]::ToHexString(
[Security.Cryptography.SHA256]::HashData($bytes))
}
function Test-RecursiveSignal {
param(
[Parameter(Mandatory)][string]$MethodKey,
@ -386,6 +404,16 @@ foreach ($relativePath in $trackedFiles) {
}
}
$inlineDataRows = @($methodAttributes | Where-Object {
(Get-ShortAttributeName $_) -eq 'InlineData'
} | ForEach-Object {
if ($null -eq $_.ArgumentList) { '()' } else { $_.ArgumentList.ToString() }
})
$duplicateInlineDataRows = @($inlineDataRows |
Group-Object -CaseSensitive |
Where-Object { $_.Count -gt 1 } |
ForEach-Object { $_.Name })
$bodyText = $method.ToString()
$waitSites = @(Get-WaitSites $tree $method)
$environmentVariables = @([regex]::Matches(
@ -402,6 +430,9 @@ foreach ($relativePath in $trackedFiles) {
Attributes = $testAttributes
Traits = @($traits)
StaticSkip = $staticSkip
BodyFingerprint = Get-BodyFingerprint $method
InlineDataRows = $inlineDataRows
DuplicateInlineDataRows = $duplicateInlineDataRows
EmptyReturns = @($emptyReturns)
HelperPrerequisiteReturns = @($helperPrerequisiteReturns)
PrerequisiteReturnCandidate = @($emptyReturns | Where-Object {
@ -430,6 +461,54 @@ foreach ($relativePath in $trackedFiles) {
}
$orderedRecords = @($records | Sort-Object Path, Line, Method)
$duplicateBodyGroups = @($orderedRecords |
Where-Object { $null -ne $_.BodyFingerprint } |
Group-Object { $_.BodyFingerprint } |
Where-Object { $_.Count -gt 1 } |
ForEach-Object {
[ordered]@{
Fingerprint = $_.Name
Count = $_.Count
Tests = @($_.Group | ForEach-Object {
[ordered]@{
Path = $_.Path
Line = $_.Line
Class = $_.Class
Method = $_.Method
}
})
}
})
$duplicateDataRowsAcrossEquivalentBodies = [Collections.Generic.List[object]]::new()
foreach ($bodyGroup in $duplicateBodyGroups) {
$occurrences = @($bodyGroup.Tests | ForEach-Object {
$test = $_
$record = $orderedRecords | Where-Object {
$_.Path -eq $test.Path -and
$_.Line -eq $test.Line -and
$_.Class -eq $test.Class -and
$_.Method -eq $test.Method
} | Select-Object -First 1
foreach ($row in @($record.InlineDataRows)) {
[ordered]@{
Row = $row
Path = $test.Path
Line = $test.Line
Class = $test.Class
Method = $test.Method
}
}
})
foreach ($rowGroup in @($occurrences |
Group-Object { $_.Row } -CaseSensitive |
Where-Object { $_.Count -gt 1 })) {
$duplicateDataRowsAcrossEquivalentBodies.Add([ordered]@{
BodyFingerprint = $bodyGroup.Fingerprint
Row = $rowGroup.Name
Occurrences = @($rowGroup.Group)
})
}
}
$workingTreeStatus = @(& git -C $repoRoot status --short --untracked-files=no)
$summary = [ordered]@{
GeneratedUtc = [DateTime]::UtcNow.ToString('O')
@ -441,6 +520,14 @@ $summary = [ordered]@{
ParsedCSharpFiles = $parsedFileCount
AttributedTestMethods = $orderedRecords.Count
StaticSkipMethods = @($orderedRecords | Where-Object { $null -ne $_.StaticSkip }).Count
DuplicateInlineDataMethods = @($orderedRecords | Where-Object {
$_.DuplicateInlineDataRows.Count -gt 0
}).Count
ExactBodyDuplicateGroups = $duplicateBodyGroups.Count
MethodsInExactBodyDuplicateGroups = @($duplicateBodyGroups |
ForEach-Object { $_.Tests }).Count
DuplicateDataRowsAcrossEquivalentBodies =
$duplicateDataRowsAcrossEquivalentBodies.Count
EmptyReturnMethods = @($orderedRecords | Where-Object { $_.EmptyReturns.Count -gt 0 }).Count
EmptyReturnSites = @($orderedRecords | ForEach-Object { $_.EmptyReturns }).Count
PrerequisiteReturnCandidates = @($orderedRecords | Where-Object {
@ -512,6 +599,9 @@ $summary = [ordered]@{
$report = [ordered]@{
Summary = $summary
ExactBodyDuplicateGroups = $duplicateBodyGroups
DuplicateDataRowsAcrossEquivalentBodies =
@($duplicateDataRowsAcrossEquivalentBodies)
Tests = $orderedRecords
}
$outputDirectory = Split-Path -Parent $resolvedOutput