Skip to content

Commit 5213eb4

Browse files
committed
refactor
1 parent 738a94e commit 5213eb4

34 files changed

+1602
-1037
lines changed

FineCodeCoverageTests/FineCodeCoverageTests.csproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@
7272
<Reference Include="nunit.framework, Version=3.13.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb, processorArchitecture=MSIL">
7373
<HintPath>..\packages\NUnit.3.13.1\lib\net45\nunit.framework.dll</HintPath>
7474
</Reference>
75+
<Reference Include="StructureMap, Version=4.7.0.0, Culture=neutral, processorArchitecture=MSIL">
76+
<HintPath>..\packages\StructureMap.4.7.1\lib\net45\StructureMap.dll</HintPath>
77+
</Reference>
7578
<Reference Include="System" />
7679
<Reference Include="System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
7780
<HintPath>..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll</HintPath>
@@ -109,19 +112,24 @@
109112
<Compile Include="CoverageToolOutput_Tests\SolutionFolderProvider_Tests.cs" />
110113
<Compile Include="CoverageUtilManager_Tests.cs" />
111114
<Compile Include="Events\EventAggregator.cs" />
115+
<Compile Include="MsCodeCoverage\ShimCopier_Tests.cs" />
116+
<Compile Include="MsCodeCoverage\TemplatedRunSettingsService_Tests.cs" />
112117
<Compile Include="MsCodeCoverage\CustomRunSettingsTemplateProvider_Tests.cs" />
118+
<Compile Include="MsCodeCoverage\Helpers\IXPathNavigableExtensions.cs" />
113119
<Compile Include="MsCodeCoverage\RunSettingsHelper_Tests.cs" />
114120
<Compile Include="MsCodeCoverage\RunSettingsTemplate_Tests.cs" />
115121
<Compile Include="MsCodeCoverage\MsCodeCoverageRunSettingsService_Collect_Tests.cs" />
116122
<Compile Include="MsCodeCoverage\MsCodeCoverageRunSettingsService_IsCollecting_Tests.cs" />
117123
<Compile Include="MsCodeCoverage\MsCodeCoverageRunSettingsService_Initialize_Tests.cs" />
118124
<Compile Include="MsCodeCoverage\MsCodeCoverageRunSettingsService_IRunSettingsService_Tests.cs" />
119125
<Compile Include="MsCodeCoverage\ProjectRunSettingsGenerator_Tests.cs" />
126+
<Compile Include="MsCodeCoverage\Implementations\TestRunSettingsTemplateReplacements.cs" />
120127
<Compile Include="MsCodeCoverage\UserRunSettingsService_AddFCCSettings_Tests.cs" />
121128
<Compile Include="MsCodeCoverage\UserRunSettingsService_Analysis_Tests.cs" />
122129
<Compile Include="MsCodeCoverage\RunSettingsTemplateReplacementsFactory_Tests.cs" />
123130
<Compile Include="Test helpers\MefOrderAssertions.cs" />
124131
<Compile Include="Test helpers\TestThreadHelper.cs" />
132+
<Compile Include="Test helpers\XmlAssert.cs" />
125133
<Compile Include="ToolFolder_Tests.cs" />
126134
<Compile Include="ToolZipProvider_Tests.cs" />
127135
<Compile Include="CoverletDataCollectorGeneratedCobertura_Tests.cs" />
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Xml.XPath;
2+
using System.IO;
3+
using System.Xml;
4+
using System.Globalization;
5+
6+
namespace FineCodeCoverageTests.MsCodeCoverage
7+
{
8+
internal static class IXPathNavigableExtensions
9+
{
10+
public const string XmlDeclaration = "<?xml version='1.0' encoding='utf-8'?>";
11+
12+
public static IXPathNavigable CreateXPathNavigable(string contents)
13+
{
14+
var xmlDocument = new XmlDocument();
15+
xmlDocument.LoadXml(XmlDeclaration + contents);
16+
return xmlDocument.CreateNavigator();
17+
}
18+
19+
public static string DumpXmlContents(this IXPathNavigable xmlPathNavigable)
20+
{
21+
var navigator = xmlPathNavigable.CreateNavigator();
22+
navigator.MoveToRoot();
23+
using (StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture))
24+
{
25+
navigator.WriteSubtree(new XmlTextWriter((TextWriter)stringWriter)
26+
{
27+
Formatting = Formatting.Indented
28+
});
29+
return stringWriter.ToString();
30+
}
31+
}
32+
}
33+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
2+
3+
namespace FineCodeCoverageTests.MsCodeCoverage
4+
{
5+
internal class TemplateReplaceResult : ITemplateReplacementResult
6+
{
7+
public string Replaced { get; set; }
8+
9+
public bool ReplacedTestAdapter { get; set; }
10+
}
11+
12+
internal class TestRunSettingsTemplateReplacements : IRunSettingsTemplateReplacements
13+
{
14+
public string Enabled { get; set; }
15+
16+
public string ResultsDirectory { get; set; }
17+
18+
public string TestAdapter { get; set; }
19+
20+
public string ModulePathsExclude { get; set; }
21+
22+
public string ModulePathsInclude { get; set; }
23+
24+
public string FunctionsExclude { get; set; }
25+
26+
public string FunctionsInclude { get; set; }
27+
28+
public string AttributesExclude { get; set; }
29+
30+
public string AttributesInclude { get; set; }
31+
32+
public string SourcesExclude { get; set; }
33+
34+
public string SourcesInclude { get; set; }
35+
36+
public string CompanyNamesExclude { get; set; }
37+
38+
public string CompanyNamesInclude { get; set; }
39+
40+
public string PublicKeyTokensExclude { get; set; }
41+
42+
public string PublicKeyTokensInclude { get; set; }
43+
}
44+
}
Lines changed: 86 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
1-
using FineCodeCoverage.Engine.MsTestPlatform;
2-
using Moq;
1+
using Moq;
32
using NUnit.Framework;
4-
using System.Xml;
53
using Microsoft.VisualStudio.TestWindow.Extensibility;
64
using System.IO;
7-
using System.Globalization;
85
using System.Xml.XPath;
9-
using System;
106
using System.Collections.Generic;
11-
using FineCodeCoverage.Options;
127
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
138
using AutoMoq;
149
using System.Threading;
1510
using FineCodeCoverage.Core.Utilities;
16-
using FineCodeCoverage.Engine.Model;
1711
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
12+
using System;
1813

1914
namespace FineCodeCoverageTests.MsCodeCoverage
2015
{
@@ -37,55 +32,110 @@ public void Should_Have_A_Name()
3732

3833
[TestCase(RunSettingConfigurationInfoState.Discovery)]
3934
[TestCase(RunSettingConfigurationInfoState.None)]
40-
public void Should_Not_Process_When_Not_Test_Execution(RunSettingConfigurationInfoState state)
35+
public void Should_Not_Delegate_To_UserRunSettingsService_When_Not_Test_Execution(RunSettingConfigurationInfoState state)
36+
{
37+
SetuserRunSettingsProjectDetailsLookup(false);
38+
msCodeCoverageRunSettingsService.collectionStatus = MsCodeCoverageCollectionStatus.Collecting;
39+
40+
ShouldNotDelegateToUserRunSettingsService(state);
41+
}
42+
43+
[TestCase(MsCodeCoverageCollectionStatus.NotCollecting)]
44+
[TestCase(MsCodeCoverageCollectionStatus.Error)]
45+
public void Should_Not_Delegate_To_UserRunSettingsService_When_Is_Not_Collecting(MsCodeCoverageCollectionStatus status)
46+
{
47+
msCodeCoverageRunSettingsService.collectionStatus = MsCodeCoverageCollectionStatus.NotCollecting;
48+
SetuserRunSettingsProjectDetailsLookup(false);
49+
50+
ShouldNotDelegateToUserRunSettingsService(RunSettingConfigurationInfoState.Execution);
51+
}
52+
53+
[Test]
54+
public void Should_Not_Delegate_To_UserRunSettingsService_When_No_User_RunSettings()
55+
{
56+
msCodeCoverageRunSettingsService.collectionStatus = MsCodeCoverageCollectionStatus.Collecting;
57+
SetuserRunSettingsProjectDetailsLookup(true);
58+
59+
ShouldNotDelegateToUserRunSettingsService(RunSettingConfigurationInfoState.Execution);
60+
}
61+
62+
private void ShouldNotDelegateToUserRunSettingsService(RunSettingConfigurationInfoState state)
4163
{
4264
var mockRunSettingsConfigurationInfo = new Mock<IRunSettingsConfigurationInfo>();
4365
mockRunSettingsConfigurationInfo.Setup(ci => ci.RequestState).Returns(state);
66+
67+
autoMocker.GetMock<IUserRunSettingsService>()
68+
.Setup(userRunSettingsService => userRunSettingsService.AddFCCRunSettings(
69+
It.IsAny<IXPathNavigable>(),
70+
It.IsAny<IRunSettingsConfigurationInfo>(),
71+
It.IsAny<Dictionary<string, IUserRunSettingsProjectDetails>>(),
72+
It.IsAny<string>()
73+
)).Returns(new Mock<IXPathNavigable>().Object);
4474
Assert.IsNull(msCodeCoverageRunSettingsService.AddRunSettings(null, mockRunSettingsConfigurationInfo.Object, null));
4575
}
4676

47-
[Test]
48-
public void Should_Not_Process_When_Runsettings_Created_From_Template()
77+
78+
79+
private void SetuserRunSettingsProjectDetailsLookup(bool empty)
4980
{
50-
var xPathNavigable = new Mock<IXPathNavigable>().Object;
51-
autoMocker.GetMock<IRunSettingsTemplate>().Setup(runSettingsTemplate => runSettingsTemplate.FCCGenerated(xPathNavigable)).Returns(true);
52-
var mockRunSettingsConfigurationInfo = new Mock<IRunSettingsConfigurationInfo>();
53-
mockRunSettingsConfigurationInfo.Setup(ci => ci.RequestState).Returns(RunSettingConfigurationInfoState.Execution);
54-
Assert.IsNull(msCodeCoverageRunSettingsService.AddRunSettings(xPathNavigable, mockRunSettingsConfigurationInfo.Object, null));
81+
var userRunSettingsProjectDetailsLookup = new Dictionary<string, IUserRunSettingsProjectDetails>();
82+
if (!empty)
83+
{
84+
userRunSettingsProjectDetailsLookup.Add("", null); // an entry
85+
}
86+
msCodeCoverageRunSettingsService.userRunSettingsProjectDetailsLookup = userRunSettingsProjectDetailsLookup;
5587
}
5688

5789
[Test]
58-
public void Should_UserRunSettingsService_AddFCCRunSettings_When_Execute_And_UserRunSettings()
90+
public void Should_Delegate_To_UserRunSettingsService_With_UserRunSettingsProjectDetailsLookup_And_FCC_Ms_TestAdapter_Path_When_Applicable()
5991
{
6092
var inputRunSettingDocument = new Mock<IXPathNavigable>().Object;
61-
var mockRunSettingsTemplate = autoMocker.GetMock<IRunSettingsTemplate>();
62-
mockRunSettingsTemplate.Setup(runSettingsTemplate => runSettingsTemplate.FCCGenerated(inputRunSettingDocument)).Returns(false);
6393

6494
var mockRunSettingsConfigurationInfo = new Mock<IRunSettingsConfigurationInfo>();
6595
mockRunSettingsConfigurationInfo.Setup(ci => ci.RequestState).Returns(RunSettingConfigurationInfoState.Execution);
66-
var testContainers = new List<ITestContainer>();
67-
mockRunSettingsConfigurationInfo.Setup(ci => ci.TestContainers).Returns(testContainers);
68-
69-
var ct = CancellationToken.None;
70-
autoMocker.GetMock<IToolFolder>().Setup(toolFolder => toolFolder.EnsureUnzipped(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ZipDetails>(), ct)).Returns("ZipDestination");
71-
var msCodeCoveragePath = Path.Combine("ZipDestination", "build", "netstandard1.0");
72-
msCodeCoverageRunSettingsService.Initialize(null, null, ct);
73-
74-
// collecting
75-
var mockCoverageProject = new Mock<ICoverageProject>();
76-
mockCoverageProject.Setup(cp => cp.TestDllFile).Returns("Test.dll");
77-
msCodeCoverageRunSettingsService.userRunSettingsProjectDetailsLookup = new Dictionary<string, IUserRunSettingsProjectDetails> { };
78-
96+
var runSettingsConfigurationInfo = mockRunSettingsConfigurationInfo.Object;
97+
98+
var fccMsTestAdapter = GetFCCMsTestAdapterPath();
99+
100+
// IsCollecting would set this
101+
var userRunSettingsProjectDetailsLookup = new Dictionary<string, IUserRunSettingsProjectDetails>
102+
{
103+
{ "",null} // an entry
104+
};
105+
msCodeCoverageRunSettingsService.userRunSettingsProjectDetailsLookup = userRunSettingsProjectDetailsLookup;
106+
msCodeCoverageRunSettingsService.collectionStatus = MsCodeCoverageCollectionStatus.Collecting;
79107

80-
var runSettingsTemplateReplacements = new Mock<IRunSettingsTemplateReplacements>().Object;
81-
var mockRunSettingsTemplateReplacementsFactory = autoMocker.GetMock<IRunSettingsTemplateReplacementsFactory>();
82-
mockRunSettingsTemplateReplacementsFactory.Setup(f => f.Create(testContainers, msCodeCoverageRunSettingsService.userRunSettingsProjectDetailsLookup, msCodeCoveragePath)).Returns(runSettingsTemplateReplacements);
83108

84109
var mockUserRunSettingsService = autoMocker.GetMock<IUserRunSettingsService>();
85110
var fccRunSettingDocument = new Mock<IXPathNavigable>().Object;
86-
mockUserRunSettingsService.Setup(userRunSettingsService => userRunSettingsService.AddFCCRunSettings(mockRunSettingsTemplate.Object, runSettingsTemplateReplacements, inputRunSettingDocument)).Returns(fccRunSettingDocument);
111+
var addFCCRunSettingsSetup = mockUserRunSettingsService.Setup(userRunSettingsService => userRunSettingsService.AddFCCRunSettings(
112+
inputRunSettingDocument,
113+
runSettingsConfigurationInfo,
114+
It.IsAny<Dictionary<string,IUserRunSettingsProjectDetails>>(),
115+
fccMsTestAdapter)
116+
).Returns(fccRunSettingDocument);
117+
118+
Assert.AreSame(fccRunSettingDocument, msCodeCoverageRunSettingsService.AddRunSettings(inputRunSettingDocument, mockRunSettingsConfigurationInfo.Object, null));
119+
120+
var addFCCRunSettingsInvocation = mockUserRunSettingsService.Invocations[0];
121+
Assert.AreSame(userRunSettingsProjectDetailsLookup, addFCCRunSettingsInvocation.Arguments[2]);
122+
}
123+
124+
private string GetFCCMsTestAdapterPath()
125+
{
126+
autoMocker.GetMock<IToolFolder>()
127+
.Setup(
128+
toolFolder => toolFolder.EnsureUnzipped(
129+
It.IsAny<string>(),
130+
It.IsAny<string>(),
131+
It.IsAny<ZipDetails>(),
132+
It.IsAny<CancellationToken>())
133+
)
134+
.Returns("ZipDestination");
87135

88-
Assert.AreSame(fccRunSettingDocument,msCodeCoverageRunSettingsService.AddRunSettings(inputRunSettingDocument, mockRunSettingsConfigurationInfo.Object, null));
136+
msCodeCoverageRunSettingsService.Initialize(null, null, CancellationToken.None);
137+
return Path.Combine("ZipDestination", "build", "netstandard1.0");
89138
}
139+
90140
}
91141
}
Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,31 @@
1-
namespace FineCodeCoverageTests.MsCodeCoverage
1+
using NUnit.Framework;
2+
using AutoMoq;
3+
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
4+
using System.Threading;
5+
using FineCodeCoverage.Core.Utilities;
6+
7+
namespace FineCodeCoverageTests.MsCodeCoverage
28
{
39
internal class MsCodeCoverageRunSettingsService_Initialize_Tests
410
{
5-
// todo
11+
[Test]
12+
public void Should_Ensure_Microsoft_CodeCoverage_Is_Unzipped_To_The_Tool_Folder()
13+
{
14+
var autoMocker = new AutoMoqer();
15+
var msCodeCoverageRunSettingsService = autoMocker.Create<MsCodeCoverageRunSettingsService>();
16+
17+
var cancellationToken = CancellationToken.None;
18+
19+
var zipDetails = new ZipDetails();
20+
var mockToolZipProvider = autoMocker.GetMock<IToolZipProvider>();
21+
mockToolZipProvider.Setup(toolZipProvider => toolZipProvider.ProvideZip("microsoft.codecoverage")).Returns(zipDetails);
22+
23+
var mockToolFolder = autoMocker.GetMock<IToolFolder>();
24+
mockToolFolder.Setup(toolFolder =>
25+
toolFolder.EnsureUnzipped("AppDataFolder", "msCodeCoverage", zipDetails, cancellationToken)).Returns("ZipDestination");
26+
27+
msCodeCoverageRunSettingsService.Initialize("AppDataFolder", null, cancellationToken);
28+
mockToolFolder.VerifyAll();
29+
}
630
}
731
}

0 commit comments

Comments
 (0)