blob: bc2338552b2908890372f502cbf3aa5c5bbc6676 [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:
11 void registerMatchers(ast_matchers::MatchFinder *Finder) override {
12 Finder->addMatcher(ast_matchers::varDecl().bind("var"), this);
13 }
14 void check(const ast_matchers::MatchFinder::MatchResult &Result) override {
15 const VarDecl *Var = Result.Nodes.getNodeAs<VarDecl>("var");
16 // Add diagnostics in the wrong order.
17 diag(Var->getLocation(), "variable");
18 diag(Var->getTypeSpecStartLoc(), "type specifier");
19 }
20};
21
22TEST(ClangTidyDiagnosticConsumer, SortsErrors) {
Alexander Kornienko826b5ad2014-05-09 12:24:09 +000023 std::vector<ClangTidyError> Errors;
24 runCheckOnCode<TestCheck>("int a;", &Errors);
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000025 EXPECT_EQ(2ul, Errors.size());
26 // FIXME: Remove " []" once the check name is removed from the message text.
27 EXPECT_EQ("type specifier []", Errors[0].Message.Message);
28 EXPECT_EQ("variable []", Errors[1].Message.Message);
29}
30
Alexander Kornienko23fe9592014-05-15 14:27:36 +000031TEST(ChecksFilter, Empty) {
32 ChecksFilter Filter("");
33
34 EXPECT_TRUE(Filter.isCheckEnabled(""));
35 EXPECT_FALSE(Filter.isCheckEnabled("aaa"));
36}
37
38TEST(ChecksFilter, Nothing) {
39 ChecksFilter Filter("-*");
40
41 EXPECT_FALSE(Filter.isCheckEnabled(""));
42 EXPECT_FALSE(Filter.isCheckEnabled("a"));
43 EXPECT_FALSE(Filter.isCheckEnabled("-*"));
44 EXPECT_FALSE(Filter.isCheckEnabled("-"));
45 EXPECT_FALSE(Filter.isCheckEnabled("*"));
46}
47
48TEST(ChecksFilter, Everything) {
49 ChecksFilter Filter("*");
50
51 EXPECT_TRUE(Filter.isCheckEnabled(""));
52 EXPECT_TRUE(Filter.isCheckEnabled("aaaa"));
53 EXPECT_TRUE(Filter.isCheckEnabled("-*"));
54 EXPECT_TRUE(Filter.isCheckEnabled("-"));
55 EXPECT_TRUE(Filter.isCheckEnabled("*"));
56}
57
58TEST(ChecksFilter, Simple) {
59 ChecksFilter Filter("aaa");
60
61 EXPECT_TRUE(Filter.isCheckEnabled("aaa"));
62 EXPECT_FALSE(Filter.isCheckEnabled(""));
63 EXPECT_FALSE(Filter.isCheckEnabled("aa"));
64 EXPECT_FALSE(Filter.isCheckEnabled("aaaa"));
65 EXPECT_FALSE(Filter.isCheckEnabled("bbb"));
66}
67
68TEST(ChecksFilter, Complex) {
Alexander Kornienko6262d232014-05-15 15:56:58 +000069 ChecksFilter Filter("*,-a.*,-b.*,a.1.*,-a.1.A.*,-..,-...,-..+,-*$,-*qwe*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000070
71 EXPECT_TRUE(Filter.isCheckEnabled("aaa"));
72 EXPECT_TRUE(Filter.isCheckEnabled("qqq"));
73 EXPECT_FALSE(Filter.isCheckEnabled("a."));
74 EXPECT_FALSE(Filter.isCheckEnabled("a.b"));
75 EXPECT_FALSE(Filter.isCheckEnabled("b."));
76 EXPECT_FALSE(Filter.isCheckEnabled("b.b"));
Alexander Kornienko6262d232014-05-15 15:56:58 +000077 EXPECT_TRUE(Filter.isCheckEnabled("a.1.b"));
78 EXPECT_FALSE(Filter.isCheckEnabled("a.1.A.a"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000079 EXPECT_FALSE(Filter.isCheckEnabled("qwe"));
80 EXPECT_FALSE(Filter.isCheckEnabled("asdfqweasdf"));
81 EXPECT_TRUE(Filter.isCheckEnabled("asdfqwEasdf"));
82}
83
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000084} // namespace test
85} // namespace tidy
86} // namespace clang