Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Split TerminalTestReporter.Summary.cs into focused partial files by Evangelink · Pull Request #10387 · microsoft/testfx · GitHub
Skip to content

Split TerminalTestReporter.Summary.cs into focused partial files - #10387

Merged
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp
Aug 3, 2026
Merged

Split TerminalTestReporter.Summary.cs into focused partial files#10387
Amaury Levé (Evangelink) merged 1 commit into
mainfrom
dev/amauryleve/supreme-lamp

Conversation

@Evangelink

@EvangelinkAmaury Levé (Evangelink) commented Aug 2, 2026

Copy link
Copy Markdown
Member

Fixes#10367

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several unrelated concerns. This splits it along the existing logical boundaries, following the established TerminalTestReporter.<Concern>.cs convention.

FileContentsLines
TerminalTestReporter.Summary.cs(trimmed)AppendTestRunSummary, AppendRetrySummaryLines248
TerminalTestReporter.Coverage.cs(new)AppendCoverageSummary (internal + private), FormatThresholdPercentages, GetCoverage*Label helpers204
TerminalTestReporter.TestDiscovery.cs(new)TestDiscovered (both overloads), AppendTestDiscoverySummary134
TerminalTestReporter.FlakyTests.cs(new)AppendFlakyTests, AppendFlakyTestLine83
TerminalTestReporter.SlowestTests.cs(new)AppendSlowestTests, AppendSlowestTestLine79

Two deviations from the issue text, both deliberate:

  • Five files, not three. The issue required every file be under 350 lines, but its own 3-way split leaves the trimmed Summary.cs at ~394 lines. Breaking out the flaky and slowest sections is what actually satisfies the stated criterion, and SlowestTests.cs at 79 lines is in line with the existing ErroredAssemblies.cs at 75.
  • TestDiscovery.cs, not Discovery.cs, so it pairs with the existing TerminalTestReporter.TestCompletion.cs — the mirror concern.

AppendRetrySummaryLines stays in Summary.cs: it emits the flaky: / retried: counter lines inline between the skipped count and the duration, so it belongs with the rest of the counter block rather than with the separate "Flaky tests" listing.

Also adds a <remarks> map of the partials to the type doc on TerminalTestReporter.cs, following the precedent in TrxResultStreamingStore.cs. At 13 partials the type had no signpost for where anything lives.

Not a behavior change

No member body was modified. Verified mechanically rather than by eye: the 606 non-empty class-body lines of the original file and of the five files replacing it are an identical multiset with zero diffs, and a per-member brace-depth chunker matches all 17 members byte-for-byte. Two private helpers changed position relative to the whole file, each moving adjacent to its sole caller — AppendSlowestTestLine (previously sitting after AppendFlakyTestLine) and AppendRetrySummaryLines. The only other non-move change is narrowing each file's using set; note that the issue's guideline #5 ("no new using directives needed, all files share the same using set as today") is wrong — copying all three usings everywhere would trip IDE0005, which is warning in .editorconfig with EnforceCodeStyleInBuild=true.

Note for downstream: dotnet/sdk

This reporter source is hard-forked into dotnet/sdk, whose eng/vendored-files.json tracks each partial individually (I checked — it lists TerminalTestReporter.cs, .ErroredAssemblies.cs, .Formatting.cs, .Handshake.cs, .Lifecycle.cs, .Messaging.cs, .Summary.cs, .TestCompletion.cs … each with "scope": "reporter partial").

TerminalReporterContract.props globs *.cs, so nothing needed to change on our side. But the four new paths are absent from the SDK manifest, so until it is updated, edits to the coverage / discovery / flaky / slowest code would be invisible to the SDK's drift workflow. The shrinking of Summary.cs will fire that workflow, so it should get noticed — tracked in #10390 regardless.

Validation

  • Microsoft.Testing.Platform builds for net8.0 / net9.0 / netstandard2.0 — 0 warnings, which is what proves the using sets are exactly minimal.
  • Microsoft.Testing.Platform.UnitTests — passing on net8.0, net9.0, net462.
  • Microsoft.Testing.Platform.TerminalReporterContract.UnitTests — passing on net8.0 and net9.0, confirming the files still compile as a standalone shared-source consumer with no platform reference.

CopilotAI review requested due to automatic review settings August 2, 2026 23:09

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Splits the oversized terminal reporter summary into focused partial-class files without changing behavior.

Changes:

  • Separates coverage and discovery reporting.
  • Extracts flaky/retry and slowest-test rendering.
  • Keeps all files below 350 lines.
Show a summary per file
FileDescription
TerminalTestReporter.Summary.csRetains run-summary orchestration.
TerminalTestReporter.Coverage.csContains coverage summary rendering.
TerminalTestReporter.Discovery.csContains discovery tracking and summaries.
TerminalTestReporter.FlakyTests.csContains retry and flaky-test output.
TerminalTestReporter.SlowestTests.csContains slowest-test output.

Review details

  • Files reviewed: 5/5 changed files
  • Comments generated: 0
  • Review effort level: Balanced

@github-actionsgithub-actionsBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

🤖 Automated review by GitHub Copilot. Generated by the Expert Code Review workflow. To request a follow-up action, reply by tagging @copilot directly.

Expert Review Summary

Verdict: No issues found

This is a pure code-move refactoring — methods were relocated from TerminalTestReporter.Summary.cs into four new partial class files (Coverage, Discovery, FlakyTests, SlowestTests) with no behavioral changes.

DimensionResult
Threading & ConcurrencyLGTM — no new shared state or synchronization changes
Public API & Binary CompatibilityLGTM — all moved members are internal or private; no public API surface change
Performance & AllocationsLGTM — identical code paths
Cross-TFM CompatibilityLGTM — no new conditional compilation or TFM-specific code
Build InfrastructureLGTM — *.cs glob picks up new files automatically
Scope & PR DisciplineLGTM — clean separation along logical boundaries, verified line-identical
Localization & ResourcesLGTM — using sets correctly narrowed per file
Code StructureLGTM — follows established TerminalTestReporter.<x>.cs convention

All new files correctly declare [UnsupportedOSPlatform("browser")] internal sealed partial class TerminalTestReporter and include only the using directives they actually need. No issues identified across any applicable review dimension.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

Suppressed comments (1)

src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporter.cs:18

  • The file inventory no longer matches the PR description: the implementation uses TerminalTestReporter.TestDiscovery.cs (not Discovery.cs), and AppendRetrySummaryLines remains in Summary.cs, making the actual Summary/FlakyTests sizes 248/83 rather than the documented 222/109. Since the downstream vendoring note depends on exact paths, please update the PR table and split rationale to reflect the committed layout, or move/rename the files to match it.
/// <c>TestDiscovery</c> (per-test execution and discovery output), <c>Summary</c> (the post-run verdict and counts),
/// <c>FlakyTests</c> and <c>SlowestTests</c> (the optional summary sections), <c>Coverage</c> (code-coverage and
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

TerminalTestReporter.Summary.cs had grown to 715 lines and mixed several
unrelated concerns. Move each into its own partial file, following the
existing TerminalTestReporter.<Concern>.cs convention:
- TerminalTestReporter.Coverage.cs: AppendCoverageSummary (public and
private), FormatThresholdPercentages and the coverage label helpers.
- TerminalTestReporter.TestDiscovery.cs: both TestDiscovered overloads
and AppendTestDiscoverySummary. Named to pair with the existing
TerminalTestReporter.TestCompletion.cs, its mirror concern.
- TerminalTestReporter.FlakyTests.cs: AppendFlakyTests and
AppendFlakyTestLine, which render the optional "Flaky tests" section.
- TerminalTestReporter.SlowestTests.cs: AppendSlowestTests and
AppendSlowestTestLine.
TerminalTestReporter.Summary.cs keeps AppendTestRunSummary and
AppendRetrySummaryLines; the latter emits the "flaky:" / "retried:"
counter lines inline between the skipped count and the duration, so it
belongs with the rest of the counter block rather than with the separate
flaky-test listing. Every file is now well under 350 lines.
No member body was changed: the 606 non-empty class-body lines of the
original file and of the five files that replace it are identical. Two
private helpers did change position relative to the whole file, each
moving next to its sole caller: AppendSlowestTestLine (previously after
AppendFlakyTestLine) and AppendRetrySummaryLines. The other non-move
change is narrowing each file's using set to what it actually needs.
Also add a <remarks> map of the 13 partials to the type doc on
TerminalTestReporter.cs, following the precedent in
TrxResultStreamingStore.cs.
Fixes#10367
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d3b865a0-de90-4543-a493-9538aa8f1e2a
CopilotAI review requested due to automatic review settings August 2, 2026 23:42

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@Evangelink
Amaury Levé (Evangelink) merged commit acb5baf into mainAug 3, 2026
24 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the dev/amauryleve/supreme-lamp branch August 3, 2026 08:19
Amaury Levé (Evangelink) added a commit to Evangelink/sdk that referenced this pull request Aug 3, 2026
…s manifest
testfx split TerminalTestReporter.Summary.cs into focused partials
(microsoft/testfx#10387), adding four upstream paths that the
dotnet-test-terminal-reporter entry does not list. Until they are tracked,
edits to the coverage, discovery, flaky-test and slowest-test rendering are
invisible to the drift detector.
The new sources are appended rather than sorted into the list: the drift bot
keys issue identity on the positional source index, so inserting would orphan
the open issues for .Summary.cs (dotnet#7) and .TestCompletion.cs (dotnet#8) and file
duplicates at the shifted positions. Document that sources is append-only.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: b8858a93-4a8d-4028-b0db-c221ef158206
pullBot pushed a commit to xtqqczze/dotnet-sdk that referenced this pull request Aug 3, 2026
microsoft/testfx#10387 split TerminalTestReporter.Summary.cs into focused
partials, adding Coverage, FlakyTests, SlowestTests and TestDiscovery. Upstream
includes the folder with a glob, so nothing flagged the addition here and edits
to those four files were invisible to the drift detector
(microsoft/testfx#10390).
Append the four paths to the dotnet-test-terminal-reporter entry, baselined at
the split commit acb5bafaa2. They are appended rather than sorted in because the
tracking-issue marker keys on the source index, and #7 (Summary) and #8
(TestCompletion) have open issues (dotnet#55472, dotnet#55473) that inserting would orphan.
Those two keep their old baselines: their drift is real, unported feature work
(retry/flaky accounting, in-process retry attribution), not just the move.
Also bump source #0 (TerminalTestReporter.cs): the only upstream change since
its baseline is a <remarks> comment describing upstream's partial layout, which
needs no port into the SDK's single-file fork.
Document both gotchas in eng/vendored-files.md.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3328d629-8443-45a7-8ee2-97d3ce23dee5
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-reviewAwaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor TerminalTestReporter.Summary.cs (715 lines) into focused partial files

3 participants

@Evangelink@0101