public void StarStarNameMatch() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("**.cs").Value; Assert.Equal("^.*/.*\\.cs$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc.cs")); Assert.True(matcher.IsMatch("/dir/subpath.cs")); }
public void LiteralBackslash() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("ab\\\\c").Value; Assert.Equal("^.*/ab\\\\c$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/ab\\c")); Assert.False(matcher.IsMatch("/ab/c")); Assert.False(matcher.IsMatch("/ab\\\\c")); }
public void StarOnlyMatch() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("*").Value; Assert.Equal("^.*/[^/]*$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc")); Assert.True(matcher.IsMatch("/123")); Assert.True(matcher.IsMatch("/abc/123")); }
public void LiteralBraces() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("abc\\{\\}def").Value; Assert.Equal(@"^.*/abc\{}def$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc{}def")); Assert.True(matcher.IsMatch("/subdir/abc{}def")); Assert.False(matcher.IsMatch("/abcdef")); Assert.False(matcher.IsMatch("/abc}{def")); }
public void SimpleNameMatch() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("abc").Value; Assert.Equal("^.*/abc$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc")); Assert.False(matcher.IsMatch("/aabc")); Assert.False(matcher.IsMatch("/ abc")); Assert.False(matcher.IsMatch("/cabc")); }
public void SingleChoice() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("{*.cs}").Value; Assert.Equal("^.*/(?:[^/]*\\.cs)$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/test.cs")); Assert.True(matcher.IsMatch("/subdir/test.cs")); Assert.False(matcher.IsMatch("test.vb")); Assert.False(matcher.IsMatch("testxcs")); }
public void LiteralStars() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("\\***\\*\\**").Value; Assert.Equal("^.*/\\*.*\\*\\*[^/]*$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/*ab/cd**efg*")); Assert.False(matcher.IsMatch("/ab/cd**efg*")); Assert.False(matcher.IsMatch("/*ab/cd*efg*")); Assert.False(matcher.IsMatch("/*ab/cd**ef/gh")); }
public void EmptyChoice() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("{}").Value; Assert.Equal("^.*/(?:)$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/")); Assert.True(matcher.IsMatch("/subdir/")); Assert.False(matcher.IsMatch("/.")); Assert.False(matcher.IsMatch("/anything")); }
public void LiteralComma() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("abc\\,def").Value; Assert.Equal("^.*/abc,def$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc,def")); Assert.True(matcher.IsMatch("/subdir/abc,def")); Assert.False(matcher.IsMatch("/abcdef")); Assert.False(matcher.IsMatch("/abc\\,def")); Assert.False(matcher.IsMatch("/abc`def")); }
public void EscapeDot() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("...").Value; Assert.Equal("^.*/\\.\\.\\.$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/...")); Assert.True(matcher.IsMatch("/subdir/...")); Assert.False(matcher.IsMatch("/aaa")); Assert.False(matcher.IsMatch("/???")); Assert.False(matcher.IsMatch("/abc")); }
public void QuestionMatch() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("ab?def").Value; Assert.Equal("^.*/ab.def$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abcdef")); Assert.True(matcher.IsMatch("/ab?def")); Assert.True(matcher.IsMatch("/abzdef")); Assert.True(matcher.IsMatch("/ab/def")); Assert.True(matcher.IsMatch("/ab\\def")); }
public void DashChoice() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("ab{-}cd{-,}ef").Value; Assert.Equal("^.*/ab(?:-)cd(?:-|)ef$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/ab-cd-ef")); Assert.True(matcher.IsMatch("/ab-cdef")); Assert.False(matcher.IsMatch("/abcdef")); Assert.False(matcher.IsMatch("/ab--cd-ef")); Assert.False(matcher.IsMatch("/ab--cd--ef")); }
public void LiteralQuestions() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("\\??\\?*\\??").Value; Assert.Equal("^.*/\\?.\\?[^/]*\\?.$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/?a?cde?f")); Assert.True(matcher.IsMatch("/???????f")); Assert.False(matcher.IsMatch("/aaaaaaaa")); Assert.False(matcher.IsMatch("/aa?cde?f")); Assert.False(matcher.IsMatch("/?a?cdexf")); Assert.False(matcher.IsMatch("/?axcde?f")); }
public void MiddleMatch() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("ab{cs,vb,fs}cd").Value; Assert.Equal("^.*/ab(?:cs|vb|fs)cd$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abcscd")); Assert.True(matcher.IsMatch("/abvbcd")); Assert.True(matcher.IsMatch("/abfscd")); Assert.False(matcher.IsMatch("/abcs")); Assert.False(matcher.IsMatch("/abcd")); Assert.False(matcher.IsMatch("/vbcd")); }
public void StarNameMatch() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("*.cs").Value; Assert.Equal("^.*/[^/]*\\.cs$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc.cs")); Assert.True(matcher.IsMatch("/123.cs")); Assert.True(matcher.IsMatch("/dir/subpath.cs")); // Only '/' is defined as a directory separator, so the caller // is responsible for converting any other machine directory // separators to '/' before matching Assert.True(matcher.IsMatch("/dir\\subpath.cs")); Assert.False(matcher.IsMatch("/abc.vb")); }
public void RecursiveChoice() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("{test{.cs,.vb},other.{a{bb,cc}}}").Value; Assert.Equal("^.*/(?:test(?:\\.cs|\\.vb)|other\\.(?:a(?:bb|cc)))$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/test.cs")); Assert.True(matcher.IsMatch("/test.vb")); Assert.True(matcher.IsMatch("/subdir/test.cs")); Assert.True(matcher.IsMatch("/subdir/test.vb")); Assert.True(matcher.IsMatch("/other.abb")); Assert.True(matcher.IsMatch("/other.acc")); Assert.False(matcher.IsMatch("/test.fs")); Assert.False(matcher.IsMatch("/other.bbb")); Assert.False(matcher.IsMatch("/other.ccc")); Assert.False(matcher.IsMatch("/subdir/other.bbb")); Assert.False(matcher.IsMatch("/subdir/other.ccc")); }
public void SimpleChoice() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("*.{cs,vb,fs}").Value; Assert.Equal("^.*/[^/]*\\.(?:cs|vb|fs)$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/abc.cs")); Assert.True(matcher.IsMatch("/abc.vb")); Assert.True(matcher.IsMatch("/abc.fs")); Assert.True(matcher.IsMatch("/subdir/abc.cs")); Assert.True(matcher.IsMatch("/subdir/abc.vb")); Assert.True(matcher.IsMatch("/subdir/abc.fs")); Assert.False(matcher.IsMatch("/abcxcs")); Assert.False(matcher.IsMatch("/abcxvb")); Assert.False(matcher.IsMatch("/abcxfs")); Assert.False(matcher.IsMatch("/subdir/abcxcs")); Assert.False(matcher.IsMatch("/subdir/abcxcb")); Assert.False(matcher.IsMatch("/subdir/abcxcs")); }
public void OneChoiceHasSlashes() { SectionNameMatcher matcher = TryCreateSectionNameMatcher("{*.cs,subdir/test.vb}").Value; // This is an interesting case that may be counterintuitive. A reasonable understanding // of the section matching could interpret the choice as generating multiple identical // sections, so [{a, b, c}] would be equivalent to [a] ... [b] ... [c] with all of the // same properties in each section. This is somewhat true, but the rules of how the matching // prefixes are constructed violate this assumption because they are defined as whether or // not a section contains a slash, not whether any of the choices contain a slash. So while // [*.cs] usually translates into '**/*.cs' because it contains no slashes, the slashes in // the second choice make this into '/*.cs', effectively matching only files in the root // directory of the match, instead of all subdirectories. Assert.Equal("^/(?:[^/]*\\.cs|subdir/test\\.vb)$", matcher.Regex.ToString()); Assert.True(matcher.IsMatch("/test.cs")); Assert.True(matcher.IsMatch("/subdir/test.vb")); Assert.False(matcher.IsMatch("/subdir/test.cs")); Assert.False(matcher.IsMatch("/subdir/subdir/test.vb")); Assert.False(matcher.IsMatch("/test.vb")); }