77using FineCodeCoverage . Engine ;
88using FineCodeCoverage . Engine . Model ;
99using FineCodeCoverage . Engine . MsTestPlatform ;
10+ using FineCodeCoverage . Engine . MsTestPlatform . CodeCoverage ;
1011using FineCodeCoverage . Impl ;
1112using FineCodeCoverage . Options ;
1213using 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 {
0 commit comments