1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . IO ;
4
+ using System . Linq ;
4
5
using System . Threading ;
6
+ using System . Threading . Tasks ;
5
7
using AutoMoq ;
6
8
using FineCodeCoverage . Core . Utilities ;
7
9
using FineCodeCoverage . Engine . Coverlet ;
8
10
using FineCodeCoverage . Engine . Model ;
11
+ using FineCodeCoverage . Engine . OpenCover ;
9
12
using FineCodeCoverage . Options ;
10
13
using Moq ;
11
14
using NUnit . Framework ;
12
15
13
16
namespace Test
14
17
{
15
- public class CoverletConsoleUtil_Tests
18
+
19
+ public class CoverletExeArgumentsProvider_Tests
16
20
{
17
- private AutoMoqer mocker ;
18
- private CoverletConsoleUtil coverletConsoleUtil ;
21
+ [ Test ]
22
+ public void Should_Have_ExcludeByAttribute_Setting_For_Each_ExcludeByAttribute ( )
23
+ {
24
+ var mockCoverageProject = SafeMockCoverageProject ( ) ;
25
+ mockCoverageProject . SetupGet ( cp => cp . Settings . ExcludeByAttribute ) . Returns ( new [ ] { "ExcludeByAttribute1" , "ExcludeByAttribute2" } ) ;
19
26
20
- [ SetUp ]
21
- public void SetUp ( )
27
+ var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider ( ) ;
28
+ var coverletSettings = coverletExeArgumentsProvider . GetArguments ( mockCoverageProject . Object ) ;
29
+
30
+ AssertHasSetting ( coverletSettings , "--exclude-by-attribute ExcludeByAttribute1" ) ;
31
+ AssertHasSetting ( coverletSettings , "--exclude-by-attribute ExcludeByAttribute2" ) ;
32
+ }
33
+
34
+ [ Test ] //https://github.com/coverlet-coverage/coverlet/issues/1589
35
+ public void Should_Unqualified_Qualified_ExcludeByAttribute ( )
22
36
{
23
- mocker = new AutoMoqer ( ) ;
24
- coverletConsoleUtil = mocker . Create < CoverletConsoleUtil > ( ) ;
37
+ var mockCoverageProject = SafeMockCoverageProject ( ) ;
38
+ mockCoverageProject . SetupGet ( cp => cp . Settings . ExcludeByAttribute ) . Returns ( new [ ] { "Namespace.ExcludeByAttribute1" } ) ;
39
+
40
+ var coverletExeArgumentsProvider = new CoverletExeArgumentsProvider ( ) ;
41
+ var coverletSettings = coverletExeArgumentsProvider . GetArguments ( mockCoverageProject . Object ) ;
42
+
43
+ AssertHasSetting ( coverletSettings , "--exclude-by-attribute ExcludeByAttribute1" ) ;
25
44
}
26
- [ Test ]
27
- public void Should_Initilize_IFCCCoverletConsoleExeProvider ( )
45
+
46
+ private Mock < ICoverageProject > SafeMockCoverageProject ( )
28
47
{
29
- var ct = CancellationToken . None ;
30
- coverletConsoleUtil . Initialize ( "appDataFolder" , ct ) ;
31
- mocker . Verify < IFCCCoverletConsoleExecutor > ( fccExeProvider => fccExeProvider . Initialize ( "appDataFolder" , ct ) ) ;
48
+ var mockCoverageProject = new Mock < ICoverageProject > ( ) ;
49
+ mockCoverageProject . SetupGet ( coverageProject => coverageProject . IncludedReferencedProjects ) . Returns ( new List < string > ( ) ) ;
50
+ mockCoverageProject . SetupGet ( coverageProject => coverageProject . ExcludedReferencedProjects ) . Returns ( new List < string > ( ) ) ;
51
+ mockCoverageProject . SetupGet ( coverageProject => coverageProject . Settings ) . Returns ( new Mock < IAppOptions > ( ) . Object ) ;
52
+ return mockCoverageProject ;
32
53
}
33
54
55
+ private void AssertHasSetting ( List < string > coverletSettings , string setting )
56
+ {
57
+ Assert . IsTrue ( coverletSettings . Any ( coverletSetting => coverletSetting == setting ) ) ;
58
+ }
59
+
60
+ private void AssertHasEscapedSetting ( List < string > coverletSettings , string setting )
61
+ {
62
+ AssertHasSetting ( coverletSettings , CommandLineArguments . AddQuotes ( setting ) ) ;
63
+ }
64
+ }
65
+
66
+ public class CoverletConsoleExecuteRequestProvider_Tests
67
+ {
34
68
[ TestCase ( 0 ) ]
35
69
[ TestCase ( 1 ) ]
36
70
[ TestCase ( 2 ) ]
@@ -50,7 +84,7 @@ public void Should_GetCoverletExePath_From_First_That_Returns_Non_Null(int provi
50
84
51
85
ExecuteRequest GetExecuteRequest ( int order )
52
86
{
53
- if ( order != providingExeProvider )
87
+ if ( order != providingExeProvider )
54
88
{
55
89
return null ;
56
90
}
@@ -74,13 +108,13 @@ ExecuteRequest GetExecuteRequest(int order)
74
108
{
75
109
var order = i ;
76
110
var mockExeProvider = mockExecutors [ i ] ;
77
- mockExeProvider . Setup ( p => p . GetRequest ( coverageProject , coverletSettings ) ) . Returns ( GetExecuteRequest ( i ) ) . Callback < ICoverageProject , string > ( ( _ , __ ) =>
111
+ mockExeProvider . Setup ( p => p . GetRequest ( coverageProject , coverletSettings ) ) . Returns ( GetExecuteRequest ( i ) ) . Callback < ICoverageProject , string > ( ( _ , __ ) =>
78
112
{
79
113
callOrder . Add ( order ) ;
80
114
} ) ;
81
115
}
82
116
83
- var coverletConsoleUtil = new CoverletConsoleUtil ( null , null , mockGlobalExecutor . Object , mockCustomPathExecutor . Object , mockLocalExecutor . Object , mockFCCCoverletConsoleExecutor . Object ) ;
117
+ var coverletConsoleUtil = new CoverletConsoleExecuteRequestProvider ( mockGlobalExecutor . Object , mockCustomPathExecutor . Object , mockLocalExecutor . Object , mockFCCCoverletConsoleExecutor . Object ) ;
84
118
85
119
var executeRequest = coverletConsoleUtil . GetExecuteRequest ( coverageProject , coverletSettings ) ;
86
120
@@ -94,6 +128,123 @@ ExecuteRequest GetExecuteRequest(int order)
94
128
}
95
129
96
130
}
131
+ }
132
+
133
+ public class CoverletConsoleUtil_Tests
134
+ {
135
+ private AutoMoqer mocker ;
136
+ private CoverletConsoleUtil coverletConsoleUtil ;
137
+ private bool executed ;
138
+ private readonly List < string > coverletSettings = new List < string > { "setting1" , "setting2" } ;
139
+ private readonly ExecuteResponse successfulExecuteResponse = new ExecuteResponse { ExitCode = 3 , Output = "Successful output" } ;
140
+
141
+ [ SetUp ]
142
+ public void SetUp ( )
143
+ {
144
+ executed = false ;
145
+ mocker = new AutoMoqer ( ) ;
146
+ coverletConsoleUtil = mocker . Create < CoverletConsoleUtil > ( ) ;
147
+ }
148
+ [ Test ]
149
+ public void Should_Initilize_IFCCCoverletConsoleExeProvider ( )
150
+ {
151
+ var ct = CancellationToken . None ;
152
+ coverletConsoleUtil . Initialize ( "appDataFolder" , ct ) ;
153
+ mocker . Verify < IFCCCoverletConsoleExecutor > ( fccExeProvider => fccExeProvider . Initialize ( "appDataFolder" , ct ) ) ;
154
+ }
155
+
156
+ [ Test ]
157
+ public async Task Should_Execute_The_Request_From_The_Execute_Request_Provider_With_Space_Delimited_Settings ( )
158
+ {
159
+ await RunSuccessfullyAsync ( ) ;
160
+
161
+ mocker . GetMock < IProcessUtil > ( ) . Verify ( ) ;
162
+ }
163
+
164
+ [ Test ]
165
+ public async Task Should_Log_Settings_Before_Executing ( )
166
+ {
167
+ var mockLogger = mocker . GetMock < ILogger > ( ) ;
168
+ mockLogger . Setup ( logger => logger . Log ( It . IsAny < IEnumerable < string > > ( ) ) ) . Callback < IEnumerable < string > > ( messages =>
169
+ {
170
+ var msgList = messages as List < string > ;
171
+ Assert . Multiple ( ( ) =>
172
+ {
173
+ Assert . That ( msgList [ 0 ] , Is . EqualTo ( "Coverlet Run (TheProjectName) - Arguments" ) ) ;
174
+ Assert . That ( msgList . Skip ( 1 ) , Is . EqualTo ( coverletSettings ) ) ;
175
+ Assert . That ( executed , Is . False ) ;
176
+ } ) ;
177
+ } ) ;
178
+
179
+ await RunSuccessfullyAsync ( ) ;
180
+
181
+ mockLogger . Verify ( ) ;
182
+ }
183
+
184
+ [ Test ]
185
+ public void Should_Throw_With_ExecuteResponse_Output_When_ExitCode_Is_Greater_Than_3 ( )
186
+ {
187
+ var failureExecuteResponse = new ExecuteResponse { ExitCode = 4 , Output = "failure message" } ;
188
+ var exception = Assert . ThrowsAsync < Exception > ( async ( ) => await RunAsync ( failureExecuteResponse ) ) ;
189
+
190
+ Assert . That ( exception . Message , Is . EqualTo ( "Error. Exit code: 4" ) ) ;
191
+ }
192
+
193
+ [ Test ]
194
+ public void Should_Log_With_ExecuteResponse_ExitCode_And_Output_When_ExitCode_Is_Greater_Than_3 ( )
195
+ {
196
+ var failureExecuteResponse = new ExecuteResponse { ExitCode = 4 , Output = "failure message" } ;
197
+
198
+ Assert . ThrowsAsync < Exception > ( ( ) => RunAsync ( failureExecuteResponse ) ) ;
199
+
200
+ var mockLogger = mocker . GetMock < ILogger > ( ) ;
201
+ mockLogger . Verify ( logger => logger . Log ( "Coverlet Run (TheProjectName) Error. Exit code: 4" , "failure message" ) ) ;
202
+ }
203
+
204
+ [ Test ]
205
+ public async Task Should_Log_The_ExecuteResponse_Output_On_Success ( )
206
+ {
207
+ var mockLogger = mocker . GetMock < ILogger > ( ) ;
208
+ mockLogger . Setup ( logger => logger . Log ( It . IsAny < string [ ] > ( ) ) ) . Callback < string [ ] > ( messages =>
209
+ {
210
+ Assert . Multiple ( ( ) =>
211
+ {
212
+ Assert . That ( messages , Is . EqualTo ( new string [ ] { "Coverlet Run (TheProjectName) - Output" , successfulExecuteResponse . Output } ) ) ;
213
+ Assert . That ( executed , Is . True ) ;
214
+ } ) ;
215
+
216
+ } ) ;
217
+
218
+ await RunSuccessfullyAsync ( ) ;
219
+
220
+ mockLogger . Verify ( ) ;
221
+ }
222
+
223
+ private async Task RunSuccessfullyAsync ( )
224
+ {
225
+ await RunAsync ( successfulExecuteResponse ) ;
226
+ }
227
+
228
+ private async Task RunAsync ( ExecuteResponse executeResponse )
229
+ {
230
+ var mockCoverageProject = new Mock < ICoverageProject > ( ) ;
231
+ mockCoverageProject . SetupGet ( cp => cp . ProjectName ) . Returns ( "TheProjectName" ) ;
232
+ var coverageProject = mockCoverageProject . Object ;
233
+ var requestSettings = string . Join ( " " , coverletSettings ) ;
234
+ var executeRequest = new ExecuteRequest { FilePath = "TheFilePath" , Arguments = "TheArguments" } ;
235
+ var cancellationToken = CancellationToken . None ;
236
+
237
+ mocker . Setup < ICoverletExeArgumentsProvider , List < string > > ( coverletExeArgumentsProvider => coverletExeArgumentsProvider . GetArguments ( coverageProject ) ) . Returns ( coverletSettings ) ;
238
+ mocker . Setup < ICoverletConsoleExecuteRequestProvider , ExecuteRequest > (
239
+ coverletConsoleExecuteRequestProvider => coverletConsoleExecuteRequestProvider . GetExecuteRequest ( coverageProject , requestSettings )
240
+ ) . Returns ( executeRequest ) ;
241
+ var mockProcessUtil = mocker . GetMock < IProcessUtil > ( ) ;
242
+ mockProcessUtil . Setup ( processUtil => processUtil . ExecuteAsync ( executeRequest , cancellationToken ) )
243
+ . Callback ( ( ) => executed = true )
244
+ . ReturnsAsync ( executeResponse ) ;
245
+
246
+ await coverletConsoleUtil . RunAsync ( coverageProject , cancellationToken ) ;
247
+ }
97
248
98
249
}
99
250
0 commit comments