diff options
author | Alexander Kornienko <alexfh@google.com> | 2014-10-02 19:09:56 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2014-10-02 19:09:56 +0000 |
commit | 8f7e7f73ea54414d86acaf1cf37ea8a1c3d28cec (patch) | |
tree | 3b9ebac2f3f0ded6171c7dd52aefacd9862414d5 /clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp | |
parent | 325111bcc6ee751e16faeeca405ed4b103b2ffce (diff) | |
download | bcm5719-llvm-8f7e7f73ea54414d86acaf1cf37ea8a1c3d28cec.tar.gz bcm5719-llvm-8f7e7f73ea54414d86acaf1cf37ea8a1c3d28cec.zip |
[clang-tidy] Add check misc-braces-around-statements.
This check looks for if statements and loops: for, range-for, while and
do-while, and verifies that the inside statements are inside braces '{}'.
If not, proposes to add braces around them.
Example:
if (condition)
action();
becomes
if (condition) {
action();
}
This check ought to be used with the -format option, so that the braces be
well-formatted.
Patch by Marek Kurdej!
http://reviews.llvm.org/D5395
llvm-svn: 218898
Diffstat (limited to 'clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp')
-rw-r--r-- | clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp b/clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp index 3f8222e297d..97390c267dd 100644 --- a/clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp +++ b/clang-tools-extra/unittests/clang-tidy/MiscModuleTest.cpp @@ -1,5 +1,6 @@ #include "ClangTidyTest.h" #include "misc/ArgumentCommentCheck.h" +#include "misc/BracesAroundStatementsCheck.h" #include "gtest/gtest.h" namespace clang { @@ -35,6 +36,334 @@ TEST(ArgumentCommentCheckTest, OtherEditDistanceBelowThreshold) { "void f(int xxx, int yyy); void g() { f(/*xxy=*/0, 0); }"); } +TEST(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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(BracesAroundStatementsCheck, 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" + "}"); +} + } // namespace test } // namespace tidy } // namespace clang |