Skip to content

Commit 3c89938

Browse files
committed
more tests
1 parent 5213eb4 commit 3c89938

File tree

4 files changed

+113
-24
lines changed

4 files changed

+113
-24
lines changed

FineCodeCoverageTests/MsCodeCoverage/MsCodeCoverageRunSettingsService_Collect_Tests.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
using System.Threading.Tasks;
1313
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
1414
using FineCodeCoverageTests.Test_helpers;
15+
using FineCodeCoverage.Engine.ReportGenerator;
1516

1617
namespace FineCodeCoverageTests.MsCodeCoverage
1718
{
1819
internal class MsCodeCoverageRunSettingsService_Collect_Tests
1920
{
20-
// todo if logic stays the same - log when no cobertura / clean up
21+
private AutoMoqer autoMocker;
2122

2223
[Test]
2324
public async Task Should_FCCEngine_RunAndProcessReport_With_CoberturaResults()
@@ -39,11 +40,27 @@ public async Task Should_Not_Throw_If_No_Results()
3940
await RunAndProcessReportAsync(null, Array.Empty<string>());
4041
}
4142

43+
[Test]
44+
public async Task Should_Combined_Log_When_No_Cobertura_Files()
45+
{
46+
await RunAndProcessReportAsync(null, Array.Empty<string>());
47+
autoMocker.Verify<ILogger>(logger => logger.Log("No cobertura files for ms code coverage."));
48+
autoMocker.Verify<IReportGeneratorUtil>(
49+
reportGenerator => reportGenerator.LogCoverageProcess("No cobertura files for ms code coverage.")
50+
);
51+
52+
}
53+
4254
private async Task RunAndProcessReportAsync(IEnumerable<Uri> resultsUris,string[] expectedCoberturaFiles)
4355
{
44-
var autoMocker = new AutoMoqer();
56+
autoMocker = new AutoMoqer();
4557
var mockToolFolder = autoMocker.GetMock<IToolFolder>();
46-
mockToolFolder.Setup(tf => tf.EnsureUnzipped(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ZipDetails>(), It.IsAny<CancellationToken>())).Returns("ZipDestination");
58+
mockToolFolder.Setup(tf => tf.EnsureUnzipped(
59+
It.IsAny<string>(),
60+
It.IsAny<string>(),
61+
It.IsAny<ZipDetails>(),
62+
It.IsAny<CancellationToken>()
63+
)).Returns("ZipDestination");
4764

4865
var msCodeCoverageRunSettingsService = autoMocker.Create<MsCodeCoverageRunSettingsService>();
4966
msCodeCoverageRunSettingsService.threadHelper = new TestThreadHelper();
@@ -55,6 +72,7 @@ private async Task RunAndProcessReportAsync(IEnumerable<Uri> resultsUris,string[
5572
mockOperation.Setup(operation => operation.GetRunSettingsDataCollectorResultUri(new Uri(RunSettingsHelper.MsDataCollectorUri))).Returns(resultsUris);
5673

5774
await msCodeCoverageRunSettingsService.CollectAsync(mockOperation.Object, new Mock<ITestOperation>().Object);
75+
5876
mockFccEngine.Verify(engine => engine.RunAndProcessReport(
5977
It.Is<string[]>(coberturaFiles => !expectedCoberturaFiles.Except(coberturaFiles).Any() && !coberturaFiles.Except(expectedCoberturaFiles).Any()), It.IsAny<Action>()
6078
)

FineCodeCoverageTests/MsCodeCoverage/MsCodeCoverageRunSettingsService_IsCollecting_Tests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,14 @@ public async Task Should_Have_Status_Error_When_Exception_From_UserRunSettingsSe
124124
Assert.AreEqual(MsCodeCoverageCollectionStatus.Error, status);
125125
}
126126

127+
[Test]
128+
public async Task Should_Report_End_Of_CoverageRun_If_Error()
129+
{
130+
var exception = new Exception("Msg");
131+
await Throw_Exception_From_UserRunSettingsService_Analyse(exception);
132+
autoMocker.Verify<IReportGeneratorUtil>(reportGeneratorUtil => reportGeneratorUtil.EndOfCoverageRun());
133+
}
134+
127135
private Task<MsCodeCoverageCollectionStatus> Throw_Exception_From_UserRunSettingsService_Analyse(Exception exception)
128136
{
129137
SetupIUserRunSettingsServiceAnalyseAny().Throws(exception);

FineCodeCoverageTests/TestContainerDiscovery_Tests.cs

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using FineCodeCoverage.Engine;
88
using FineCodeCoverage.Engine.Model;
99
using FineCodeCoverage.Engine.MsTestPlatform;
10+
using FineCodeCoverage.Engine.MsTestPlatform.CodeCoverage;
1011
using FineCodeCoverage.Impl;
1112
using FineCodeCoverage.Options;
1213
using Microsoft.VisualStudio.TestWindow.Extensibility;
@@ -18,11 +19,14 @@ namespace Test
1819
public class TestContainerDiscovery_Tests
1920
{
2021
private AutoMoqer mocker;
22+
private TestContainerDiscoverer testContainerDiscoverer;
23+
2124
private void RaiseOperationStateChanged(TestOperationStates testOperationStates,IOperation operation = null)
2225
{
2326
var args = operation == null ? new OperationStateChangedEventArgs(testOperationStates) : new OperationStateChangedEventArgs(operation, (RequestStates)testOperationStates);
2427
mocker.GetMock<IOperationState>().Raise(s => s.StateChanged += null, args);
2528
}
29+
2630
private void RaiseTestExecutionStarting(IOperation operation = null)
2731
{
2832
RaiseOperationStateChanged(TestOperationStates.TestExecutionStarting,operation);
@@ -42,6 +46,7 @@ private void AssertShouldNotReloadCoverage()
4246
{
4347
mocker.Verify<IFCCEngine>(engine => engine.ReloadCoverage(It.IsAny<Func<Task<List<ICoverageProject>>>>()), Times.Never());
4448
}
49+
4550
private void SetUpOptions(Action<Mock<IAppOptions>> setupAppOptions)
4651
{
4752
var mockAppOptions = new Mock<IAppOptions>();
@@ -66,7 +71,7 @@ public void SetUp()
6671
mocker = new AutoMoqer();
6772
var mockDisposeAwareTaskRunner = mocker.GetMock<IDisposeAwareTaskRunner>();
6873
mockDisposeAwareTaskRunner.Setup(runner => runner.RunAsync(It.IsAny<Func<Task>>())).Callback<Func<Task>>(async taskProvider => await taskProvider());
69-
var testContainerDiscoverer = mocker.Create<TestContainerDiscoverer>();
74+
testContainerDiscoverer = mocker.Create<TestContainerDiscoverer>();
7075
testContainerDiscoverer.RunAsync = (taskProvider) =>
7176
{
7277
taskProvider().Wait();
@@ -116,6 +121,36 @@ public void Should_StopCoverage_When_TestExecutionStarting()
116121
mocker.Verify<IFCCEngine>(engine => engine.StopCoverage());
117122
}
118123

124+
[Test]
125+
public void Should_Stop_Ms_CodeCoverage_When_TestExecutionStarting_And_Ms_Code_Coverage_Collecting()
126+
{
127+
var mockMsCodeCoverageRunSettingsService = SetMsCodeCoverageCollecting();
128+
mockMsCodeCoverageRunSettingsService.Verify(
129+
msCodeCoverageRunSettingsService => msCodeCoverageRunSettingsService.StopCoverage(),
130+
Times.Never
131+
);
132+
133+
RaiseTestExecutionStarting();
134+
135+
mockMsCodeCoverageRunSettingsService.Verify(
136+
msCodeCoverageRunSettingsService => msCodeCoverageRunSettingsService.StopCoverage()
137+
);
138+
}
139+
140+
private Mock<IMsCodeCoverageRunSettingsService> SetMsCodeCoverageCollecting()
141+
{
142+
var mockMsCodeCoverageRunSettingsService = mocker.GetMock<IMsCodeCoverageRunSettingsService>();
143+
mockMsCodeCoverageRunSettingsService.Setup(
144+
msCodeCoverageRunSettingsService =>
145+
msCodeCoverageRunSettingsService.IsCollectingAsync(It.IsAny<ITestOperation>())
146+
).ReturnsAsync(MsCodeCoverageCollectionStatus.Collecting);
147+
148+
SetUpOptions(mockOptions => mockOptions.Setup(options => options.Enabled).Returns(true));
149+
RaiseTestExecutionStarting();
150+
return mockMsCodeCoverageRunSettingsService;
151+
}
152+
153+
119154
[Test]
120155
public void Should_Not_ReloadCoverage_When_TestExecutionStarting_And_Settings_RunInParallel_Is_False()
121156
{
@@ -157,6 +192,23 @@ public void Should_ReloadCoverage_When_TestExecutionFinished_If_RunInParallel_An
157192
mocker.Verify<IFCCEngine>(engine => engine.ReloadCoverage(It.IsAny<Func<Task<List<ICoverageProject>>>>()));
158193
}
159194

195+
[Test]
196+
public void Should_Collect_Ms_Code_Coverage_When_TestExecutionFinished_And_Ms_Code_Coverage_Collecting()
197+
{
198+
SetMsCodeCoverageCollecting();
199+
200+
var operation = new Mock<IOperation>().Object;
201+
var testOperation = new Mock<ITestOperation>().Object;
202+
var mockTestOperationFactory = mocker.GetMock<ITestOperationFactory>();
203+
mockTestOperationFactory.Setup(testOperationFactory => testOperationFactory.Create(operation)).Returns(testOperation);
204+
205+
RaiseTestExecutionFinished(operation);
206+
mocker.Verify<IMsCodeCoverageRunSettingsService>(
207+
msCodeCoverageRunSettingsService =>
208+
msCodeCoverageRunSettingsService.CollectAsync(operation, testOperation)
209+
);
210+
}
211+
160212
[Test]
161213
public async Task Should_ReloadCoverage_When_TestExecutionStarting_And_Settings_RunInParallel_Is_True()
162214
{

SharedProject/Core/MsTestPlatform/CodeCoverage/MsCodeCoverageRunSettingsService.cs

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -123,33 +123,43 @@ public async Task<MsCodeCoverageCollectionStatus> IsCollectingAsync(ITestOperati
123123
await InitializeIsCollectingAsync(testOperation);
124124

125125
IUserRunSettingsAnalysisResult analysisResult = await TryAnalyseUserRunSettingsAsync();
126-
if (analysisResult == null) return MsCodeCoverageCollectionStatus.Error;
127-
128-
var coverageProjectsForShim = analysisResult.ProjectsWithFCCMsTestAdapter;
129-
130-
if (analysisResult.Suitable)
126+
if (analysisResult != null)
131127
{
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
128+
var coverageProjectsForShim = analysisResult.ProjectsWithFCCMsTestAdapter;
129+
130+
if (analysisResult.Suitable)
143131
{
144-
await CollectingUserRunSettingsAsync();
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+
}
145146
}
146-
}
147-
148-
CopyShimWhenCollecting(coverageProjectsForShim);
149147

148+
CopyShimWhenCollecting(coverageProjectsForShim);
149+
}
150+
151+
ReportEndOfCoverageRunIfError();
150152
return collectionStatus;
151153
}
152154

155+
private void ReportEndOfCoverageRunIfError()
156+
{
157+
if (collectionStatus == MsCodeCoverageCollectionStatus.Error)
158+
{
159+
reportGeneratorUtil.EndOfCoverageRun();
160+
}
161+
}
162+
153163
private async Task InitializeIsCollectingAsync(ITestOperation testOperation)
154164
{
155165
collectionStatus = MsCodeCoverageCollectionStatus.NotCollecting;
@@ -171,6 +181,7 @@ private async Task<IUserRunSettingsAnalysisResult> TryAnalyseUserRunSettingsAsyn
171181
}
172182
catch (Exception exc)
173183
{
184+
collectionStatus = MsCodeCoverageCollectionStatus.Error;
174185
await CombinedLogExceptionAsync(exc, "Exception analysing runsettings files");
175186
}
176187
return analysisResult;

0 commit comments

Comments
 (0)