xref: /llvm-project/clang-tools-extra/unittests/clang-tidy/GlobListTest.cpp (revision dabda23f1991f7c4e5a840ee6cf1290e18fa2e88)
1a6fed93fSDmitri Gribenko #include "GlobList.h"
2a6fed93fSDmitri Gribenko #include "gtest/gtest.h"
3a6fed93fSDmitri Gribenko 
4a6fed93fSDmitri Gribenko namespace clang {
5a6fed93fSDmitri Gribenko namespace tidy {
6a6fed93fSDmitri Gribenko 
7946eb7a0SCarlos Galvez template <typename GlobListT> struct GlobListTest : public ::testing::Test {};
8946eb7a0SCarlos Galvez 
9946eb7a0SCarlos Galvez using GlobListTypes = ::testing::Types<GlobList, CachedGlobList>;
10*dabda23fSCarlos Galvez TYPED_TEST_SUITE(GlobListTest, GlobListTypes, );
11946eb7a0SCarlos Galvez 
TYPED_TEST(GlobListTest,Empty)12946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, Empty) {
13946eb7a0SCarlos Galvez   TypeParam Filter("");
14a6fed93fSDmitri Gribenko 
15a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains(""));
16a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("aaa"));
17a6fed93fSDmitri Gribenko }
18a6fed93fSDmitri Gribenko 
TYPED_TEST(GlobListTest,Nothing)19946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, Nothing) {
20946eb7a0SCarlos Galvez   TypeParam Filter("-*");
21a6fed93fSDmitri Gribenko 
22a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains(""));
23a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("a"));
24a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("-*"));
25a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("-"));
26a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("*"));
27a6fed93fSDmitri Gribenko }
28a6fed93fSDmitri Gribenko 
TYPED_TEST(GlobListTest,Everything)29946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, Everything) {
30946eb7a0SCarlos Galvez   TypeParam Filter("*");
31a6fed93fSDmitri Gribenko 
32a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains(""));
33a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("aaaa"));
34a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("-*"));
35a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("-"));
36a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("*"));
37a6fed93fSDmitri Gribenko }
38a6fed93fSDmitri Gribenko 
TYPED_TEST(GlobListTest,OneSimplePattern)39946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, OneSimplePattern) {
40946eb7a0SCarlos Galvez   TypeParam Filter("aaa");
41a6fed93fSDmitri Gribenko 
42a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("aaa"));
43a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains(""));
44a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("aa"));
45a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("aaaa"));
46a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("bbb"));
47a6fed93fSDmitri Gribenko }
48a6fed93fSDmitri Gribenko 
TYPED_TEST(GlobListTest,TwoSimplePatterns)49946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, TwoSimplePatterns) {
50946eb7a0SCarlos Galvez   TypeParam Filter("aaa,bbb");
51fd2315ceSDmitri Gribenko 
52fd2315ceSDmitri Gribenko   EXPECT_TRUE(Filter.contains("aaa"));
53fd2315ceSDmitri Gribenko   EXPECT_TRUE(Filter.contains("bbb"));
54fd2315ceSDmitri Gribenko   EXPECT_FALSE(Filter.contains(""));
55fd2315ceSDmitri Gribenko   EXPECT_FALSE(Filter.contains("aa"));
56fd2315ceSDmitri Gribenko   EXPECT_FALSE(Filter.contains("aaaa"));
57fd2315ceSDmitri Gribenko   EXPECT_FALSE(Filter.contains("bbbb"));
58fd2315ceSDmitri Gribenko }
59fd2315ceSDmitri Gribenko 
TYPED_TEST(GlobListTest,PatternPriority)60946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, PatternPriority) {
61fd2315ceSDmitri Gribenko   // The last glob that matches the string decides whether that string is
62fd2315ceSDmitri Gribenko   // included or excluded.
63fd2315ceSDmitri Gribenko   {
64946eb7a0SCarlos Galvez     TypeParam Filter("a*,-aaa");
65fd2315ceSDmitri Gribenko 
66fd2315ceSDmitri Gribenko     EXPECT_FALSE(Filter.contains(""));
67fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("a"));
68fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("aa"));
69fd2315ceSDmitri Gribenko     EXPECT_FALSE(Filter.contains("aaa"));
70fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("aaaa"));
71fd2315ceSDmitri Gribenko   }
72fd2315ceSDmitri Gribenko   {
73946eb7a0SCarlos Galvez     TypeParam Filter("-aaa,a*");
74fd2315ceSDmitri Gribenko 
75fd2315ceSDmitri Gribenko     EXPECT_FALSE(Filter.contains(""));
76fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("a"));
77fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("aa"));
78fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("aaa"));
79fd2315ceSDmitri Gribenko     EXPECT_TRUE(Filter.contains("aaaa"));
80fd2315ceSDmitri Gribenko   }
81fd2315ceSDmitri Gribenko }
82fd2315ceSDmitri Gribenko 
TYPED_TEST(GlobListTest,WhitespacesAtBegin)83946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, WhitespacesAtBegin) {
84946eb7a0SCarlos Galvez   TypeParam Filter("-*,   a.b.*");
85a6fed93fSDmitri Gribenko 
86a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("a.b.c"));
87a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("b.c"));
88a6fed93fSDmitri Gribenko }
89a6fed93fSDmitri Gribenko 
TYPED_TEST(GlobListTest,Complex)90946eb7a0SCarlos Galvez TYPED_TEST(GlobListTest, Complex) {
91946eb7a0SCarlos Galvez   TypeParam Filter(
92946eb7a0SCarlos Galvez       "*,-a.*, -b.*, \r  \n  a.1.* ,-a.1.A.*,-..,-...,-..+,-*$, -*qwe* ");
93a6fed93fSDmitri Gribenko 
94a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("aaa"));
95a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("qqq"));
96a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("a."));
97a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("a.b"));
98a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("b."));
99a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("b.b"));
100a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("a.1.b"));
101a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("a.1.A.a"));
102a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("qwe"));
103a6fed93fSDmitri Gribenko   EXPECT_FALSE(Filter.contains("asdfqweasdf"));
104a6fed93fSDmitri Gribenko   EXPECT_TRUE(Filter.contains("asdfqwEasdf"));
105a6fed93fSDmitri Gribenko }
106a6fed93fSDmitri Gribenko 
TYPED_TEST(GlobListTest,NewlineCharactersAsSeparators)1072b21fc55SDanny Mösch TYPED_TEST(GlobListTest, NewlineCharactersAsSeparators) {
1082b21fc55SDanny Mösch   TypeParam Filter("a*  \n b,\n-c*,dd");
1092b21fc55SDanny Mösch 
1102b21fc55SDanny Mösch   EXPECT_FALSE(Filter.contains(""));
1112b21fc55SDanny Mösch   EXPECT_TRUE(Filter.contains("aaa"));
1122b21fc55SDanny Mösch   EXPECT_TRUE(Filter.contains("b"));
1132b21fc55SDanny Mösch   EXPECT_FALSE(Filter.contains("c"));
1142b21fc55SDanny Mösch   EXPECT_FALSE(Filter.contains("ccc"));
1152b21fc55SDanny Mösch   EXPECT_FALSE(Filter.contains("d"));
1162b21fc55SDanny Mösch   EXPECT_TRUE(Filter.contains("dd"));
1172b21fc55SDanny Mösch   EXPECT_FALSE(Filter.contains("ddd"));
1182b21fc55SDanny Mösch }
1192b21fc55SDanny Mösch 
120a6fed93fSDmitri Gribenko } // namespace tidy
121a6fed93fSDmitri Gribenko } // namespace clang
122