Skip to content

Refactor CtrfReportEngine into focused partial files (#9054)#9057

Merged
Evangelink merged 1 commit into
mainfrom
dev/copilot/issue-9054-refactor-ctrf-report
Jun 12, 2026
Merged

Refactor CtrfReportEngine into focused partial files (#9054)#9057
Evangelink merged 1 commit into
mainfrom
dev/copilot/issue-9054-refactor-ctrf-report

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Fixes #9054.

Splits the 778-line CtrfReportEngine.cs into focused partial class files, each under 300 lines, with no public or internal API changes and identical behavior:

File Responsibility Lines
CtrfReportEngine.cs Orchestration (ctor, GenerateReportAsync, GenerateReportCoreAsync) ~76
CtrfReportEngine.FileWriter.cs Collision-safe file persistence (WriteWithRetryAsync, SplitCtrfExtension, WriteAsync) ~81
CtrfReportEngine.FileNaming.cs Output-path construction & sanitization (BuildDefaultFileName, ResolveJsonFileName, TFM/OS lookup, reserved-name detection) ~97
CtrfReportEngine.JsonSerializer.cs Top-level CTRF JSON document (BuildCtrfJson) ~135
CtrfReportEngine.JsonTestWriter.cs Per-test/attempt JSON writing (WriteTest, WriteRetryAttempt, HasSameKeyEarlier) ~226
CtrfReportEngine.TestCollapsing.cs Retry-attempt collapsing & output-line helpers (CollapseAttempts, WriteOutputLines, CollapsedTestResult) ~92

Validation

  • dotnet build of the CtrfReport project succeeds (0 warnings, 0 errors) across net8.0/net9.0/netstandard2.0.
  • All 48 CtrfReport unit tests pass (Microsoft.Testing.Extensions.UnitTests, filter ~Ctrf).

Acceptance criteria

  • Original file split into focused modules as proposed
  • Each new file under 300 lines
  • Tests pass after refactoring
  • No breaking changes to internal or public API
  • All cross-file references compile

Splits the 778-line CtrfReportEngine.cs into focused partial-class files, each under 300 lines, with no public/internal API change:

- CtrfReportEngine.cs - orchestration (constructor, GenerateReportAsync, GenerateReportCoreAsync)
- CtrfReportEngine.FileWriter.cs - collision-safe file persistence
- CtrfReportEngine.FileNaming.cs - output-path construction and sanitization
- CtrfReportEngine.JsonSerializer.cs - top-level CTRF JSON document
- CtrfReportEngine.JsonTestWriter.cs - per-test/attempt JSON writing
- CtrfReportEngine.TestCollapsing.cs - retry-attempt collapsing and output-line helpers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 11, 2026 21:38

Copilot AI 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

Refactors CtrfReportEngine (CTRF report generation for Microsoft.Testing.Platform) by splitting a large single file into multiple focused partial class files, preserving existing behavior and API surface while improving navigability and maintainability.

Changes:

  • Converted CtrfReportEngine to an internal sealed partial class and kept orchestration in CtrfReportEngine.cs.
  • Extracted file naming + sanitization, file writing (collision-safe persistence), JSON serialization, per-test JSON writing, and retry-attempt collapsing/output helpers into dedicated partial files.
  • Kept the CTRF JSON output structure and retry-collapsing logic intact, but moved responsibilities into smaller modules.
Show a summary per file
File Description
src/Platform/Microsoft.Testing.Extensions.CtrfReport/CtrfReportEngine.cs Keeps constructor and orchestration (GenerateReportAsync / core flow), now partial.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/CtrfReportEngine.FileWriter.cs Contains retry/collision-safe file persistence helpers.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/CtrfReportEngine.FileNaming.cs Builds default file names and resolves/sanitizes templated names and environment metadata.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/CtrfReportEngine.JsonSerializer.cs Builds the top-level CTRF JSON document (summary, tool/environment metadata, tests array).
src/Platform/Microsoft.Testing.Extensions.CtrfReport/CtrfReportEngine.JsonTestWriter.cs Writes per-test JSON, retry attempts, trait/tag/label emission logic.
src/Platform/Microsoft.Testing.Extensions.CtrfReport/CtrfReportEngine.TestCollapsing.cs Collapses retry attempts per UID and writes stdout/stderr line arrays.

Copilot's findings

  • Files reviewed: 6/6 changed files
  • Comments generated: 1

@Evangelink Evangelink merged commit 8bc8546 into main Jun 12, 2026
37 checks passed
@Evangelink Evangelink deleted the dev/copilot/issue-9054-refactor-ctrf-report branch June 12, 2026 09:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[file-diet] Refactor CtrfReportEngine.cs (778 lines) into focused smaller files

2 participants