@@ -216,9 +216,9 @@ public void TestFiltersWithIncludeExcludeComplexPatterns1()
216216
217217 var expectedRegexMessages = new [ ]
218218 {
219- "Filtering in files matching '^c/.*/i\\ .[^/]*.*'. Original glob filter: 'include:c/**/i.*'" ,
220- "Filtering in files matching '^c/d/.*/[^/]*\\ .cs.*'. Original glob filter: 'include:c/d/**/*.cs'" ,
221- "Filtering out files matching '^.*/z/i\\ .cs.*'. Original glob filter: 'exclude:**/z/i.cs'"
219+ "Filtering in files matching '^c/( .*/|) i\\ .[^/]*.*'. Original glob filter: 'include:c/**/i.*'" ,
220+ "Filtering in files matching '^c/d/( .*/|) [^/]*\\ .cs.*'. Original glob filter: 'include:c/d/**/*.cs'" ,
221+ "Filtering out files matching '^( .*/|) z/i\\ .cs.*'. Original glob filter: 'exclude:**/z/i.cs'"
222222 } ;
223223 Assert . Equivalent ( expectedRegexMessages , logger . Messages , strict : false ) ;
224224 }
@@ -244,10 +244,41 @@ public void TestFiltersWithIncludeExcludeComplexPatterns2()
244244
245245 var expectedRegexMessages = new [ ]
246246 {
247- "Filtering in files matching '^.*/i\\ .[^/]*.*'. Original glob filter: 'include:**/i.*'" ,
248- "Filtering out files matching '^.*/z/i\\ .cs.*'. Original glob filter: 'exclude:**/z/i.cs'"
247+ "Filtering in files matching '^( .*/|) i\\ .[^/]*.*'. Original glob filter: 'include:**/i.*'" ,
248+ "Filtering out files matching '^( .*/|) z/i\\ .cs.*'. Original glob filter: 'exclude:**/z/i.cs'"
249249 } ;
250250 Assert . Equivalent ( expectedRegexMessages , logger . Messages , strict : false ) ;
251251 }
252+
253+ [ Fact ]
254+ public void TestFiltersWithIncludeExcludeComplexPatternsRelativeRoot ( )
255+ {
256+ ( var testSubject , var logger , var files ) = TestSetup ( ) ;
257+
258+ // 'c' is the start of the relative path so we want to ensure the `**/` glob can match start
259+ Environment . SetEnvironmentVariable ( "LGTM_INDEX_FILTERS" , """
260+ include:**/c/**/i.*
261+ exclude:**/c/**/z/i.cs
262+ exclude:**/**/c/**/z/i.cs
263+ """ ) ;
264+
265+ var filtered = testSubject . Filter ( files ) ;
266+
267+ var expected = GetExpected (
268+ [
269+ "/a/b/c/x/y/i.cs" ,
270+ ] ) ;
271+
272+ AssertFileInfoEquivalence ( expected , filtered ) ;
273+ var expectedRegexMessages = new [ ]
274+ {
275+ "Filtering in files matching '^(.*/|)c/(.*/|)i\\ .[^/]*.*'. Original glob filter: 'include:**/c/**/i.*'" ,
276+ "Filtering out files matching '^(.*/|)c/(.*/|)z/i\\ .cs.*'. Original glob filter: 'exclude:**/c/**/z/i.cs'" ,
277+ "Filtering out files matching '^(.*/|)(.*/|)c/(.*/|)z/i\\ .cs.*'. Original glob filter: 'exclude:**/**/c/**/z/i.cs'"
278+ } ;
279+
280+
281+ Assert . Equivalent ( expectedRegexMessages , logger . Messages , strict : false ) ;
282+ }
252283 }
253284}
0 commit comments