@@ -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