blob: 4b5dbb2e6cee183d86130e7b9807c53a703337c9 [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 Kornienkob3d331d2014-08-06 11:49:10 +000031TEST(GlobList, Empty) {
32 GlobList Filter("");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000033
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000034 EXPECT_TRUE(Filter.contains(""));
35 EXPECT_FALSE(Filter.contains("aaa"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000036}
37
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000038TEST(GlobList, Nothing) {
39 GlobList Filter("-*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000040
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000041 EXPECT_FALSE(Filter.contains(""));
42 EXPECT_FALSE(Filter.contains("a"));
43 EXPECT_FALSE(Filter.contains("-*"));
44 EXPECT_FALSE(Filter.contains("-"));
45 EXPECT_FALSE(Filter.contains("*"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000046}
47
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000048TEST(GlobList, Everything) {
49 GlobList Filter("*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000050
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000051 EXPECT_TRUE(Filter.contains(""));
52 EXPECT_TRUE(Filter.contains("aaaa"));
53 EXPECT_TRUE(Filter.contains("-*"));
54 EXPECT_TRUE(Filter.contains("-"));
55 EXPECT_TRUE(Filter.contains("*"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000056}
57
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000058TEST(GlobList, Simple) {
59 GlobList Filter("aaa");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000060
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000061 EXPECT_TRUE(Filter.contains("aaa"));
62 EXPECT_FALSE(Filter.contains(""));
63 EXPECT_FALSE(Filter.contains("aa"));
64 EXPECT_FALSE(Filter.contains("aaaa"));
65 EXPECT_FALSE(Filter.contains("bbb"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000066}
67
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000068TEST(GlobList, Complex) {
69 GlobList Filter("*,-a.*,-b.*,a.1.*,-a.1.A.*,-..,-...,-..+,-*$,-*qwe*");
Alexander Kornienko23fe9592014-05-15 14:27:36 +000070
Alexander Kornienkob3d331d2014-08-06 11:49:10 +000071 EXPECT_TRUE(Filter.contains("aaa"));
72 EXPECT_TRUE(Filter.contains("qqq"));
73 EXPECT_FALSE(Filter.contains("a."));
74 EXPECT_FALSE(Filter.contains("a.b"));
75 EXPECT_FALSE(Filter.contains("b."));
76 EXPECT_FALSE(Filter.contains("b.b"));
77 EXPECT_TRUE(Filter.contains("a.1.b"));
78 EXPECT_FALSE(Filter.contains("a.1.A.a"));
79 EXPECT_FALSE(Filter.contains("qwe"));
80 EXPECT_FALSE(Filter.contains("asdfqweasdf"));
81 EXPECT_TRUE(Filter.contains("asdfqwEasdf"));
Alexander Kornienko23fe9592014-05-15 14:27:36 +000082}
83
Alexander Kornienko9eb8c922014-04-08 12:27:49 +000084} // namespace test
85} // namespace tidy
86} // namespace clang