blob: 621dc5e805f9b3dd9ac6564e0482adb39d23ffa5 [file] [log] [blame]
Alexander Kornienko9eb8c922014-04-08 12:27:49 +00001#include "ClangTidy.h"
2#include "ClangTidyTest.h"
3#include "gtest/gtest.h"
4
5namespace clang {
6namespace tidy {
7namespace test {
8
9class TestCheck : public ClangTidyCheck {
10public:
Alexander Kornienko6e0cbc82014-09-12 08:53:36 +000011 TestCheck(StringRef Name, ClangTidyContext *Context)
12 : ClangTidyCheck(Name, Context) {}
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000013 void registerMatchers(ast_matchers::MatchFinder *Finder) override {
14 Finder->addMatcher(ast_matchers::varDecl().bind("var"), this);
15 }
16 void check(const ast_matchers::MatchFinder::MatchResult &Result) override {
17 const VarDecl *Var = Result.Nodes.getNodeAs<VarDecl>("var");
18 // Add diagnostics in the wrong order.
19 diag(Var->getLocation(), "variable");
20 diag(Var->getTypeSpecStartLoc(), "type specifier");
21 }
22};
23
24TEST(ClangTidyDiagnosticConsumer, SortsErrors) {
Alexander Kornienko826b5ad2014-05-09 12:24:09 +000025 std::vector<ClangTidyError> Errors;
26 runCheckOnCode<TestCheck>("int a;", &Errors);
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000027 EXPECT_EQ(2ul, Errors.size());
Alexander Kornienko6e0cbc82014-09-12 08:53:36 +000028 EXPECT_EQ("type specifier", Errors[0].Message.Message);
29 EXPECT_EQ("variable", Errors[1].Message.Message);
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000030}
31
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000032TEST(GlobList, Empty) {
33 GlobList Filter("");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000034
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000035 EXPECT_TRUE(Filter.contains(""));
36 EXPECT_FALSE(Filter.contains("aaa"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000037}
38
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000039TEST(GlobList, Nothing) {
40 GlobList Filter("-*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000041
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000042 EXPECT_FALSE(Filter.contains(""));
43 EXPECT_FALSE(Filter.contains("a"));
44 EXPECT_FALSE(Filter.contains("-*"));
45 EXPECT_FALSE(Filter.contains("-"));
46 EXPECT_FALSE(Filter.contains("*"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000047}
48
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000049TEST(GlobList, Everything) {
50 GlobList Filter("*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000051
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000052 EXPECT_TRUE(Filter.contains(""));
53 EXPECT_TRUE(Filter.contains("aaaa"));
54 EXPECT_TRUE(Filter.contains("-*"));
55 EXPECT_TRUE(Filter.contains("-"));
56 EXPECT_TRUE(Filter.contains("*"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000057}
58
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000059TEST(GlobList, Simple) {
60 GlobList Filter("aaa");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000061
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000062 EXPECT_TRUE(Filter.contains("aaa"));
63 EXPECT_FALSE(Filter.contains(""));
64 EXPECT_FALSE(Filter.contains("aa"));
65 EXPECT_FALSE(Filter.contains("aaaa"));
66 EXPECT_FALSE(Filter.contains("bbb"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000067}
68
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000069TEST(GlobList, Complex) {
70 GlobList Filter("*,-a.*,-b.*,a.1.*,-a.1.A.*,-..,-...,-..+,-*$,-*qwe*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000071
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000072 EXPECT_TRUE(Filter.contains("aaa"));
73 EXPECT_TRUE(Filter.contains("qqq"));
74 EXPECT_FALSE(Filter.contains("a."));
75 EXPECT_FALSE(Filter.contains("a.b"));
76 EXPECT_FALSE(Filter.contains("b."));
77 EXPECT_FALSE(Filter.contains("b.b"));
78 EXPECT_TRUE(Filter.contains("a.1.b"));
79 EXPECT_FALSE(Filter.contains("a.1.A.a"));
80 EXPECT_FALSE(Filter.contains("qwe"));
81 EXPECT_FALSE(Filter.contains("asdfqweasdf"));
82 EXPECT_TRUE(Filter.contains("asdfqwEasdf"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000083}
84
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000085} // namespace test
86} // namespace tidy
87} // namespace clang