Skip to content

Commit cab6e70

Browse files
committed
Merge branch 'master' into bugfix/spaces-in-path
2 parents bdb1c5a + 0b42b03 commit cab6e70

File tree

3 files changed

+48
-35
lines changed

3 files changed

+48
-35
lines changed

src/coverlet.core/Coverage.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public void PrepareModules()
3030
{
3131
string[] modules = InstrumentationHelper.GetCoverableModules(_module);
3232
string[] excludedFiles = InstrumentationHelper.GetExcludedFiles(_rules);
33+
_filters = _filters?.Where(f => InstrumentationHelper.IsValidFilterExpression(f)).ToArray();
3334

3435
foreach (var module in modules)
3536
{

src/coverlet.core/Helpers/InstrumentationHelper.cs

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,38 @@ public static void DeleteHitsFile(string path)
8181
RetryHelper.Retry(() => File.Delete(path), retryStrategy, 10);
8282
}
8383

84+
public static bool IsValidFilterExpression(string filter)
85+
{
86+
if (filter == null)
87+
return false;
88+
89+
if (!filter.StartsWith("["))
90+
return false;
91+
92+
if (!filter.Contains("]"))
93+
return false;
94+
95+
if (filter.Count(f => f == '[') > 1)
96+
return false;
97+
98+
if (filter.Count(f => f == ']') > 1)
99+
return false;
100+
101+
if (filter.IndexOf(']') < filter.IndexOf('['))
102+
return false;
103+
104+
if (filter.IndexOf(']') - filter.IndexOf('[') == 1)
105+
return false;
106+
107+
if (filter.EndsWith("]"))
108+
return false;
109+
110+
if (new Regex(@"[^\w*]").IsMatch(filter.Replace(".", "").Replace("[", "").Replace("]", "")))
111+
return false;
112+
113+
return true;
114+
}
115+
84116
public static bool IsModuleExcluded(string module, string[] filters)
85117
{
86118
if (filters == null)
@@ -91,9 +123,6 @@ public static bool IsModuleExcluded(string module, string[] filters)
91123

92124
foreach (var filter in filters)
93125
{
94-
if (!IsValidFilterExpression(filter))
95-
continue;
96-
97126
string modulePattern = filter.Substring(1, filter.IndexOf(']') - 1);
98127
string typePattern = filter.Substring(filter.IndexOf(']') + 1);
99128

@@ -116,9 +145,6 @@ public static bool IsTypeExcluded(string module, string type, string[] filters)
116145

117146
foreach (var filter in filters)
118147
{
119-
if (!IsValidFilterExpression(filter))
120-
continue;
121-
122148
string typePattern = filter.Substring(filter.IndexOf(']') + 1);
123149
string modulePattern = filter.Substring(1, filter.IndexOf(']') - 1);
124150

@@ -191,35 +217,6 @@ TimeSpan retryStrategy()
191217
return retryStrategy;
192218
}
193219

194-
private static bool IsValidFilterExpression(string filter)
195-
{
196-
if (!filter.StartsWith("["))
197-
return false;
198-
199-
if (!filter.Contains("]"))
200-
return false;
201-
202-
if (filter.Count(f => f == '[') > 1)
203-
return false;
204-
205-
if (filter.Count(f => f == ']') > 1)
206-
return false;
207-
208-
if (filter.IndexOf(']') < filter.IndexOf('['))
209-
return false;
210-
211-
if (filter.IndexOf(']') - filter.IndexOf('[') == 1)
212-
return false;
213-
214-
if (filter.EndsWith("]"))
215-
return false;
216-
217-
if (new Regex(@"[^\w*]").IsMatch(filter.Replace(".", "").Replace("[", "").Replace("]", "")))
218-
return false;
219-
220-
return true;
221-
}
222-
223220
private static string WildcardToRegex(string pattern)
224221
{
225222
return "^" + Regex.Escape(pattern).

test/coverlet.core.tests/Helpers/InstrumentationHelperTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,21 @@ public void TestCopyCoverletDependency()
5050
Directory.Delete(directory.FullName, true);
5151
}
5252

53+
[Fact]
54+
public void TestIsValidFilterExpression()
55+
{
56+
Assert.True(InstrumentationHelper.IsValidFilterExpression("[*]*"));
57+
Assert.True(InstrumentationHelper.IsValidFilterExpression("[*]*core"));
58+
Assert.True(InstrumentationHelper.IsValidFilterExpression("[assembly]*"));
59+
Assert.True(InstrumentationHelper.IsValidFilterExpression("[*]type"));
60+
Assert.True(InstrumentationHelper.IsValidFilterExpression("[assembly]type"));
61+
Assert.False(InstrumentationHelper.IsValidFilterExpression("[*]"));
62+
Assert.False(InstrumentationHelper.IsValidFilterExpression("[-]*"));
63+
Assert.False(InstrumentationHelper.IsValidFilterExpression("*"));
64+
Assert.False(InstrumentationHelper.IsValidFilterExpression("]["));
65+
Assert.False(InstrumentationHelper.IsValidFilterExpression(null));
66+
}
67+
5368
[Fact]
5469
public void TestDontCopyCoverletDependency()
5570
{

0 commit comments

Comments
 (0)