Skip to content

Commit ac5ce6b

Browse files
committed
refactor
1 parent b9c3732 commit ac5ce6b

File tree

1 file changed

+97
-52
lines changed

1 file changed

+97
-52
lines changed

SharedProject/Core/MsTestPlatform/CodeCoverage/MsCodeCoverageRunSettingsService.cs

Lines changed: 97 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -121,35 +121,40 @@ public void Initialize(string appDataFolder, IFCCEngine fccEngine, CancellationT
121121
public async Task<MsCodeCoverageCollectionStatus> IsCollectingAsync(ITestOperation testOperation)
122122
{
123123
await InitializeIsCollectingAsync(testOperation);
124+
await TrySetUpForCollectionAsync(testOperation.SolutionDirectory);
125+
ReportEndOfCoverageRunIfError();
126+
return collectionStatus;
127+
}
124128

129+
private async Task TrySetUpForCollectionAsync(string solutionDirectory)
130+
{
125131
IUserRunSettingsAnalysisResult analysisResult = await TryAnalyseUserRunSettingsAsync();
126-
if (analysisResult != null)
132+
if (analysisResult.Ok())
127133
{
128-
var coverageProjectsForShim = analysisResult.ProjectsWithFCCMsTestAdapter;
129-
130-
if (analysisResult.Suitable)
131-
{
132-
await PrepareCoverageProjectsAsync();
133-
SetUserRunSettingsProjectDetails();
134-
if (coverageProjectsByType.HasTemplated())
135-
{
136-
await GenerateTemplatedAsync(
137-
analysisResult.SpecifiedMsCodeCoverage,
138-
coverageProjectsForShim,
139-
testOperation.SolutionDirectory
140-
);
141-
}
142-
else
143-
{
144-
await CollectingUserRunSettingsAsync();
145-
}
146-
}
147-
148-
CopyShimWhenCollecting(coverageProjectsForShim);
134+
135+
await SetUpForCollectionAsync(
136+
analysisResult.ProjectsWithFCCMsTestAdapter,
137+
analysisResult.SpecifiedMsCodeCoverage,
138+
solutionDirectory
139+
);
149140
}
141+
}
142+
143+
private async Task SetUpForCollectionAsync(
144+
List<ICoverageProject> coverageProjectsForShim,
145+
bool specifiedMsCodeCoverageInRunSettings,
146+
string solutionDirectory
147+
)
148+
{
149+
await PrepareCoverageProjectsAsync();
150+
SetUserRunSettingsProjectDetails();
150151

151-
ReportEndOfCoverageRunIfError();
152-
return collectionStatus;
152+
await GenerateTemplatedRunSettingsAsync(
153+
specifiedMsCodeCoverageInRunSettings,
154+
coverageProjectsForShim,
155+
solutionDirectory
156+
);
157+
CopyShimWhenCollecting(coverageProjectsForShim);
153158
}
154159

155160
private void ReportEndOfCoverageRunIfError()
@@ -184,44 +189,66 @@ private async Task<IUserRunSettingsAnalysisResult> TryAnalyseUserRunSettingsAsyn
184189
collectionStatus = MsCodeCoverageCollectionStatus.Error;
185190
await CombinedLogExceptionAsync(exc, "Exception analysing runsettings files");
186191
}
192+
193+
if (analysisResult.Ok())
194+
{
195+
await CollectingIfUserRunSettingsOnlyAsync();
196+
}
187197
return analysisResult;
188198
}
189199

190-
private async Task GenerateTemplatedAsync(bool runSettingsSpecifiedMsCodeCoverage, List<ICoverageProject> coverageProjectsForShim, string solutionDirectory)
200+
private async Task GenerateTemplatedRunSettingsAsync(
201+
bool runSettingsSpecifiedMsCodeCoverage,
202+
List<ICoverageProject> coverageProjectsForShim,
203+
string solutionDirectory
204+
)
191205
{
192-
if (useMsCodeCoverage || runSettingsSpecifiedMsCodeCoverage)
206+
if (coverageProjectsByType.HasTemplated() && (useMsCodeCoverage || runSettingsSpecifiedMsCodeCoverage))
193207
{
194208
var generationResult = await templatedRunSettingsService.GenerateAsync(
195209
coverageProjectsByType.Templated,
196210
solutionDirectory,
197211
fccMsTestAdapterPath
198212
);
199213

200-
if (generationResult.ExceptionReason == null)
201-
{
202-
coverageProjectsForShim.AddRange(generationResult.CoverageProjectsWithFCCMsTestAdapter);
203-
await CombinedLogAsync(() =>
204-
{
205-
var leadingMessage = generationResult.CustomTemplatePaths.Any() ? $"{msCodeCoverageMessage} - custom template paths" : msCodeCoverageMessage;
206-
var loggerMessages = new List<string> { leadingMessage }.Concat(generationResult.CustomTemplatePaths.Distinct());
207-
logger.Log(loggerMessages);
208-
reportGeneratorUtil.LogCoverageProcess(msCodeCoverageMessage);
209-
});
210-
collectionStatus = MsCodeCoverageCollectionStatus.Collecting;
211-
}
212-
else
213-
{
214-
var exceptionReason = generationResult.ExceptionReason;
215-
await CombinedLogExceptionAsync(exceptionReason.Exception, exceptionReason.Reason);
216-
collectionStatus = MsCodeCoverageCollectionStatus.Error;
217-
}
214+
await ProcessTemplateGenerationResultAsync(generationResult, coverageProjectsForShim);
215+
}
216+
}
217+
218+
private async Task ProcessTemplateGenerationResultAsync(IProjectRunSettingsFromTemplateResult generationResult, List<ICoverageProject> coverageProjectsForShim)
219+
{
220+
if (generationResult.ExceptionReason == null)
221+
{
222+
await CollectingWithTemplateAsync(generationResult, coverageProjectsForShim);
223+
}
224+
else
225+
{
226+
var exceptionReason = generationResult.ExceptionReason;
227+
await CombinedLogExceptionAsync(exceptionReason.Exception, exceptionReason.Reason);
228+
collectionStatus = MsCodeCoverageCollectionStatus.Error;
218229
}
219230
}
220231

221-
private Task CollectingUserRunSettingsAsync()
232+
private async Task CollectingWithTemplateAsync(IProjectRunSettingsFromTemplateResult generationResult, List<ICoverageProject> coverageProjectsForShim)
222233
{
234+
coverageProjectsForShim.AddRange(generationResult.CoverageProjectsWithFCCMsTestAdapter);
235+
await CombinedLogAsync(() =>
236+
{
237+
var leadingMessage = generationResult.CustomTemplatePaths.Any() ? $"{msCodeCoverageMessage} - custom template paths" : msCodeCoverageMessage;
238+
var loggerMessages = new List<string> { leadingMessage }.Concat(generationResult.CustomTemplatePaths.Distinct());
239+
logger.Log(loggerMessages);
240+
reportGeneratorUtil.LogCoverageProcess(msCodeCoverageMessage);
241+
});
223242
collectionStatus = MsCodeCoverageCollectionStatus.Collecting;
224-
return CombinedLogAsync($"{msCodeCoverageMessage} with user runsettings");
243+
}
244+
245+
private async Task CollectingIfUserRunSettingsOnlyAsync()
246+
{
247+
if (!coverageProjectsByType.HasTemplated())
248+
{
249+
collectionStatus = MsCodeCoverageCollectionStatus.Collecting;
250+
await CombinedLogAsync($"{msCodeCoverageMessage} with user runsettings");
251+
}
225252
}
226253

227254
private void CopyShimWhenCollecting(List<ICoverageProject> coverageProjectsForShim)
@@ -280,13 +307,8 @@ private bool ShouldAddFCCRunSettings()
280307
public async Task CollectAsync(IOperation operation, ITestOperation testOperation)
281308
{
282309
await CleanUpAsync(testOperation);
283-
var resultsUris = operation.GetRunSettingsMsDataCollectorResultUri();
284-
var coberturaFiles = new string[0];
285-
if (resultsUris != null)
286-
{
287-
coberturaFiles = resultsUris.Select(uri => uri.LocalPath).Where(f => f.EndsWith(".cobertura.xml")).ToArray();
288-
}
289310

311+
var coberturaFiles = GetCoberturaFiles(operation);
290312
if (coberturaFiles.Length == 0)
291313
{
292314
await CombinedLogAsync("No cobertura files for ms code coverage.");
@@ -295,6 +317,17 @@ public async Task CollectAsync(IOperation operation, ITestOperation testOperatio
295317
fccEngine.RunAndProcessReport(coberturaFiles);
296318
}
297319

320+
private string[] GetCoberturaFiles(IOperation operation)
321+
{
322+
var resultsUris = operation.GetRunSettingsMsDataCollectorResultUri();
323+
var coberturaFiles = new string[0];
324+
if (resultsUris != null)
325+
{
326+
coberturaFiles = resultsUris.Select(uri => uri.LocalPath).Where(f => f.EndsWith(".cobertura.xml")).ToArray();
327+
}
328+
return coberturaFiles;
329+
}
330+
298331
public void StopCoverage()
299332
{
300333
fccEngine.StopCoverage();
@@ -347,5 +380,17 @@ public static bool IsTestExecution(this IRunSettingsConfigurationInfo configurat
347380

348381
}
349382

383+
internal static class UserRunSettingsAnalysisResultExtensions
384+
{
385+
public static bool Ok(this IUserRunSettingsAnalysisResult userRunSettingsAnalysisResult)
386+
{
387+
if (userRunSettingsAnalysisResult == null)
388+
{
389+
return false;
390+
}
391+
return userRunSettingsAnalysisResult.Suitable;
392+
393+
}
394+
}
350395

351396
}

0 commit comments

Comments
 (0)