@@ -12,10 +12,15 @@ public class FilePathFilterTest
12
12
{
13
13
private class ProgressMonitorStub : IProgressMonitor
14
14
{
15
- public void Log ( Severity severity , string message ) { }
15
+ public List < string > Messages { get ; } = [ ] ;
16
+
17
+ public void Log ( Severity severity , string message )
18
+ {
19
+ Messages . Add ( message ) ;
20
+ }
16
21
}
17
22
18
- private static ( FilePathFilter TestSubject , IEnumerable < FileInfo > Files ) TestSetup ( )
23
+ private static ( FilePathFilter TestSubject , ProgressMonitorStub progressMonitor , IEnumerable < FileInfo > Files ) TestSetup ( )
19
24
{
20
25
return TestSetup ( "/a/b" ,
21
26
[
@@ -27,13 +32,15 @@ private static (FilePathFilter TestSubject, IEnumerable<FileInfo> Files) TestSet
27
32
] ) ;
28
33
}
29
34
30
- private static ( FilePathFilter TestSubject , IEnumerable < FileInfo > Files ) TestSetup ( string root , IEnumerable < string > paths )
35
+ private static ( FilePathFilter TestSubject , ProgressMonitorStub progressMonitor , IEnumerable < FileInfo > Files ) TestSetup ( string root , IEnumerable < string > paths )
31
36
{
32
37
root = GetPlatformSpecifixPath ( root ) ;
33
38
paths = GetPlatformSpecifixPaths ( paths ) ;
34
39
35
- var filePathFilter = new FilePathFilter ( new DirectoryInfo ( root ) , new ProgressMonitorStub ( ) ) ;
36
- return ( filePathFilter , paths . Select ( p => new FileInfo ( p ) ) ) ;
40
+ var progressMonitor = new ProgressMonitorStub ( ) ;
41
+
42
+ var filePathFilter = new FilePathFilter ( new DirectoryInfo ( root ) , progressMonitor ) ;
43
+ return ( filePathFilter , progressMonitor , paths . Select ( p => new FileInfo ( p ) ) ) ;
37
44
}
38
45
39
46
private static string GetPlatformSpecifixPath ( string file )
@@ -52,27 +59,28 @@ private static IEnumerable<FileInfo> GetExpected(IEnumerable<string> files)
52
59
return files . Select ( f => new FileInfo ( f ) ) ;
53
60
}
54
61
55
- private static void AssertEquivalence ( IEnumerable < FileInfo > ? expected , IEnumerable < FileInfo > ? actual )
62
+ private static void AssertFileInfoEquivalence ( IEnumerable < FileInfo > ? expected , IEnumerable < FileInfo > ? actual )
56
63
{
57
64
Assert . Equivalent ( expected ? . Select ( f => f . FullName ) , actual ? . Select ( f => f . FullName ) , strict : true ) ;
58
65
}
59
66
60
67
[ Fact ]
61
68
public void TestNoFilter ( )
62
69
{
63
- ( var testSubject , var files ) = TestSetup ( ) ;
70
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
64
71
65
72
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , null ) ;
66
73
67
74
var filtered = testSubject . Filter ( files ) ;
68
75
69
- AssertEquivalence ( files , filtered ) ;
76
+ AssertFileInfoEquivalence ( files , filtered ) ;
77
+ Assert . Equivalent ( Array . Empty < string > ( ) , progressMonitor . Messages , strict : true ) ;
70
78
}
71
79
72
80
[ Fact ]
73
81
public void TestFiltersWithOnlyInclude ( )
74
82
{
75
- ( var testSubject , var files ) = TestSetup ( ) ;
83
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
76
84
77
85
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
78
86
include:c/d
@@ -89,13 +97,20 @@ public void TestFiltersWithOnlyInclude()
89
97
"/a/b/c/x/y/i.cs"
90
98
] ) ;
91
99
92
- AssertEquivalence ( expected , filtered ) ;
100
+ AssertFileInfoEquivalence ( expected , filtered ) ;
101
+
102
+ var expectedRegexMessages = new [ ]
103
+ {
104
+ "Filtering in files matching '^c/d.*'. Original glob filter: 'include:c/d'" ,
105
+ "Filtering in files matching '^c/x/y.*'. Original glob filter: 'include:c/x/y'"
106
+ } ;
107
+ Assert . Equivalent ( expectedRegexMessages , progressMonitor . Messages , strict : false ) ;
93
108
}
94
109
95
110
[ Fact ]
96
111
public void TestFiltersWithOnlyExclude ( )
97
112
{
98
- ( var testSubject , var files ) = TestSetup ( ) ;
113
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
99
114
100
115
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
101
116
exclude:c/d/e
@@ -109,13 +124,19 @@ public void TestFiltersWithOnlyExclude()
109
124
"/a/b/c/x/z/i.cs"
110
125
] ) ;
111
126
112
- AssertEquivalence ( expected , filtered ) ;
127
+ AssertFileInfoEquivalence ( expected , filtered ) ;
128
+
129
+ var expectedRegexMessages = new [ ]
130
+ {
131
+ "Filtering out files matching '^c/d/e.*'. Original glob filter: 'exclude:c/d/e'"
132
+ } ;
133
+ Assert . Equivalent ( expectedRegexMessages , progressMonitor . Messages , strict : false ) ;
113
134
}
114
135
115
136
[ Fact ]
116
137
public void TestFiltersWithIncludeExclude ( )
117
138
{
118
- ( var testSubject , var files ) = TestSetup ( ) ;
139
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
119
140
120
141
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
121
142
include:c/x
@@ -129,13 +150,20 @@ public void TestFiltersWithIncludeExclude()
129
150
"/a/b/c/x/y/i.cs"
130
151
] ) ;
131
152
132
- AssertEquivalence ( expected , filtered ) ;
153
+ AssertFileInfoEquivalence ( expected , filtered ) ;
154
+
155
+ var expectedRegexMessages = new [ ]
156
+ {
157
+ "Filtering in files matching '^c/x.*'. Original glob filter: 'include:c/x'" ,
158
+ "Filtering out files matching '^c/x/z.*'. Original glob filter: 'exclude:c/x/z'"
159
+ } ;
160
+ Assert . Equivalent ( expectedRegexMessages , progressMonitor . Messages , strict : false ) ;
133
161
}
134
162
135
163
[ Fact ]
136
164
public void TestFiltersWithIncludeExcludeExcludeFirst ( )
137
165
{
138
- ( var testSubject , var files ) = TestSetup ( ) ;
166
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
139
167
140
168
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
141
169
exclude:c/x/z
@@ -149,13 +177,20 @@ public void TestFiltersWithIncludeExcludeExcludeFirst()
149
177
"/a/b/c/x/y/i.cs"
150
178
] ) ;
151
179
152
- AssertEquivalence ( expected , filtered ) ;
180
+ AssertFileInfoEquivalence ( expected , filtered ) ;
181
+
182
+ var expectedRegexMessages = new [ ]
183
+ {
184
+ "Filtering in files matching '^c/x.*'. Original glob filter: 'include:c/x'" ,
185
+ "Filtering out files matching '^c/x/z.*'. Original glob filter: 'exclude:c/x/z'"
186
+ } ;
187
+ Assert . Equivalent ( expectedRegexMessages , progressMonitor . Messages , strict : false ) ;
153
188
}
154
189
155
190
[ Fact ]
156
191
public void TestFiltersWithIncludeExcludeComplexPatterns1 ( )
157
192
{
158
- ( var testSubject , var files ) = TestSetup ( ) ;
193
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
159
194
160
195
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
161
196
include:c/**/i.*
@@ -173,13 +208,21 @@ public void TestFiltersWithIncludeExcludeComplexPatterns1()
173
208
"/a/b/c/x/y/i.cs"
174
209
] ) ;
175
210
176
- AssertEquivalence ( expected , filtered ) ;
211
+ AssertFileInfoEquivalence ( expected , filtered ) ;
212
+
213
+ var expectedRegexMessages = new [ ]
214
+ {
215
+ "Filtering in files matching '^c/.*/i\\ .[^/]*.*'. Original glob filter: 'include:c/**/i.*'" ,
216
+ "Filtering in files matching '^c/d/.*/[^/]*\\ .cs.*'. Original glob filter: 'include:c/d/**/*.cs'" ,
217
+ "Filtering out files matching '^.*/z/i\\ .cs.*'. Original glob filter: 'exclude:**/z/i.cs'"
218
+ } ;
219
+ Assert . Equivalent ( expectedRegexMessages , progressMonitor . Messages , strict : false ) ;
177
220
}
178
221
179
222
[ Fact ]
180
223
public void TestFiltersWithIncludeExcludeComplexPatterns2 ( )
181
224
{
182
- ( var testSubject , var files ) = TestSetup ( ) ;
225
+ ( var testSubject , var progressMonitor , var files ) = TestSetup ( ) ;
183
226
184
227
Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
185
228
include:**/i.*
@@ -193,7 +236,14 @@ public void TestFiltersWithIncludeExcludeComplexPatterns2()
193
236
"/a/b/c/x/y/i.cs"
194
237
] ) ;
195
238
196
- AssertEquivalence ( expected , filtered ) ;
239
+ AssertFileInfoEquivalence ( expected , filtered ) ;
240
+
241
+ var expectedRegexMessages = new [ ]
242
+ {
243
+ "Filtering in files matching '^.*/i\\ .[^/]*.*'. Original glob filter: 'include:**/i.*'" ,
244
+ "Filtering out files matching '^.*/z/i\\ .cs.*'. Original glob filter: 'exclude:**/z/i.cs'"
245
+ } ;
246
+ Assert . Equivalent ( expectedRegexMessages , progressMonitor . Messages , strict : false ) ;
197
247
}
198
248
}
199
249
}
0 commit comments