506 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			506 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C++
		
	
	
	
#include "ClangTidyTest.h"
 | 
						|
#include "readability/BracesAroundStatementsCheck.h"
 | 
						|
#include "readability/NamespaceCommentCheck.h"
 | 
						|
#include "gtest/gtest.h"
 | 
						|
 | 
						|
namespace clang {
 | 
						|
namespace tidy {
 | 
						|
namespace test {
 | 
						|
 | 
						|
using readability::BracesAroundStatementsCheck;
 | 
						|
using readability::NamespaceCommentCheck;
 | 
						|
 | 
						|
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));
 | 
						|
}
 | 
						|
 | 
						|
} // namespace test
 | 
						|
} // namespace tidy
 | 
						|
} // namespace clang
 |