Skip to content

Commit 1da6ad2

Browse files
authored
Merge pull request #142 from tonyhallett/refactor-engine-coverage-utils
refactor engine - unaware of coverage utils
2 parents 7b9b58a + 1d1f07f commit 1da6ad2

File tree

7 files changed

+128
-46
lines changed

7 files changed

+128
-46
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel.Composition;
4+
using System.Threading.Tasks;
5+
using FineCodeCoverage.Engine.Coverlet;
6+
using FineCodeCoverage.Engine.Model;
7+
using FineCodeCoverage.Engine.OpenCover;
8+
9+
namespace FineCodeCoverage.Engine
10+
{
11+
[Export(typeof(ICoverageUtilManager))]
12+
internal class CoverageUtilManager : ICoverageUtilManager
13+
{
14+
private readonly IOpenCoverUtil openCoverUtil;
15+
private readonly ICoverletUtil coverletUtil;
16+
17+
[ImportingConstructor]
18+
public CoverageUtilManager(IOpenCoverUtil openCoverUtil, ICoverletUtil coverletUtil)
19+
{
20+
this.openCoverUtil = openCoverUtil;
21+
this.coverletUtil = coverletUtil;
22+
}
23+
24+
public void Initialize(string appDataFolder)
25+
{
26+
openCoverUtil.Initialize(appDataFolder);
27+
coverletUtil.Initialize(appDataFolder);
28+
}
29+
30+
public Task<bool> RunCoverageAsync(ICoverageProject project, bool throwError = false)
31+
{
32+
if (project.IsDotNetSdkStyle())
33+
{
34+
return coverletUtil.RunCoverletAsync(project, throwError);
35+
}
36+
else
37+
{
38+
return openCoverUtil.RunOpenCoverAsync(project, throwError);
39+
}
40+
}
41+
}
42+
}

FineCodeCoverage/Core/FCCEngine.cs

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66
using System.Threading;
77
using FineCodeCoverage.Core.Utilities;
88
using FineCodeCoverage.Engine.Cobertura;
9-
using FineCodeCoverage.Engine.Coverlet;
109
using FineCodeCoverage.Engine.Model;
1110
using FineCodeCoverage.Engine.MsTestPlatform;
12-
using FineCodeCoverage.Engine.OpenCover;
1311
using FineCodeCoverage.Engine.ReportGenerator;
1412
using FineCodeCoverage.Impl;
1513
using FineCodeCoverage.Options;
@@ -36,8 +34,7 @@ internal class FCCEngine : IFCCEngine
3634
public string AppDataFolderPath { get; private set; }
3735
public List<CoverageLine> CoverageLines { get; internal set; }
3836

39-
private readonly ICoverletUtil coverletUtil;
40-
private readonly IOpenCoverUtil openCoverUtil;
37+
private readonly ICoverageUtilManager coverageUtilManager;
4138
private readonly ICoberturaUtil coberturaUtil;
4239
private readonly IMsTestPlatformUtil msTestPlatformUtil;
4340
private readonly IReportGeneratorUtil reportGeneratorUtil;
@@ -51,8 +48,7 @@ internal class FCCEngine : IFCCEngine
5148

5249
[ImportingConstructor]
5350
public FCCEngine(
54-
ICoverletUtil coverletUtil,
55-
IOpenCoverUtil openCoverUtil,
51+
ICoverageUtilManager coverageUtilManager,
5652
ICoberturaUtil coberturaUtil,
5753
IMsTestPlatformUtil msTestPlatformUtil,
5854
IReportGeneratorUtil reportGeneratorUtil,
@@ -64,8 +60,7 @@ public FCCEngine(
6460
IServiceProvider serviceProvider
6561
)
6662
{
67-
this.coverletUtil = coverletUtil;
68-
this.openCoverUtil = openCoverUtil;
63+
this.coverageUtilManager = coverageUtilManager;
6964
this.coberturaUtil = coberturaUtil;
7065
this.msTestPlatformUtil = msTestPlatformUtil;
7166
this.reportGeneratorUtil = reportGeneratorUtil;
@@ -96,8 +91,7 @@ public void Initialize(IInitializeStatusProvider initializeStatusProvider)
9691

9792
reportGeneratorUtil.Initialize(AppDataFolderPath);
9893
msTestPlatformUtil.Initialize(AppDataFolderPath);
99-
openCoverUtil.Initialize(AppDataFolderPath);
100-
coverletUtil.Initialize(AppDataFolderPath);
94+
coverageUtilManager.Initialize(AppDataFolderPath);
10195
}
10296

10397
public void ClearUI()
@@ -128,18 +122,6 @@ private CancellationToken Reset()
128122
return cancellationToken;
129123
}
130124

131-
private System.Threading.Tasks.Task RunCoverToolAsync(ICoverageProject project)
132-
{
133-
if (project.IsDotNetSdkStyle())
134-
{
135-
return coverletUtil.RunCoverletAsync(project, true);
136-
}
137-
else
138-
{
139-
return openCoverUtil.RunOpenCoverAsync(project, true);
140-
}
141-
}
142-
143125
private async System.Threading.Tasks.Task<string[]> RunCoverageAsync(List<ICoverageProject> coverageProjects,CancellationToken cancellationToken)
144126
{
145127
// process pipeline
@@ -149,7 +131,7 @@ private async System.Threading.Tasks.Task<string[]> RunCoverageAsync(List<ICover
149131
foreach (var coverageProject in coverageProjects)
150132
{
151133
cancellationToken.ThrowIfCancellationRequested();
152-
await coverageProject.StepAsync("Run Coverage Tool", RunCoverToolAsync);
134+
await coverageProject.StepAsync("Run Coverage Tool", (project) => coverageUtilManager.RunCoverageAsync(project, true));
153135
}
154136

155137
var passedProjects = coverageProjects.Where(p => !p.HasFailed);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Threading.Tasks;
2+
using FineCodeCoverage.Engine.Model;
3+
4+
namespace FineCodeCoverage.Engine
5+
{
6+
internal interface ICoverageUtilManager
7+
{
8+
void Initialize(string appDataFolder);
9+
Task<bool> RunCoverageAsync(ICoverageProject project, bool throwError = false);
10+
}
11+
}

FineCodeCoverage/FineCodeCoverage.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,11 @@
6969
<Compile Include="Core\Cobertura\Packages.cs" />
7070
<Compile Include="Core\Cobertura\Sources.cs" />
7171
<Compile Include="Core\CoverageUIEvents.cs" />
72+
<Compile Include="Core\CoverageUtilManager.cs" />
7273
<Compile Include="Core\Coverlet\Console\CoverletConsoleDotnetToolsGlobalExecutor.cs" />
7374
<Compile Include="Core\Coverlet\Console\CoverletConsoleCustomPathExecutor.cs" />
7475
<Compile Include="Core\Coverlet\Console\CoverletConsoleDotnetToolsLocalExecutor.cs" />
76+
<Compile Include="Core\ICoverageUtilManager.cs" />
7577
<Compile Include="Core\MsTestPlatform\IMsTestPlatformUtil.cs" />
7678
<Compile Include="Core\Utilities\ToolZip\IToolFolder.cs" />
7779
<Compile Include="Core\Utilities\ToolZip\IToolZipProvider.cs" />
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using AutoMoq;
7+
using FineCodeCoverage.Engine;
8+
using FineCodeCoverage.Engine.Coverlet;
9+
using FineCodeCoverage.Engine.Model;
10+
using FineCodeCoverage.Engine.OpenCover;
11+
using Moq;
12+
using NUnit.Framework;
13+
14+
namespace FineCodeCoverageTests
15+
{
16+
class CoverageUtilManager_Tests
17+
{
18+
private AutoMoqer mocker;
19+
[SetUp]
20+
public void SetUp()
21+
{
22+
mocker = new AutoMoqer();
23+
}
24+
25+
[Test]
26+
public void Initialize_Should_Initialize_The_Coverage_Utils()
27+
{
28+
var coverageUtilManager = mocker.Create<CoverageUtilManager>();
29+
coverageUtilManager.Initialize("AppDataFolder");
30+
mocker.Verify<ICoverletUtil>(coverletUtil => coverletUtil.Initialize("AppDataFolder"));
31+
mocker.Verify<IOpenCoverUtil>(coverletUtil => coverletUtil.Initialize("AppDataFolder"));
32+
}
33+
34+
[TestCase(true, true)]
35+
[TestCase(true, false)]
36+
[TestCase(false, true)]
37+
[TestCase(false, false)]
38+
public void Should_Run_The_Appropriate_Cover_Tool_Based_On_IsDotNetSdkStyle(bool isDotNetSdkStyle, bool throwError)
39+
{
40+
var mockProject = new Mock<ICoverageProject>();
41+
mockProject.Setup(cp => cp.IsDotNetSdkStyle()).Returns(isDotNetSdkStyle);
42+
var mockedProject = mockProject.Object;
43+
44+
var coverageUtilManager = mocker.Create<CoverageUtilManager>();
45+
coverageUtilManager.RunCoverageAsync(mockedProject, throwError);
46+
47+
if (isDotNetSdkStyle)
48+
{
49+
mocker.Verify<ICoverletUtil>(coverletUtil => coverletUtil.RunCoverletAsync(mockedProject, throwError));
50+
}
51+
else
52+
{
53+
mocker.Verify<IOpenCoverUtil>(openCoverUtil => openCoverUtil.RunOpenCoverAsync(mockedProject, throwError));
54+
}
55+
}
56+
}
57+
}

FineCodeCoverageTests/FCCEngine_Tests.cs

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88
using FineCodeCoverage.Core.Utilities;
99
using FineCodeCoverage.Engine;
1010
using FineCodeCoverage.Engine.Cobertura;
11-
using FineCodeCoverage.Engine.Coverlet;
1211
using FineCodeCoverage.Engine.Model;
1312
using FineCodeCoverage.Engine.MsTestPlatform;
14-
using FineCodeCoverage.Engine.OpenCover;
1513
using FineCodeCoverage.Engine.ReportGenerator;
1614
using FineCodeCoverage.Impl;
1715
using Moq;
@@ -54,17 +52,15 @@ public void Should_Initialize_AppFolder_Then_Utils()
5452
mockAppDataFolder.Setup(appDataFolder => appDataFolder.Initialize()).Callback(() => callOrder.Add(1));
5553
mockAppDataFolder.Setup(appDataFolder => appDataFolder.DirectoryPath).Returns(appDataFolderPath);
5654

57-
var coverletMock = mocker.GetMock<ICoverletUtil>().Setup(coverlet => coverlet.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(2));
55+
var reportGeneratorMock = mocker.GetMock<IReportGeneratorUtil>().Setup(reportGenerator => reportGenerator.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(2));
5856

59-
var reportGeneratorMock = mocker.GetMock<IReportGeneratorUtil>().Setup(reportGenerator => reportGenerator.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(3));
57+
var msTestPlatformMock = mocker.GetMock<IMsTestPlatformUtil>().Setup(msTestPlatform => msTestPlatform.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(3));
6058

61-
var msTestPlatformMock = mocker.GetMock<IMsTestPlatformUtil>().Setup(msTestPlatform => msTestPlatform.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(4));
62-
63-
var openCoverMock = mocker.GetMock<IOpenCoverUtil>().Setup(openCover => openCover.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(5));
59+
var openCoverMock = mocker.GetMock<ICoverageUtilManager>().Setup(openCover => openCover.Initialize(appDataFolderPath)).Callback(() => callOrder.Add(4));
6460

6561
fccEngine.Initialize(null);
6662

67-
Assert.AreEqual(5, callOrder.Count);
63+
Assert.AreEqual(4, callOrder.Count);
6864
Assert.AreEqual(1, callOrder[0]);
6965
}
7066

@@ -232,29 +228,20 @@ public async Task Should_Run_The_CoverTool_Step()
232228
mockCoverageProject.Verify(p => p.StepAsync("Run Coverage Tool", It.IsAny<Func<ICoverageProject, Task>>()));
233229
}
234230

235-
[TestCase(true)]
236-
[TestCase(false)]
237-
public async Task Should_Run_The_Appropriate_Cover_Tool_Based_On_IsDotNetSdkStyle(bool isDotNetSdkStyle)
231+
[Test]
232+
public async Task Should_Run_Coverage_ThrowingErrors_But_Safely_With_StepAsync()
238233
{
239-
Task waitForCoverage = null;
240234
ICoverageProject coverageProject = null;
241235
await ReloadSuitableCoverageProject(mockCoverageProject => {
242236
coverageProject = mockCoverageProject.Object;
243-
mockCoverageProject.Setup(p => p.IsDotNetSdkStyle()).Returns(isDotNetSdkStyle);
244237
mockCoverageProject.Setup(p => p.StepAsync("Run Coverage Tool", It.IsAny<Func<ICoverageProject, Task>>())).Callback<string,Func<ICoverageProject, Task>>((_,runCoverTool) =>
245238
{
246-
waitForCoverage = runCoverTool(coverageProject);
239+
runCoverTool(coverageProject);
247240
});
248241
});
249-
if (isDotNetSdkStyle)
250-
{
251-
mocker.Verify<ICoverletUtil>(coverlet => coverlet.RunCoverletAsync(coverageProject, true));
252-
}
253-
else
254-
{
255-
mocker.Verify<IOpenCoverUtil>(openCover => openCover.RunOpenCoverAsync(coverageProject, true));
256-
}
257-
242+
243+
mocker.Verify<ICoverageUtilManager>(coverageUtilManager => coverageUtilManager.RunCoverageAsync(coverageProject, true));
244+
258245
}
259246

260247
[Test] // Not testing dark mode as ui will change

FineCodeCoverageTests/FineCodeCoverageTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
</Reference>
8787
</ItemGroup>
8888
<ItemGroup>
89+
<Compile Include="CoverageUtilManager_Tests.cs" />
8990
<Compile Include="ToolFolder_Tests.cs" />
9091
<Compile Include="ToolZipProvider_Tests.cs" />
9192
<Compile Include="CoverletDataCollectorGeneratedCobertura_Tests.cs" />

0 commit comments

Comments
 (0)