Overview
The file src/vstest.console/TestPlatformHelpers/TestRequestManager.cs has grown to 1569 lines, making it harder to navigate and maintain. This task involves refactoring it into smaller, more focused files.
Note: The two larger files in the repo (Jsonite.cs at 1726 lines and SimpleJSON.cs at 1391 lines) are vendored third-party libraries and are excluded from this analysis.
Current State
- File:
src/vstest.console/TestPlatformHelpers/TestRequestManager.cs
- Size: 1569 lines
- Language: C#
Structural Analysis
The file contains a single internal class TestRequestManager plus a small internal static class KnownPlatformSourceFilter at the bottom. The class handles:
- Public request lifecycle —
InitializeExtensions, ResetOptions, DiscoverTests, RunTests, ProcessTestRunAttachments, plus cancellation/abort/dispose methods (lines ~167–560).
- RunSettings mutation —
UpdateRunSettingsIfRequired and ~15 private helpers that each patch a specific XML node: UpdateTargetDevice, UpdateDesignMode, UpdatePlatform, UpdateFrameworkInRunSettingsIfRequired, AddOrUpdateBatchSize, UpdateCollectSourceInformation, AddFakesConfigurationToRunsettings, UpdateCollectCoverageSettings, etc. (lines ~563–1143).
- Logger management —
AddOrUpdateBuiltInLoggers, AddConsoleLogger, UpdateConsoleLoggerIfExists, UpdateMSBuildLoggerIfExists (lines ~808–1144).
- Telemetry & diagnostics —
CollectMetrics, LogTelemetryForLegacySettings, LogCommandsTelemetryPoints, IsTelemetryOptedIn (lines ~486–507, ~1275–1461).
- Source-compatibility checks —
CheckSourcesForCompatibility, WriteWarningForNetFramework35IsUnsupported, KnownPlatformSourceFilter (lines ~921–1569).
Refactoring Strategy
Proposed File Splits
-
TestRequestManager.cs (core — kept, trimmed)
- Contents: constructor,
InitializeExtensions, ResetOptions, DiscoverTests, RunTests, ProcessTestRunAttachments, cancellation helpers, Dispose
- Responsibility: Orchestrates test discovery, execution, and attachments processing
-
TestRequestManager.RunSettings.cs (partial class)
- Contents:
UpdateRunSettingsIfRequired and all private XML-patch helpers (UpdateTargetDevice, UpdateDesignMode, UpdatePlatform, UpdateFrameworkInRunSettingsIfRequired, AddOrUpdateBatchSize, UpdateCollectSourceInformation, UpdateIsTargetPlatformInferred, AddFakesConfigurationToRunsettings, UpdateCollectCoverageSettings)
- Responsibility: Mutates run-settings XML before dispatching a request
-
TestRequestManager.Loggers.cs (partial class)
- Contents:
AddOrUpdateBuiltInLoggers, AddConsoleLogger, UpdateConsoleLoggerIfExists, UpdateMSBuildLoggerIfExists
- Responsibility: Injects and updates built-in loggers in run-settings
-
TestRequestManager.Telemetry.cs (partial class)
- Contents:
CollectMetrics, LogTelemetryForLegacySettings, LogCommandsTelemetryPoints, IsTelemetryOptedIn
- Responsibility: Collects and emits telemetry/diagnostics data
-
KnownPlatformSourceFilter.cs (separate file)
- Contents:
internal static class KnownPlatformSourceFilter with KnownPlatformSources set and FilterKnownPlatformSources
- Responsibility: Filters well-known platform assemblies from test source lists
Implementation Guidelines
- Preserve Behavior: All existing functionality must work identically after the split
- Maintain Public API:
TestRequestManager is internal — use partial class so callers are unaffected
- Update Imports: Each new partial-class file needs its own
using directives
- Test After Each Split: Run
./test.cmd after each incremental change
- One File at a Time: Split one partial at a time to make review easier
Acceptance Criteria
Priority: Medium
Effort: Medium
Expected Impact: Improved code navigability, easier isolated testing of RunSettings logic, reduced merge conflicts in the orchestration core
Generated by Daily File Diet · 24 AIC · ⌖ 6.26 AIC · ⊞ 6.1K · ◷
Overview
The file
src/vstest.console/TestPlatformHelpers/TestRequestManager.cshas grown to 1569 lines, making it harder to navigate and maintain. This task involves refactoring it into smaller, more focused files.Current State
src/vstest.console/TestPlatformHelpers/TestRequestManager.csStructural Analysis
The file contains a single
internal class TestRequestManagerplus a smallinternal static class KnownPlatformSourceFilterat the bottom. The class handles:InitializeExtensions,ResetOptions,DiscoverTests,RunTests,ProcessTestRunAttachments, plus cancellation/abort/dispose methods (lines ~167–560).UpdateRunSettingsIfRequiredand ~15 private helpers that each patch a specific XML node:UpdateTargetDevice,UpdateDesignMode,UpdatePlatform,UpdateFrameworkInRunSettingsIfRequired,AddOrUpdateBatchSize,UpdateCollectSourceInformation,AddFakesConfigurationToRunsettings,UpdateCollectCoverageSettings, etc. (lines ~563–1143).AddOrUpdateBuiltInLoggers,AddConsoleLogger,UpdateConsoleLoggerIfExists,UpdateMSBuildLoggerIfExists(lines ~808–1144).CollectMetrics,LogTelemetryForLegacySettings,LogCommandsTelemetryPoints,IsTelemetryOptedIn(lines ~486–507, ~1275–1461).CheckSourcesForCompatibility,WriteWarningForNetFramework35IsUnsupported,KnownPlatformSourceFilter(lines ~921–1569).Refactoring Strategy
Proposed File Splits
TestRequestManager.cs(core — kept, trimmed)InitializeExtensions,ResetOptions,DiscoverTests,RunTests,ProcessTestRunAttachments, cancellation helpers,DisposeTestRequestManager.RunSettings.cs(partial class)UpdateRunSettingsIfRequiredand all private XML-patch helpers (UpdateTargetDevice,UpdateDesignMode,UpdatePlatform,UpdateFrameworkInRunSettingsIfRequired,AddOrUpdateBatchSize,UpdateCollectSourceInformation,UpdateIsTargetPlatformInferred,AddFakesConfigurationToRunsettings,UpdateCollectCoverageSettings)TestRequestManager.Loggers.cs(partial class)AddOrUpdateBuiltInLoggers,AddConsoleLogger,UpdateConsoleLoggerIfExists,UpdateMSBuildLoggerIfExistsTestRequestManager.Telemetry.cs(partial class)CollectMetrics,LogTelemetryForLegacySettings,LogCommandsTelemetryPoints,IsTelemetryOptedInKnownPlatformSourceFilter.cs(separate file)internal static class KnownPlatformSourceFilterwithKnownPlatformSourcesset andFilterKnownPlatformSourcesImplementation Guidelines
TestRequestManagerisinternal— usepartial classso callers are unaffectedusingdirectives./test.cmdafter each incremental changeAcceptance Criteria
TestRequestManager.csis split into partial-class files as described aboveKnownPlatformSourceFilterlives in its own file./test.cmd)Priority: Medium
Effort: Medium
Expected Impact: Improved code navigability, easier isolated testing of RunSettings logic, reduced merge conflicts in the orchestration core