Skip to content

Commit 989532c

Browse files
committed
intercept user runsettings and disable ms code coverage when all projects associated with runsettings have been disabled
1 parent 6fe6554 commit 989532c

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

SharedProject/Core/MsTestPlatform/CodeCoverage/RunSettingsTemplateReplacementsFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public IRunSettingsTemplateReplacements Create(
146146
var allProjectDetails = testContainers.Select(tc => userRunSettingsProjectDetailsLookup[tc.Source]).ToList();
147147
var resultsDirectory = allProjectDetails[0].CoverageOutputFolder;
148148
var allSettings = allProjectDetails.Select(pd => pd.Settings);
149+
var allProjectsDisabled = allSettings.All(s => !s.Enabled);
149150
var mergedSettings = new MergedIncludesExcludesOptions(allSettings);
150151

151152

@@ -162,7 +163,7 @@ public IRunSettingsTemplateReplacements Create(
162163

163164
var additionalModulePathsInclude = allProjectDetails.SelectMany(projectDetails => projectDetails.IncludedReferencedProjects.Select(rp => MsCodeCoverageRegex.RegexModuleName(rp)));
164165
var settings = new CombinedIncludesExcludesOptions(mergedSettings, additionalModulePathsInclude, additionalModulePathsExclude);
165-
return new RunSettingsTemplateReplacements(settings, resultsDirectory, "true", testAdapter);
166+
return new RunSettingsTemplateReplacements(settings, resultsDirectory, (!allProjectsDisabled).ToString(), testAdapter);
166167
}
167168

168169
public IRunSettingsTemplateReplacements Create(ICoverageProject coverageProject, string testAdapter)

SharedProject/Core/MsTestPlatform/CodeCoverage/UserRunSettingsService.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ private IXPathNavigable AddFCCRunSettingsActual(IXPathNavigable inputRunSettingD
152152
userRunSettingsProjectDetailsLookup,
153153
fccMsTestAdapterPath
154154
);
155+
155156
EnsureTestAdaptersPathsAndReplace(navigator, replacements);
156157
EnsureCorrectMsDataCollectorAndReplace(clonedNavigator, replacements);
157158
return navigator;
@@ -212,14 +213,31 @@ private void EnsureCorrectMsDataCollectorAndReplace(XPathNavigator xpathNavigato
212213
xpathNavigator.AppendChild(runSettingsTemplate.DataCollectionRunSettingsElement);
213214
}
214215

215-
if (addedMsDataCollector)
216+
// todo - improve this
217+
var disableMsDataCollector = replacements.Enabled.ToLower() == "false";
218+
if (addedMsDataCollector || disableMsDataCollector)
216219
{
217220
xpathNavigator.MoveToRoot();
218221
var dataCollectorsNavigator = xpathNavigator.SelectSingleNode("/RunSettings/DataCollectionRunSettings/DataCollectors");
219222
var msDataCollectorNavigator = MoveToMsDataCollectorFromDataCollectors(dataCollectorsNavigator);
220-
ReplaceExcludesIncludes(msDataCollectorNavigator, replacements);
223+
224+
if (disableMsDataCollector)
225+
{
226+
DisableMsDataCollector(msDataCollectorNavigator);
227+
}
228+
else
229+
{
230+
ReplaceExcludesIncludes(msDataCollectorNavigator, replacements); // no need to replace if we are disabling
231+
}
221232
}
233+
}
222234

235+
236+
private void DisableMsDataCollector(XPathNavigator msDataCollectorNavigator)
237+
{
238+
var element = XElement.Parse(msDataCollectorNavigator.OuterXml);
239+
element.SetAttributeValue("enabled", "false");
240+
msDataCollectorNavigator.OuterXml = element.ToString();
223241
}
224242

225243
private XPathNavigator MoveToMsDataCollectorFromDataCollectors(XPathNavigator navigator)

0 commit comments

Comments
 (0)