brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.4 KiB · 72f21ae Raw
518 lines · cpp
1#include "ClangTidyTest.h"2#include "readability/BracesAroundStatementsCheck.h"3#include "readability/NamespaceCommentCheck.h"4#include "readability/SimplifyBooleanExprCheck.h"5#include "gtest/gtest.h"6 7namespace clang {8namespace tidy {9namespace test {10 11using readability::BracesAroundStatementsCheck;12using readability::NamespaceCommentCheck;13using readability::SimplifyBooleanExprCheck;14 15TEST(NamespaceCommentCheckTest, Basic) {16  EXPECT_EQ("namespace i {\n} // namespace i",17            runCheckOnCode<NamespaceCommentCheck>("namespace i {\n}"));18  EXPECT_EQ("namespace {\n} // namespace",19            runCheckOnCode<NamespaceCommentCheck>("namespace {\n}"));20  EXPECT_EQ("namespace i { namespace j {\n} // namespace j\n } // namespace i",21            runCheckOnCode<NamespaceCommentCheck>(22                "namespace i { namespace j {\n} }"));23}24 25TEST(NamespaceCommentCheckTest, SingleLineNamespaces) {26  EXPECT_EQ(27      "namespace i { namespace j { } }",28      runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j { } }"));29}30 31TEST(NamespaceCommentCheckTest, CheckExistingComments) {32  EXPECT_EQ("namespace i { namespace j {\n"33            "} /* namespace j */ } // namespace i\n"34            " /* random comment */",35            runCheckOnCode<NamespaceCommentCheck>(36                "namespace i { namespace j {\n"37                "} /* namespace j */ } /* random comment */"));38  EXPECT_EQ("namespace {\n"39            "} // namespace",40            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"41                                                  "} // namespace"));42  EXPECT_EQ("namespace {\n"43            "} //namespace",44            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"45                                                  "} //namespace"));46  EXPECT_EQ("namespace {\n"47            "} // anonymous namespace",48            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"49                                                  "} // anonymous namespace"));50  EXPECT_EQ("namespace {\n"51            "} // Anonymous namespace.",52            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"53                                                  "} // Anonymous namespace."));54  EXPECT_EQ(55      "namespace q {\n"56      "} // namespace q",57      runCheckOnCode<NamespaceCommentCheck>("namespace q {\n"58                                            "} // anonymous namespace q"));59  EXPECT_EQ(60      "namespace My_NameSpace123 {\n"61      "} // namespace My_NameSpace123",62      runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n"63                                            "} // namespace My_NameSpace123"));64  EXPECT_EQ(65      "namespace My_NameSpace123 {\n"66      "} //namespace My_NameSpace123",67      runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n"68                                            "} //namespace My_NameSpace123"));69  EXPECT_EQ("namespace My_NameSpace123 {\n"70            "} //  end namespace   My_NameSpace123",71            runCheckOnCode<NamespaceCommentCheck>(72                "namespace My_NameSpace123 {\n"73                "} //  end namespace   My_NameSpace123"));74  // Understand comments only on the same line.75  EXPECT_EQ("namespace {\n"76            "} // namespace\n"77            "// namespace",78            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"79                                                  "}\n"80                                                  "// namespace"));81}82 83TEST(NamespaceCommentCheckTest, FixWrongComments) {84  EXPECT_EQ("namespace i { namespace jJ0_ {\n"85            "} // namespace jJ0_\n"86            " } // namespace i\n"87            " /* random comment */",88            runCheckOnCode<NamespaceCommentCheck>(89                "namespace i { namespace jJ0_ {\n"90                "} /* namespace qqq */ } /* random comment */"));91  EXPECT_EQ("namespace {\n"92            "} // namespace",93            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"94                                                  "} // namespace asdf"));95  // Remove unknown line comments. These are likely to be an unrecognized form96  // of a namespace ending comment.97  EXPECT_EQ("namespace {\n"98            "} // namespace",99            runCheckOnCode<NamespaceCommentCheck>("namespace {\n"100                                                  "} // random text"));101}102 103TEST(BracesAroundStatementsCheckTest, IfWithComments) {104  EXPECT_EQ("int main() {\n"105            "  if (false /*dummy token*/) {\n"106            "    // comment\n"107            "    return -1; /**/\n"108            "}\n"109            "  if (false) {\n"110            "    return -1; // comment\n"111            "}\n"112            "  if (false) {\n"113            "    return -1; \n"114            "}/* multi-line \n comment */\n"115            "}",116            runCheckOnCode<BracesAroundStatementsCheck>(117                "int main() {\n"118                "  if (false /*dummy token*/)\n"119                "    // comment\n"120                "    return -1; /**/\n"121                "  if (false)\n"122                "    return -1; // comment\n"123                "  if (false)\n"124                "    return -1; /* multi-line \n comment */\n"125                "}"));126  EXPECT_EQ("int main() {\n"127            "  if (false /*dummy token*/) {\n"128            "    // comment\n"129            "    return -1 /**/ ;\n"130            "}\n"131            "}",132            runCheckOnCode<BracesAroundStatementsCheck>(133                "int main() {\n"134                "  if (false /*dummy token*/)\n"135                "    // comment\n"136                "    return -1 /**/ ;\n"137                "}"));138}139 140TEST(BracesAroundStatementsCheckTest, If) {141  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"142                                                 "  if (false) {\n"143                                                 "    return -1;\n"144                                                 "  }\n"145                                                 "}");146  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"147                                                 "  if (auto Cond = false) {\n"148                                                 "    return -1;\n"149                                                 "  }\n"150                                                 "}");151  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"152                                                 "  if (false) {\n"153                                                 "    return -1;\n"154                                                 "  } else {\n"155                                                 "    return -2;\n"156                                                 "  }\n"157                                                 "}");158  EXPECT_EQ("int main() {\n"159            "  if (false) {\n"160            "    return -1;\n"161            "}\n"162            "}",163            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"164                                                        "  if (false)\n"165                                                        "    return -1;\n"166                                                        "}"));167  EXPECT_EQ("int main() {\n"168            "  if (auto Cond = false /**/ ) {\n"169            "    return -1;\n"170            "}\n"171            "}",172            runCheckOnCode<BracesAroundStatementsCheck>(173                "int main() {\n"174                "  if (auto Cond = false /**/ )\n"175                "    return -1;\n"176                "}"));177  // FIXME: Consider adding braces before EMPTY_MACRO and after the statement.178  EXPECT_NO_CHANGES(BracesAroundStatementsCheck,179                    "#define EMPTY_MACRO\n"180                    "int main() {\n"181                    "  if (auto Cond = false EMPTY_MACRO /**/ ) EMPTY_MACRO\n"182                    "    return -1;\n"183                    "}");184  EXPECT_EQ("int main() {\n"185            "  if (true) { return -1/**/ ;\n"186            "}\n"187            "}",188            runCheckOnCode<BracesAroundStatementsCheck>(189                "int main() {\n"190                "  if (true) return -1/**/ ;\n"191                "}"));192  EXPECT_EQ("int main() {\n"193            "  if (false) {\n"194            "    return -1;\n"195            "  } else {\n"196            "    return -2;\n"197            "}\n"198            "}",199            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"200                                                        "  if (false)\n"201                                                        "    return -1;\n"202                                                        "  else\n"203                                                        "    return -2;\n"204                                                        "}"));205  EXPECT_EQ("int main() {\n"206            "  if (false) {\n"207            "    return -1;\n"208            "  } else if (1 == 2) {\n"209            "    return -2;\n"210            "  } else {\n"211            "    return -3;\n"212            "}\n"213            "}",214            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"215                                                        "  if (false)\n"216                                                        "    return -1;\n"217                                                        "  else if (1 == 2)\n"218                                                        "    return -2;\n"219                                                        "  else\n"220                                                        "    return -3;\n"221                                                        "}"));222  EXPECT_EQ("int main() {\n"223            "  if (false) {\n"224            "    return -1;\n"225            "  } else if (1 == 2) {\n"226            "    return -2;\n"227            "  } else {\n"228            "    return -3;\n"229            "}\n"230            "}",231            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"232                                                        "  if (false)\n"233                                                        "    return -1;\n"234                                                        "  else if (1 == 2) {\n"235                                                        "    return -2;\n"236                                                        "  } else\n"237                                                        "    return -3;\n"238                                                        "}"));239}240 241TEST(BracesAroundStatementsCheckTest, IfElseWithShortStatements) {242  ClangTidyOptions Options;243  Options.CheckOptions["test-check-0.ShortStatementLines"] = "1";244 245  EXPECT_EQ("int main() {\n"246            "  if (true) return 1;\n"247            "  if (false) { return -1;\n"248            "  } else if (1 == 2) { return -2;\n"249            "  } else { return -3;\n"250            "}\n"251            "}",252            runCheckOnCode<BracesAroundStatementsCheck>(253                "int main() {\n"254                "  if (true) return 1;\n"255                "  if (false) return -1;\n"256                "  else if (1 == 2) return -2;\n"257                "  else return -3;\n"258                "}",259                nullptr, "input.cc", {}, Options));260 261  // If the last else is an else-if, we also force it.262  EXPECT_EQ("int main() {\n"263            "  if (false) { return -1;\n"264            "  } else if (1 == 2) { return -2;\n"265            "}\n"266            "}",267            runCheckOnCode<BracesAroundStatementsCheck>(268                "int main() {\n"269                "  if (false) return -1;\n"270                "  else if (1 == 2) return -2;\n"271                "}",272                nullptr, "input.cc", {}, Options));273}274 275TEST(BracesAroundStatementsCheckTest, For) {276  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"277                                                 "  for (;;) {\n"278                                                 "    ;\n"279                                                 "  }\n"280                                                 "}");281  EXPECT_EQ("int main() {\n"282            "  for (;;) {\n"283            "    ;\n"284            "}\n"285            "}",286            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"287                                                        "  for (;;)\n"288                                                        "    ;\n"289                                                        "}"));290  EXPECT_EQ("int main() {\n"291            "  for (;;) {\n"292            "    /**/ ;\n"293            "}\n"294            "}",295            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"296                                                        "  for (;;)\n"297                                                        "    /**/ ;\n"298                                                        "}"));299  EXPECT_EQ("int main() {\n"300            "  for (;;) {\n"301            "    return -1 /**/ ;\n"302            "}\n"303            "}",304            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"305                                                        "  for (;;)\n"306                                                        "    return -1 /**/ ;\n"307                                                        "}"));308}309 310TEST(BracesAroundStatementsCheckTest, ForRange) {311  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"312                                                 "  int arr[4];\n"313                                                 "  for (int i : arr) {\n"314                                                 "    ;\n"315                                                 "  }\n"316                                                 "}");317  EXPECT_EQ("int main() {\n"318            "  int arr[4];\n"319            "  for (int i : arr) {\n"320            "    ;\n"321            "}\n"322            "  for (int i : arr) {\n"323            "    return -1 ;\n"324            "}\n"325            "}",326            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"327                                                        "  int arr[4];\n"328                                                        "  for (int i : arr)\n"329                                                        "    ;\n"330                                                        "  for (int i : arr)\n"331                                                        "    return -1 ;\n"332                                                        "}"));333}334 335TEST(BracesAroundStatementsCheckTest, DoWhile) {336  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"337                                                 "  do {\n"338                                                 "    ;\n"339                                                 "  } while (false);\n"340                                                 "}");341  EXPECT_EQ("int main() {\n"342            "  do {\n"343            "    ;\n"344            "  } while (false);\n"345            "}",346            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"347                                                        "  do\n"348                                                        "    ;\n"349                                                        "  while (false);\n"350                                                        "}"));351}352 353TEST(BracesAroundStatementsCheckTest, While) {354  EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"355                                                 "  while (false) {\n"356                                                 "    ;\n"357                                                 "  }\n"358                                                 "}");359  EXPECT_EQ("int main() {\n"360            "  while (false) {\n"361            "    ;\n"362            "}\n"363            "}",364            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"365                                                        "  while (false)\n"366                                                        "    ;\n"367                                                        "}"));368  EXPECT_EQ("int main() {\n"369            "  while (auto Cond = false) {\n"370            "    ;\n"371            "}\n"372            "}",373            runCheckOnCode<BracesAroundStatementsCheck>(374                "int main() {\n"375                "  while (auto Cond = false)\n"376                "    ;\n"377                "}"));378  EXPECT_EQ("int main() {\n"379            "  while (false /*dummy token*/) {\n"380            "    ;\n"381            "}\n"382            "}",383            runCheckOnCode<BracesAroundStatementsCheck>(384                "int main() {\n"385                "  while (false /*dummy token*/)\n"386                "    ;\n"387                "}"));388  EXPECT_EQ("int main() {\n"389            "  while (false) {\n"390            "    break;\n"391            "}\n"392            "}",393            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"394                                                        "  while (false)\n"395                                                        "    break;\n"396                                                        "}"));397  EXPECT_EQ("int main() {\n"398            "  while (false) {\n"399            "    break /**/;\n"400            "}\n"401            "}",402            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"403                                                        "  while (false)\n"404                                                        "    break /**/;\n"405                                                        "}"));406  EXPECT_EQ("int main() {\n"407            "  while (false) {\n"408            "    /**/;\n"409            "}\n"410            "}",411            runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"412                                                        "  while (false)\n"413                                                        "    /**/;\n"414                                                        "}"));415}416 417TEST(BracesAroundStatementsCheckTest, Nested) {418  EXPECT_EQ("int main() {\n"419            "  do { if (true) {}} while (false);\n"420            "}",421            runCheckOnCode<BracesAroundStatementsCheck>(422                "int main() {\n"423                "  do if (true) {}while (false);\n"424                "}"));425  EXPECT_EQ("int main() {\n"426            "  do { if (true) {}} while (false);\n"427            "}",428            runCheckOnCode<BracesAroundStatementsCheck>(429                "int main() {\n"430                "  do if (true) {}while (false);\n"431                "}"));432  EXPECT_EQ(433      "int main() {\n"434      "  if (true) {\n"435      "    // comment\n"436      "    if (false) {\n"437      "      // comment\n"438      "      /**/ ; // comment\n"439      "    }\n"440      "}\n"441      "}",442      runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"443                                                  "  if (true)\n"444                                                  "    // comment\n"445                                                  "    if (false) {\n"446                                                  "      // comment\n"447                                                  "      /**/ ; // comment\n"448                                                  "    }\n"449                                                  "}"));450}451 452TEST(BracesAroundStatementsCheckTest, Macros) {453  EXPECT_NO_CHANGES(BracesAroundStatementsCheck,454                    "#define IF(COND) if (COND) return -1;\n"455                    "int main() {\n"456                    "  IF(false)\n"457                    "}");458  EXPECT_NO_CHANGES(BracesAroundStatementsCheck,459                    "#define FOR(COND) for (COND) return -1;\n"460                    "int main() {\n"461                    "  FOR(;;)\n"462                    "}");463  EXPECT_EQ("#define DO_IT ++i\n"464            "int i = 0;\n"465            "int main() {\n"466            "  if (false) {\n"467            "    DO_IT;\n"468            "  } else if (1 == 2) {\n"469            "    DO_IT;\n"470            "  } else {\n"471            "    DO_IT;\n"472            "}\n"473            "}",474            runCheckOnCode<BracesAroundStatementsCheck>("#define DO_IT ++i\n"475                                                        "int i = 0;\n"476                                                        "int main() {\n"477                                                        "  if (false)\n"478                                                        "    DO_IT;\n"479                                                        "  else if (1 == 2)\n"480                                                        "    DO_IT;\n"481                                                        "  else\n"482                                                        "    DO_IT;\n"483                                                        "}"));484}485 486#define EXPECT_NO_CHANGES_WITH_OPTS(Check, Opts, Code)                         \487  EXPECT_EQ(Code, runCheckOnCode<Check>(Code, nullptr, "input.cc", {}, Opts))488TEST(BracesAroundStatementsCheckTest, ImplicitCastInReturn) {489  ClangTidyOptions Opts;490  Opts.CheckOptions["test-check-0.ShortStatementLines"] = "1";491 492  StringRef Input = "const char *f() {\n"493                    "  if (true) return \"\";\n"494                    "  return \"abc\";\n"495                    "}\n";496  EXPECT_NO_CHANGES_WITH_OPTS(BracesAroundStatementsCheck, Opts, Input);497  EXPECT_EQ("const char *f() {\n"498            "  if (true) { return \"\";\n"499            "}\n"500            "  return \"abc\";\n"501            "}\n",502            runCheckOnCode<BracesAroundStatementsCheck>(Input));503}504 505TEST(SimplifyBooleanExprCheckTest, CodeWithError) {506  // Fixes PR55557507  // Need to downgrade Wreturn-type from error as runCheckOnCode will fatal_exit508  // if any errors occur.509  EXPECT_EQ("void foo(bool b){ return b; }",510            runCheckOnCode<SimplifyBooleanExprCheck>(511                "void foo(bool b){ if (b) return true; return false; }",512                nullptr, "input.cc", {"-Wno-error=return-type"}));513}514 515} // namespace test516} // namespace tidy517} // namespace clang518