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 ;
53
+ }
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 ) ) ;
32
63
}
64
+ }
33
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,108 @@ 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 } ;
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
+ var logged = false ;
169
+ mockLogger . Setup ( logger => logger . Log ( It . IsAny < IEnumerable < string > > ( ) ) ) . Callback < IEnumerable < string > > ( messages =>
170
+ {
171
+ if ( ! logged )
172
+ {
173
+ logged = true ;
174
+
175
+ var msgList = messages as List < string > ;
176
+ Assert . Multiple ( ( ) =>
177
+ {
178
+ Assert . That ( msgList [ 0 ] , Is . EqualTo ( "Coverlet Run (TheProjectName) - Arguments" ) ) ;
179
+ Assert . That ( msgList . Skip ( 1 ) , Is . EquivalentTo ( coverletSettings ) ) ;
180
+ Assert . That ( executed , Is . False ) ;
181
+ } ) ;
182
+ }
183
+ } ) ;
184
+
185
+ await RunSuccessfullyAsync ( ) ;
186
+
187
+ mockLogger . Verify ( ) ;
188
+ }
189
+
190
+ [ Test ]
191
+ public void Should_Throw_With_ExecuteResponse_Output_When_ExitCode_Is_Greater_Than_3 ( )
192
+ {
193
+ var failureExecuteResponse = new ExecuteResponse { ExitCode = 4 , Output = "failure message" } ;
194
+ Assert . ThrowsAsync < Exception > ( ( ) => RunAsync ( failureExecuteResponse ) , "failure message" ) ;
195
+ }
196
+
197
+ [ Test ]
198
+ public void Should_Log_With_ExecuteResponse_Output_When_ExitCode_Is_Greater_Than_3 ( )
199
+ {
200
+ var failureExecuteResponse = new ExecuteResponse { ExitCode = 4 , Output = "failure message" } ;
201
+
202
+
203
+ Assert . ThrowsAsync < Exception > ( ( ) => RunAsync ( failureExecuteResponse ) , "failure message" ) ;
204
+
205
+ var mockLogger = mocker . GetMock < ILogger > ( ) ;
206
+ mockLogger . Verify ( logger => logger . Log ( "Coverlet Run (TheProjectName) Error. Exit code: 4" , "failure message" ) ) ;
207
+ }
208
+ private async Task RunSuccessfullyAsync ( )
209
+ {
210
+ await RunAsync ( successfulExecuteResponse ) ;
211
+ }
212
+
213
+ private async Task RunAsync ( ExecuteResponse executeResponse )
214
+ {
215
+ var mockCoverageProject = new Mock < ICoverageProject > ( ) ;
216
+ mockCoverageProject . SetupGet ( cp => cp . ProjectName ) . Returns ( "TheProjectName" ) ;
217
+ var coverageProject = mockCoverageProject . Object ;
218
+ var requestSettings = string . Join ( " " , coverletSettings ) ;
219
+ var executeRequest = new ExecuteRequest { FilePath = "TheFilePath" , Arguments = "TheArguments" } ;
220
+ var cancellationToken = CancellationToken . None ;
221
+
222
+ mocker . Setup < ICoverletExeArgumentsProvider , List < string > > ( coverletExeArgumentsProvider => coverletExeArgumentsProvider . GetArguments ( coverageProject ) ) . Returns ( coverletSettings ) ;
223
+ mocker . Setup < ICoverletConsoleExecuteRequestProvider , ExecuteRequest > (
224
+ coverletConsoleExecuteRequestProvider => coverletConsoleExecuteRequestProvider . GetExecuteRequest ( coverageProject , requestSettings )
225
+ ) . Returns ( executeRequest ) ;
226
+ var mockProcessUtil = mocker . GetMock < IProcessUtil > ( ) ;
227
+ mockProcessUtil . Setup ( processUtil => processUtil . ExecuteAsync ( executeRequest , cancellationToken ) )
228
+ . Callback ( ( ) => executed = true )
229
+ . ReturnsAsync ( executeResponse ) ;
230
+
231
+ await coverletConsoleUtil . RunAsync ( coverageProject , cancellationToken ) ;
232
+ }
97
233
98
234
}
99
235
0 commit comments