Skip to content

Commit 962f204

Browse files
committed
remaining tests for cleanup
1 parent 8a34e1d commit 962f204

File tree

9 files changed

+139
-579
lines changed

9 files changed

+139
-579
lines changed

FineCodeCoverageTests/Events/EventAggregator.cs

Lines changed: 0 additions & 565 deletions
This file was deleted.

FineCodeCoverageTests/MsCodeCoverage/MsCodeCoverageRunSettingsService_Collect_Tests.cs

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,50 @@
1414
using FineCodeCoverageTests.Test_helpers;
1515
using FineCodeCoverage.Engine.ReportGenerator;
1616
using FineCodeCoverage.Engine.Model;
17+
using FineCodeCoverage.Options;
1718

1819
namespace FineCodeCoverageTests.MsCodeCoverage
1920
{
21+
internal class MsCodeCoverageRunSettingsService_Test_Execution_Not_Finished_Tests
22+
{
23+
[Test]
24+
public async Task Should_Clean_Up_Templated_Coverage_Projects()
25+
{
26+
var autoMocker = new AutoMoqer();
27+
var msCodeCoverageRunSettingsService = autoMocker.Create<MsCodeCoverageRunSettingsService>();
28+
var mockAppOptionsProvider = autoMocker.GetMock<IAppOptionsProvider>();
29+
mockAppOptionsProvider.Setup(appOptionsProvider => appOptionsProvider.Get()).Returns(new Mock<IAppOptions>().Object);
30+
31+
// is collecting
32+
var mockTestOperation = new Mock<ITestOperation>();
33+
var templateCoverageProject = CreateCoverageProject(null);
34+
var coverageProjects = new List<ICoverageProject>
35+
{
36+
templateCoverageProject,
37+
CreateCoverageProject(".runsettings")
38+
};
39+
mockTestOperation.Setup(testOperation => testOperation.GetCoverageProjectsAsync()).ReturnsAsync(coverageProjects);
40+
await msCodeCoverageRunSettingsService.IsCollectingAsync(mockTestOperation.Object);
41+
42+
await msCodeCoverageRunSettingsService.TestExecutionNotFinishedAsync();
43+
44+
autoMocker.Verify<ITemplatedRunSettingsService>(
45+
templatedRunSettingsService => templatedRunSettingsService.CleanUpAsync(new List<ICoverageProject> { templateCoverageProject })
46+
);
47+
}
48+
49+
private ICoverageProject CreateCoverageProject(string runSettingsFile)
50+
{
51+
var mockCoverageProject = new Mock<ICoverageProject>();
52+
mockCoverageProject.Setup(coverageProject => coverageProject.RunSettingsFile).Returns(runSettingsFile);
53+
return mockCoverageProject.Object;
54+
}
55+
}
56+
2057
internal class MsCodeCoverageRunSettingsService_Collect_Tests
2158
{
2259
private AutoMoqer autoMocker;
60+
private ICoverageProject templateCoverageProject;
2361

2462
[Test]
2563
public async Task Should_FCCEngine_RunAndProcessReport_With_CoberturaResults()
@@ -52,6 +90,15 @@ public async Task Should_Combined_Log_When_No_Cobertura_Files()
5290

5391
}
5492

93+
[Test]
94+
public async Task Should_Clean_Up_Template_Coverage_Projects_From_IsCollecting()
95+
{
96+
await RunAndProcessReportAsync(null, Array.Empty<string>());
97+
autoMocker.Verify<ITemplatedRunSettingsService>(
98+
templatedRunSettingsService => templatedRunSettingsService.CleanUpAsync(new List<ICoverageProject> { templateCoverageProject })
99+
);
100+
}
101+
55102
private async Task RunAndProcessReportAsync(IEnumerable<Uri> resultsUris,string[] expectedCoberturaFiles)
56103
{
57104
autoMocker = new AutoMoqer();
@@ -71,15 +118,34 @@ private async Task RunAndProcessReportAsync(IEnumerable<Uri> resultsUris,string[
71118

72119
var mockOperation = new Mock<IOperation>();
73120
mockOperation.Setup(operation => operation.GetRunSettingsDataCollectorResultUri(new Uri(RunSettingsHelper.MsDataCollectorUri))).Returns(resultsUris);
121+
74122

123+
// IsCollecting
75124
var mockTestOperation = new Mock<ITestOperation>();
76-
mockTestOperation.Setup(testOperation => testOperation.GetCoverageProjectsAsync()).ReturnsAsync(new List<ICoverageProject>());
77-
await msCodeCoverageRunSettingsService.CollectAsync(mockOperation.Object, mockTestOperation.Object);
125+
templateCoverageProject = CreateCoverageProject(null);
126+
var coverageProjects = new List<ICoverageProject>
127+
{
128+
templateCoverageProject,
129+
CreateCoverageProject(".runsettings")
130+
};
131+
mockTestOperation.Setup(testOperation => testOperation.GetCoverageProjectsAsync()).ReturnsAsync(coverageProjects);
132+
var mockAppOptionsProvider = autoMocker.GetMock<IAppOptionsProvider>();
133+
mockAppOptionsProvider.Setup(appOptionsProvider => appOptionsProvider.Get()).Returns(new Mock<IAppOptions>().Object);
134+
await msCodeCoverageRunSettingsService.IsCollectingAsync(mockTestOperation.Object);
135+
136+
await msCodeCoverageRunSettingsService.CollectAsync(mockOperation.Object);
78137

79138
mockFccEngine.Verify(engine => engine.RunAndProcessReport(
80139
It.Is<string[]>(coberturaFiles => !expectedCoberturaFiles.Except(coberturaFiles).Any() && !coberturaFiles.Except(expectedCoberturaFiles).Any()), It.IsAny<Action>()
81140
)
82141
);
83142
}
143+
144+
private ICoverageProject CreateCoverageProject(string runSettingsFile)
145+
{
146+
var mockCoverageProject = new Mock<ICoverageProject>();
147+
mockCoverageProject.Setup(coverageProject => coverageProject.RunSettingsFile).Returns(runSettingsFile);
148+
return mockCoverageProject.Object;
149+
}
84150
}
85151
}

FineCodeCoverageTests/MsCodeCoverage/MsCodeCoverageRunSettingsService_IsCollecting_Tests.cs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void SetupSut()
8686

8787
[TestCase(true)]
8888
[TestCase(false)]
89-
public async Task Will_Try_Analyse_Projects_With_Runsettings(bool useMsCodeCoverageOption)
89+
public async Task Should_Try_Analyse_Projects_With_Runsettings(bool useMsCodeCoverageOption)
9090
{
9191
SetupAppOptionsProvider(useMsCodeCoverageOption);
9292

@@ -108,6 +108,39 @@ public async Task Will_Try_Analyse_Projects_With_Runsettings(bool useMsCodeCover
108108

109109
}
110110

111+
[Test] // in case shutdown visual studio before normal clean up operation
112+
public async Task Should_CleanUp_Projects_With_RunSettings_First()
113+
{
114+
var coverageProjectWithRunSettings = CreateCoverageProject(".runsettings");
115+
var coverageProjects = new List<ICoverageProject> { coverageProjectWithRunSettings, CreateCoverageProject(null) };
116+
var testOperation = SetUpTestOperation(coverageProjects);
117+
118+
var cleanedUp = false;
119+
var mockUserRunSettingsService = autoMocker.GetMock<IUserRunSettingsService>();
120+
mockUserRunSettingsService.Setup(
121+
userRunSettingsService => userRunSettingsService.Analyse(
122+
It.IsAny<IEnumerable<ICoverageProject>>(),
123+
It.IsAny<bool>(),
124+
It.IsAny<string>()
125+
)
126+
).Callback(() =>
127+
{
128+
Assert.True(cleanedUp);
129+
});
130+
131+
var mockTemplatedRunSettingsService = autoMocker.GetMock<ITemplatedRunSettingsService>();
132+
mockTemplatedRunSettingsService.Setup(
133+
templatedRunSettingsService =>
134+
templatedRunSettingsService.CleanUpAsync(new List<ICoverageProject> { coverageProjectWithRunSettings})
135+
).Callback(() =>
136+
{
137+
cleanedUp = true;
138+
});
139+
await msCodeCoverageRunSettingsService.IsCollectingAsync(testOperation);
140+
141+
mockUserRunSettingsService.VerifyAll();
142+
}
143+
111144
[Test]
112145
public async Task Should_Log_Exception_From_UserRunSettingsService_Analyse()
113146
{

FineCodeCoverageTests/MsCodeCoverage/RunSettingsTemplateReplacementsFactory_Tests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Linq;
88
using FineCodeCoverage.Engine.Model;
99
using System;
10+
using System.Diagnostics.CodeAnalysis;
1011

1112
namespace FineCodeCoverageTests.MsCodeCoverage
1213
{
@@ -576,6 +577,7 @@ private static string ModulePathElement(string value)
576577
}
577578
}
578579

580+
[ExcludeFromCodeCoverage]
579581
internal class TestCoverageProjectOptions : IAppOptions
580582
{
581583
public string[] Exclude => throw new NotImplementedException();

FineCodeCoverageTests/MsCodeCoverage/TemplatedRunSettingsService_Tests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,16 @@ public async Task Should_Return_A_Result_With_No_ExceptionReason_When_No_Excepti
171171

172172
}
173173

174+
[Test]
175+
public async Task Clean_Up_Should_Remove_Generated_Project_RunSettings()
176+
{
177+
var coverageProjects = new List<ICoverageProject> { new Mock<ICoverageProject>().Object};
178+
await templatedRunSettingsService.CleanUpAsync(coverageProjects);
179+
autoMocker.Verify<IProjectRunSettingsGenerator>(
180+
projectRunSettingsGenerator => projectRunSettingsGenerator.RemoveGeneratedProjectSettingsAsync(coverageProjects)
181+
);
182+
}
183+
174184
private Moq.Language.Flow.ISetup<ICustomRunSettingsTemplateProvider, CustomRunSettingsTemplateDetails> SetupICustomRunSettingsTemplateProviderAllIsAny()
175185
{
176186
var mockCustomRunSettingsTemplateProvider = autoMocker.GetMock<ICustomRunSettingsTemplateProvider>();

FineCodeCoverageTests/TestContainerDiscovery_Tests.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using FineCodeCoverage.Core.Utilities;
77
using FineCodeCoverage.Engine;
88
using FineCodeCoverage.Engine.Model;
9-
using FineCodeCoverage.Engine.MsTestPlatform;
109
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
1110
using FineCodeCoverage.Impl;
1211
using FineCodeCoverage.Options;
@@ -16,7 +15,7 @@
1615

1716
namespace Test
1817
{
19-
public class TestContainerDiscovery_Tests
18+
internal class TestContainerDiscovery_Tests
2019
{
2120
private AutoMoqer mocker;
2221
private TestContainerDiscoverer testContainerDiscoverer;
@@ -137,13 +136,29 @@ public void Should_Stop_Ms_CodeCoverage_When_TestExecutionStarting_And_Ms_Code_C
137136
);
138137
}
139138

140-
private Mock<IMsCodeCoverageRunSettingsService> SetMsCodeCoverageCollecting()
139+
[TestCase(MsCodeCoverageCollectionStatus.Collecting,true)]
140+
[TestCase(MsCodeCoverageCollectionStatus.NotCollecting,true)]
141+
[TestCase(MsCodeCoverageCollectionStatus.Error,true)]
142+
[TestCase(MsCodeCoverageCollectionStatus.Collecting, false)]
143+
[TestCase(MsCodeCoverageCollectionStatus.NotCollecting, false)]
144+
[TestCase(MsCodeCoverageCollectionStatus.Error, false)]
145+
public void Should_Notify_MsCodeCoverage_When_Test_Execution_Not_Finished_IfCollectingAsync(MsCodeCoverageCollectionStatus status, bool cancelling)
146+
{
147+
var mockMsCodeCoverageRunSettingsService = SetMsCodeCoverageCollecting(status);
148+
RaiseOperationStateChanged(cancelling ? TestOperationStates.TestExecutionCanceling : TestOperationStates.TestExecutionCancelAndFinished);
149+
var times = status == MsCodeCoverageCollectionStatus.Collecting ? Times.Once() : Times.Never();
150+
mockMsCodeCoverageRunSettingsService.Verify(
151+
msCodeCoverageRunSettingsService => msCodeCoverageRunSettingsService.TestExecutionNotFinishedAsync(), times
152+
);
153+
}
154+
155+
private Mock<IMsCodeCoverageRunSettingsService> SetMsCodeCoverageCollecting(MsCodeCoverageCollectionStatus status = MsCodeCoverageCollectionStatus.Collecting)
141156
{
142157
var mockMsCodeCoverageRunSettingsService = mocker.GetMock<IMsCodeCoverageRunSettingsService>();
143158
mockMsCodeCoverageRunSettingsService.Setup(
144159
msCodeCoverageRunSettingsService =>
145160
msCodeCoverageRunSettingsService.IsCollectingAsync(It.IsAny<ITestOperation>())
146-
).ReturnsAsync(MsCodeCoverageCollectionStatus.Collecting);
161+
).ReturnsAsync(status);
147162

148163
SetUpOptions(mockOptions => mockOptions.Setup(options => options.Enabled).Returns(true));
149164
RaiseTestExecutionStarting();
@@ -205,7 +220,7 @@ public void Should_Collect_Ms_Code_Coverage_When_TestExecutionFinished_And_Ms_Co
205220
RaiseTestExecutionFinished(operation);
206221
mocker.Verify<IMsCodeCoverageRunSettingsService>(
207222
msCodeCoverageRunSettingsService =>
208-
msCodeCoverageRunSettingsService.CollectAsync(operation, testOperation)
223+
msCodeCoverageRunSettingsService.CollectAsync(operation)
209224
);
210225
}
211226

SharedProject/Core/MsTestPlatform/CodeCoverage/IMsCodeCoverageRunSettingsService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ interface IMsCodeCoverageRunSettingsService
99
{
1010
void Initialize(string appDataFolder,IFCCEngine fccEngine, CancellationToken cancellationToken);
1111
Task<MsCodeCoverageCollectionStatus> IsCollectingAsync(ITestOperation testOperation);
12-
Task CollectAsync(IOperation operation, ITestOperation testOperation);
12+
Task CollectAsync(IOperation operation);
1313
void StopCoverage();
1414
Task TestExecutionNotFinishedAsync();
1515
}

SharedProject/Core/MsTestPlatform/CodeCoverage/MsCodeCoverageRunSettingsService.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,9 @@ private bool ShouldAddFCCRunSettings()
278278

279279
#endregion
280280

281-
public async Task CollectAsync(IOperation operation, ITestOperation testOperation)
281+
public async Task CollectAsync(IOperation operation)
282282
{
283-
var coverageProjectsByType = await CoverageProjectsByType.CreateAsync(testOperation);
284-
await templatedRunSettingsService.CleanUpAsync(coverageProjectsByType.RunSettings);
283+
await templatedRunSettingsService.CleanUpAsync(coverageProjectsByType.Templated);
285284
var resultsUris = operation.GetRunSettingsMsDataCollectorResultUri();
286285
var coberturaFiles = new string[0];
287286
if (resultsUris != null)

SharedProject/Impl/TestContainerDiscovery/TestContainerDiscoverer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,14 @@ private async Task TestExecutionFinishedAsync(IOperation operation)
130130

131131
var testOperation = testOperationFactory.Create(operation);
132132

133-
if(!CoverageConditionsMet(testOperation, settings))
133+
if (!CoverageConditionsMet(testOperation, settings))
134134
{
135135
return;
136136
}
137137

138138
if (msCodeCoverageCollectionStatus == MsCodeCoverageCollectionStatus.Collecting)
139139
{
140-
await msCodeCoverageRunSettingsService.CollectAsync(operation, testOperation);
140+
await msCodeCoverageRunSettingsService.CollectAsync(operation);
141141
}
142142
else
143143
{

0 commit comments

Comments
 (0)