diff options
Diffstat (limited to 'llvm/unittests/Support')
-rw-r--r-- | llvm/unittests/Support/GlobPatternTest.cpp | 134 |
1 files changed, 96 insertions, 38 deletions
diff --git a/llvm/unittests/Support/GlobPatternTest.cpp b/llvm/unittests/Support/GlobPatternTest.cpp index 113b20e047e..17d60b2b850 100644 --- a/llvm/unittests/Support/GlobPatternTest.cpp +++ b/llvm/unittests/Support/GlobPatternTest.cpp @@ -14,57 +14,115 @@ namespace { class GlobPatternTest : public ::testing::Test {}; -TEST_F(GlobPatternTest, Basics) { +TEST_F(GlobPatternTest, Empty) { Expected<GlobPattern> Pat1 = GlobPattern::create(""); EXPECT_TRUE((bool)Pat1); EXPECT_TRUE(Pat1->match("")); EXPECT_FALSE(Pat1->match("a")); +} + +TEST_F(GlobPatternTest, Glob) { + Expected<GlobPattern> Pat1 = GlobPattern::create("ab*c*def"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("abcdef")); + EXPECT_TRUE(Pat1->match("abxcxdef")); + EXPECT_FALSE(Pat1->match("")); + EXPECT_FALSE(Pat1->match("xabcdef")); + EXPECT_FALSE(Pat1->match("abcdefx")); +} + +TEST_F(GlobPatternTest, Wildcard) { + Expected<GlobPattern> Pat1 = GlobPattern::create("a??c"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("axxc")); + EXPECT_FALSE(Pat1->match("axxx")); + EXPECT_FALSE(Pat1->match("")); +} - Expected<GlobPattern> Pat2 = GlobPattern::create("ab*c*def"); +TEST_F(GlobPatternTest, Escape) { + Expected<GlobPattern> Pat1 = GlobPattern::create("\\*"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("*")); + EXPECT_FALSE(Pat1->match("\\*")); + EXPECT_FALSE(Pat1->match("a")); + + Expected<GlobPattern> Pat2 = GlobPattern::create("a?\\?c"); EXPECT_TRUE((bool)Pat2); - EXPECT_TRUE(Pat2->match("abcdef")); - EXPECT_TRUE(Pat2->match("abxcxdef")); + EXPECT_TRUE(Pat2->match("ax?c")); + EXPECT_FALSE(Pat2->match("axxc")); EXPECT_FALSE(Pat2->match("")); - EXPECT_FALSE(Pat2->match("xabcdef")); - EXPECT_FALSE(Pat2->match("abcdefx")); - - Expected<GlobPattern> Pat3 = GlobPattern::create("a??c"); - EXPECT_TRUE((bool)Pat3); - EXPECT_TRUE(Pat3->match("axxc")); - EXPECT_FALSE(Pat3->match("axxx")); - EXPECT_FALSE(Pat3->match("")); - - Expected<GlobPattern> Pat4 = GlobPattern::create("[abc-fy-z]"); - EXPECT_TRUE((bool)Pat4); - EXPECT_TRUE(Pat4->match("a")); - EXPECT_TRUE(Pat4->match("b")); - EXPECT_TRUE(Pat4->match("c")); - EXPECT_TRUE(Pat4->match("d")); - EXPECT_TRUE(Pat4->match("e")); - EXPECT_TRUE(Pat4->match("f")); - EXPECT_TRUE(Pat4->match("y")); - EXPECT_TRUE(Pat4->match("z")); - EXPECT_FALSE(Pat4->match("g")); - EXPECT_FALSE(Pat4->match("")); - - Expected<GlobPattern> Pat5 = GlobPattern::create("[^abc-fy-z]"); - EXPECT_TRUE((bool)Pat5); - EXPECT_TRUE(Pat5->match("g")); - EXPECT_FALSE(Pat5->match("a")); - EXPECT_FALSE(Pat5->match("b")); - EXPECT_FALSE(Pat5->match("c")); - EXPECT_FALSE(Pat5->match("d")); - EXPECT_FALSE(Pat5->match("e")); - EXPECT_FALSE(Pat5->match("f")); - EXPECT_FALSE(Pat5->match("y")); - EXPECT_FALSE(Pat5->match("z")); - EXPECT_FALSE(Pat5->match("")); +} + +TEST_F(GlobPatternTest, BasicCharacterClass) { + Expected<GlobPattern> Pat1 = GlobPattern::create("[abc-fy-z]"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("a")); + EXPECT_TRUE(Pat1->match("b")); + EXPECT_TRUE(Pat1->match("c")); + EXPECT_TRUE(Pat1->match("d")); + EXPECT_TRUE(Pat1->match("e")); + EXPECT_TRUE(Pat1->match("f")); + EXPECT_TRUE(Pat1->match("y")); + EXPECT_TRUE(Pat1->match("z")); + EXPECT_FALSE(Pat1->match("g")); + EXPECT_FALSE(Pat1->match("")); +} + +TEST_F(GlobPatternTest, NegatedCharacterClass) { + Expected<GlobPattern> Pat1 = GlobPattern::create("[^abc-fy-z]"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("g")); + EXPECT_FALSE(Pat1->match("a")); + EXPECT_FALSE(Pat1->match("b")); + EXPECT_FALSE(Pat1->match("c")); + EXPECT_FALSE(Pat1->match("d")); + EXPECT_FALSE(Pat1->match("e")); + EXPECT_FALSE(Pat1->match("f")); + EXPECT_FALSE(Pat1->match("y")); + EXPECT_FALSE(Pat1->match("z")); + EXPECT_FALSE(Pat1->match("")); + + Expected<GlobPattern> Pat2 = GlobPattern::create("[!abc-fy-z]"); + EXPECT_TRUE((bool)Pat2); + EXPECT_TRUE(Pat2->match("g")); + EXPECT_FALSE(Pat2->match("a")); + EXPECT_FALSE(Pat2->match("b")); + EXPECT_FALSE(Pat2->match("c")); + EXPECT_FALSE(Pat2->match("d")); + EXPECT_FALSE(Pat2->match("e")); + EXPECT_FALSE(Pat2->match("f")); + EXPECT_FALSE(Pat2->match("y")); + EXPECT_FALSE(Pat2->match("z")); + EXPECT_FALSE(Pat2->match("")); +} + +TEST_F(GlobPatternTest, BracketFrontOfCharacterClass) { + Expected<GlobPattern> Pat1 = GlobPattern::create("[]a]x"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("]x")); + EXPECT_TRUE(Pat1->match("ax")); + EXPECT_FALSE(Pat1->match("a]x")); + EXPECT_FALSE(Pat1->match("")); +} + +TEST_F(GlobPatternTest, SpecialCharsInCharacterClass) { + Expected<GlobPattern> Pat1 = GlobPattern::create("[*?^]"); + EXPECT_TRUE((bool)Pat1); + EXPECT_TRUE(Pat1->match("*")); + EXPECT_TRUE(Pat1->match("?")); + EXPECT_TRUE(Pat1->match("^")); + EXPECT_FALSE(Pat1->match("*?^")); + EXPECT_FALSE(Pat1->match("")); } TEST_F(GlobPatternTest, Invalid) { Expected<GlobPattern> Pat1 = GlobPattern::create("["); EXPECT_FALSE((bool)Pat1); handleAllErrors(Pat1.takeError(), [&](ErrorInfoBase &EIB) {}); + + Expected<GlobPattern> Pat2 = GlobPattern::create("[]"); + EXPECT_FALSE((bool)Pat2); + handleAllErrors(Pat2.takeError(), [&](ErrorInfoBase &EIB) {}); } TEST_F(GlobPatternTest, ExtSym) { |