Nathan James 6357f1c1aa
[clang-tidy] Remove unnecessary code from ReadabilityModuleTest
D56303 added testing code that was then made redundant by the changes in D125026. However this code wasn't completely removed in the latter patch.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D130026
2022-07-19 05:21:19 +01:00

518 lines
21 KiB
C++

#include "ClangTidyTest.h"
#include "readability/BracesAroundStatementsCheck.h"
#include "readability/NamespaceCommentCheck.h"
#include "readability/SimplifyBooleanExprCheck.h"
#include "gtest/gtest.h"
namespace clang {
namespace tidy {
namespace test {
using readability::BracesAroundStatementsCheck;
using readability::NamespaceCommentCheck;
using readability::SimplifyBooleanExprCheck;
TEST(NamespaceCommentCheckTest, Basic) {
EXPECT_EQ("namespace i {\n} // namespace i",
runCheckOnCode<NamespaceCommentCheck>("namespace i {\n}"));
EXPECT_EQ("namespace {\n} // namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n}"));
EXPECT_EQ("namespace i { namespace j {\n} // namespace j\n } // namespace i",
runCheckOnCode<NamespaceCommentCheck>(
"namespace i { namespace j {\n} }"));
}
TEST(NamespaceCommentCheckTest, SingleLineNamespaces) {
EXPECT_EQ(
"namespace i { namespace j { } }",
runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j { } }"));
}
TEST(NamespaceCommentCheckTest, CheckExistingComments) {
EXPECT_EQ("namespace i { namespace j {\n"
"} /* namespace j */ } // namespace i\n"
" /* random comment */",
runCheckOnCode<NamespaceCommentCheck>(
"namespace i { namespace j {\n"
"} /* namespace j */ } /* random comment */"));
EXPECT_EQ("namespace {\n"
"} // namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} // namespace"));
EXPECT_EQ("namespace {\n"
"} //namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} //namespace"));
EXPECT_EQ("namespace {\n"
"} // anonymous namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} // anonymous namespace"));
EXPECT_EQ("namespace {\n"
"} // Anonymous namespace.",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} // Anonymous namespace."));
EXPECT_EQ(
"namespace q {\n"
"} // namespace q",
runCheckOnCode<NamespaceCommentCheck>("namespace q {\n"
"} // anonymous namespace q"));
EXPECT_EQ(
"namespace My_NameSpace123 {\n"
"} // namespace My_NameSpace123",
runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n"
"} // namespace My_NameSpace123"));
EXPECT_EQ(
"namespace My_NameSpace123 {\n"
"} //namespace My_NameSpace123",
runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n"
"} //namespace My_NameSpace123"));
EXPECT_EQ("namespace My_NameSpace123 {\n"
"} // end namespace My_NameSpace123",
runCheckOnCode<NamespaceCommentCheck>(
"namespace My_NameSpace123 {\n"
"} // end namespace My_NameSpace123"));
// Understand comments only on the same line.
EXPECT_EQ("namespace {\n"
"} // namespace\n"
"// namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"}\n"
"// namespace"));
}
TEST(NamespaceCommentCheckTest, FixWrongComments) {
EXPECT_EQ("namespace i { namespace jJ0_ {\n"
"} // namespace jJ0_\n"
" } // namespace i\n"
" /* random comment */",
runCheckOnCode<NamespaceCommentCheck>(
"namespace i { namespace jJ0_ {\n"
"} /* namespace qqq */ } /* random comment */"));
EXPECT_EQ("namespace {\n"
"} // namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} // namespace asdf"));
// Remove unknown line comments. These are likely to be an unrecognized form
// of a namespace ending comment.
EXPECT_EQ("namespace {\n"
"} // namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} // random text"));
}
TEST(BracesAroundStatementsCheckTest, IfWithComments) {
EXPECT_EQ("int main() {\n"
" if (false /*dummy token*/) {\n"
" // comment\n"
" return -1; /**/\n"
"}\n"
" if (false) {\n"
" return -1; // comment\n"
"}\n"
" if (false) {\n"
" return -1; \n"
"}/* multi-line \n comment */\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" if (false /*dummy token*/)\n"
" // comment\n"
" return -1; /**/\n"
" if (false)\n"
" return -1; // comment\n"
" if (false)\n"
" return -1; /* multi-line \n comment */\n"
"}"));
EXPECT_EQ("int main() {\n"
" if (false /*dummy token*/) {\n"
" // comment\n"
" return -1 /**/ ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" if (false /*dummy token*/)\n"
" // comment\n"
" return -1 /**/ ;\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, If) {
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" if (false) {\n"
" return -1;\n"
" }\n"
"}");
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" if (auto Cond = false) {\n"
" return -1;\n"
" }\n"
"}");
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" if (false) {\n"
" return -1;\n"
" } else {\n"
" return -2;\n"
" }\n"
"}");
EXPECT_EQ("int main() {\n"
" if (false) {\n"
" return -1;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" if (false)\n"
" return -1;\n"
"}"));
EXPECT_EQ("int main() {\n"
" if (auto Cond = false /**/ ) {\n"
" return -1;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" if (auto Cond = false /**/ )\n"
" return -1;\n"
"}"));
// FIXME: Consider adding braces before EMPTY_MACRO and after the statement.
EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
"#define EMPTY_MACRO\n"
"int main() {\n"
" if (auto Cond = false EMPTY_MACRO /**/ ) EMPTY_MACRO\n"
" return -1;\n"
"}");
EXPECT_EQ("int main() {\n"
" if (true) { return -1/**/ ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" if (true) return -1/**/ ;\n"
"}"));
EXPECT_EQ("int main() {\n"
" if (false) {\n"
" return -1;\n"
" } else {\n"
" return -2;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" if (false)\n"
" return -1;\n"
" else\n"
" return -2;\n"
"}"));
EXPECT_EQ("int main() {\n"
" if (false) {\n"
" return -1;\n"
" } else if (1 == 2) {\n"
" return -2;\n"
" } else {\n"
" return -3;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" if (false)\n"
" return -1;\n"
" else if (1 == 2)\n"
" return -2;\n"
" else\n"
" return -3;\n"
"}"));
EXPECT_EQ("int main() {\n"
" if (false) {\n"
" return -1;\n"
" } else if (1 == 2) {\n"
" return -2;\n"
" } else {\n"
" return -3;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" if (false)\n"
" return -1;\n"
" else if (1 == 2) {\n"
" return -2;\n"
" } else\n"
" return -3;\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, IfElseWithShortStatements) {
ClangTidyOptions Options;
Options.CheckOptions["test-check-0.ShortStatementLines"] = "1";
EXPECT_EQ("int main() {\n"
" if (true) return 1;\n"
" if (false) { return -1;\n"
" } else if (1 == 2) { return -2;\n"
" } else { return -3;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" if (true) return 1;\n"
" if (false) return -1;\n"
" else if (1 == 2) return -2;\n"
" else return -3;\n"
"}",
nullptr, "input.cc", None, Options));
// If the last else is an else-if, we also force it.
EXPECT_EQ("int main() {\n"
" if (false) { return -1;\n"
" } else if (1 == 2) { return -2;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" if (false) return -1;\n"
" else if (1 == 2) return -2;\n"
"}",
nullptr, "input.cc", None, Options));
}
TEST(BracesAroundStatementsCheckTest, For) {
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" for (;;) {\n"
" ;\n"
" }\n"
"}");
EXPECT_EQ("int main() {\n"
" for (;;) {\n"
" ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" for (;;)\n"
" ;\n"
"}"));
EXPECT_EQ("int main() {\n"
" for (;;) {\n"
" /**/ ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" for (;;)\n"
" /**/ ;\n"
"}"));
EXPECT_EQ("int main() {\n"
" for (;;) {\n"
" return -1 /**/ ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" for (;;)\n"
" return -1 /**/ ;\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, ForRange) {
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" int arr[4];\n"
" for (int i : arr) {\n"
" ;\n"
" }\n"
"}");
EXPECT_EQ("int main() {\n"
" int arr[4];\n"
" for (int i : arr) {\n"
" ;\n"
"}\n"
" for (int i : arr) {\n"
" return -1 ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" int arr[4];\n"
" for (int i : arr)\n"
" ;\n"
" for (int i : arr)\n"
" return -1 ;\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, DoWhile) {
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" do {\n"
" ;\n"
" } while (false);\n"
"}");
EXPECT_EQ("int main() {\n"
" do {\n"
" ;\n"
" } while (false);\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" do\n"
" ;\n"
" while (false);\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, While) {
EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
" while (false) {\n"
" ;\n"
" }\n"
"}");
EXPECT_EQ("int main() {\n"
" while (false) {\n"
" ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" while (false)\n"
" ;\n"
"}"));
EXPECT_EQ("int main() {\n"
" while (auto Cond = false) {\n"
" ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" while (auto Cond = false)\n"
" ;\n"
"}"));
EXPECT_EQ("int main() {\n"
" while (false /*dummy token*/) {\n"
" ;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" while (false /*dummy token*/)\n"
" ;\n"
"}"));
EXPECT_EQ("int main() {\n"
" while (false) {\n"
" break;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" while (false)\n"
" break;\n"
"}"));
EXPECT_EQ("int main() {\n"
" while (false) {\n"
" break /**/;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" while (false)\n"
" break /**/;\n"
"}"));
EXPECT_EQ("int main() {\n"
" while (false) {\n"
" /**/;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" while (false)\n"
" /**/;\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, Nested) {
EXPECT_EQ("int main() {\n"
" do { if (true) {}} while (false);\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" do if (true) {}while (false);\n"
"}"));
EXPECT_EQ("int main() {\n"
" do { if (true) {}} while (false);\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>(
"int main() {\n"
" do if (true) {}while (false);\n"
"}"));
EXPECT_EQ(
"int main() {\n"
" if (true) {\n"
" // comment\n"
" if (false) {\n"
" // comment\n"
" /**/ ; // comment\n"
" }\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
" if (true)\n"
" // comment\n"
" if (false) {\n"
" // comment\n"
" /**/ ; // comment\n"
" }\n"
"}"));
}
TEST(BracesAroundStatementsCheckTest, Macros) {
EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
"#define IF(COND) if (COND) return -1;\n"
"int main() {\n"
" IF(false)\n"
"}");
EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
"#define FOR(COND) for (COND) return -1;\n"
"int main() {\n"
" FOR(;;)\n"
"}");
EXPECT_EQ("#define DO_IT ++i\n"
"int i = 0;\n"
"int main() {\n"
" if (false) {\n"
" DO_IT;\n"
" } else if (1 == 2) {\n"
" DO_IT;\n"
" } else {\n"
" DO_IT;\n"
"}\n"
"}",
runCheckOnCode<BracesAroundStatementsCheck>("#define DO_IT ++i\n"
"int i = 0;\n"
"int main() {\n"
" if (false)\n"
" DO_IT;\n"
" else if (1 == 2)\n"
" DO_IT;\n"
" else\n"
" DO_IT;\n"
"}"));
}
#define EXPECT_NO_CHANGES_WITH_OPTS(Check, Opts, Code) \
EXPECT_EQ(Code, runCheckOnCode<Check>(Code, nullptr, "input.cc", None, Opts))
TEST(BracesAroundStatementsCheckTest, ImplicitCastInReturn) {
ClangTidyOptions Opts;
Opts.CheckOptions["test-check-0.ShortStatementLines"] = "1";
StringRef Input = "const char *f() {\n"
" if (true) return \"\";\n"
" return \"abc\";\n"
"}\n";
EXPECT_NO_CHANGES_WITH_OPTS(BracesAroundStatementsCheck, Opts, Input);
EXPECT_EQ("const char *f() {\n"
" if (true) { return \"\";\n"
"}\n"
" return \"abc\";\n"
"}\n",
runCheckOnCode<BracesAroundStatementsCheck>(Input));
}
TEST(SimplifyBooleanExprCheckTest, CodeWithError) {
// Fixes PR55557
// Need to downgrade Wreturn-type from error as runCheckOnCode will fatal_exit
// if any errors occur.
EXPECT_EQ("void foo(bool b){ return b; }",
runCheckOnCode<SimplifyBooleanExprCheck>(
"void foo(bool b){ if (b) return true; return false; }",
nullptr, "input.cc", {"-Wno-error=return-type"}));
}
} // namespace test
} // namespace tidy
} // namespace clang