@@ -18,47 +18,78 @@ internal interface ICoverletExeArgumentsProvider
18
18
[ Export ( typeof ( ICoverletExeArgumentsProvider ) ) ]
19
19
internal class CoverletExeArgumentsProvider : ICoverletExeArgumentsProvider
20
20
{
21
- private IEnumerable < string > SanitizeExcludesOrIncludes ( string [ ] excludesOrIncludes )
21
+ private static IEnumerable < string > SanitizeExcludesByAttribute ( string [ ] excludes )
22
22
{
23
- return ( excludesOrIncludes ?? new string [ 0 ] )
23
+ return ( excludes ?? new string [ 0 ] )
24
24
. Where ( x => x != null )
25
25
. Select ( x => x . Trim ( ' ' , '\' ' , '\" ' ) )
26
26
. Where ( x => ! string . IsNullOrWhiteSpace ( x ) ) ;
27
27
}
28
- public List < string > GetArguments ( ICoverageProject project )
29
- {
30
- var coverletSettings = new List < string > ( ) ;
31
-
32
- coverletSettings . Add ( $@ """{ project . TestDllFile } """);
33
-
34
- coverletSettings.Add($@" -- format ""cobertura""");
35
28
36
- foreach (var value in (project.Settings.Exclude ?? new string[0]).Where(x => !string.IsNullOrWhiteSpace(x)))
29
+ private static IEnumerable < string > SantitizeExcludeInclude ( string [ ] excludesOrIncludes )
30
+ {
31
+ return ( excludesOrIncludes ?? new string [ 0 ] ) . Where ( x => ! string . IsNullOrWhiteSpace ( x ) ) . Select ( value =>
37
32
{
38
- coverletSettings.Add($@"--exclude ""{value.Replace("\"", "\\\"").Trim(' ', '\'')}""" ) ;
39
- }
33
+ return value . Replace ( "\" " , "\\ \" " ) . Trim ( ' ' , '\' ' ) ;
34
+ } ) ;
35
+ }
40
36
41
- foreach ( var referencedProjectExcludedFromCodeCoverage in project . ExcludedReferencedProjects . Select ( rp => rp . AssemblyName ) )
37
+ private static void AddExcludesOrIncludes ( List < string > coverletSettings , IEnumerable < string > excludesOrIncludes , bool isInclude )
38
+ {
39
+ foreach ( var value in excludesOrIncludes )
42
40
{
43
- coverletSettings . Add ( $@ "--exclude ""[ { referencedProjectExcludedFromCodeCoverage } ]* """) ;
41
+ coverletSettings . Add ( $@ "--{ ( isInclude ? "include" : " exclude" ) } ""{ value } """);
44
42
}
43
+ }
45
44
46
- foreach ( var value in ( project . Settings . Include ? ? new string [ 0 ] ) . Where( x => ! string . IsNullOrWhiteSpace( x) ) )
45
+ private static IEnumerable<string> AddTestAssemblyIfNecessary(
46
+ IEnumerable<string> projectIncludes,
47
+ IEnumerable<string> includes,
48
+ string projectName)
49
+ {
50
+ var hasIncludes = projectIncludes. Any( ) || includes . Any ( ) ;
51
+ if ( ! hasIncludes )
47
52
{
48
- coverletSettings . Add ( $@ "--include "" { value . Replace ( " \" " , " \\ \" " ) . Trim ( ' ' , ' \' ' ) } """) ;
53
+ return projectIncludes ;
49
54
}
55
+ return projectIncludes . Concat ( new string [ ] { projectName } ) ;
56
+ }
50
57
51
- foreach (var includedReferencedProject in project.IncludedReferencedProjects.Select(rp => rp.AssemblyName))
58
+ private static void AddProjectExcludesOrIncludes ( List < string > coverletSettings , IEnumerable < string > excludesOrIncludes , bool isInclude )
59
+ {
60
+ AddExcludesOrIncludes ( coverletSettings , excludesOrIncludes . Select ( excludeOrInclude => $ "[{ excludeOrInclude } ]*") , isInclude) ;
61
+ }
62
+
63
+ private static void AddExcludesIncludes ( List < string > coverletSettings , ICoverageProject project )
64
+ {
65
+ AddExcludesOrIncludes ( coverletSettings , SantitizeExcludeInclude ( project . Settings . Exclude ) , false ) ;
66
+ AddProjectExcludesOrIncludes( coverletSettings , project . ExcludedReferencedProjects . Select ( rp => rp . AssemblyName ) , false ) ;
67
+ var includes = SantitizeExcludeInclude( project . Settings . Include ) ;
68
+ AddExcludesOrIncludes( coverletSettings , includes , true ) ;
69
+ var projectIncludes = project. IncludedReferencedProjects . Select ( rp => rp . AssemblyName ) ;
70
+ if ( project . Settings . IncludeTestAssembly )
52
71
{
53
- coverletSettings . Add ( $@ "--include ""[ { includedReferencedProject } ]*""" ) ;
72
+ projectIncludes = AddTestAssemblyIfNecessary ( projectIncludes , includes , project . ProjectName ) ;
54
73
}
74
+ AddProjectExcludesOrIncludes( coverletSettings , projectIncludes , true ) ;
75
+ }
76
+
77
+ public List< string > GetArguments ( ICoverageProject project )
78
+ {
79
+ var coverletSettings = new List < string > ( ) ;
80
+
81
+ coverletSettings . Add ( $@ """{ project . TestDllFile } """);
82
+
83
+ coverletSettings.Add($@" -- format ""cobertura""");
84
+
85
+ AddExcludesIncludes(coverletSettings, project);
55
86
56
87
foreach (var value in (project.Settings.ExcludeByFile ?? new string[0]).Where(x => !string.IsNullOrWhiteSpace(x)))
57
88
{
58
89
coverletSettings.Add($@"--exclude-by-file ""{value.Replace("\"", "\\\"").Trim(' ', '\'')}""" ) ;
59
90
}
60
91
61
- foreach (var value in SanitizeExcludesOrIncludes (project.Settings.ExcludeByAttribute).Select(EnsureAttributeTypeUnqualified))
92
+ foreach ( var value in SanitizeExcludesByAttribute ( project . Settings . ExcludeByAttribute ) . Select ( EnsureAttributeTypeUnqualified ) )
62
93
{
63
94
var withoutAttributeBrackets = value. Trim ( '[' , ']' ) ;
64
95
coverletSettings. Add ( $@ "--exclude-by-attribute { value } ") ;
0 commit comments