290 lines · cpp
1//===- unittest/Format/BracesInserterTest.cpp -----------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "FormatTestBase.h"10 11#define DEBUG_TYPE "braces-inserter-test"12 13namespace clang {14namespace format {15namespace test {16namespace {17 18class BracesInserterTest : public FormatTestBase {};19 20TEST_F(BracesInserterTest, InsertBraces) {21 FormatStyle Style = getLLVMStyle();22 Style.InsertBraces = true;23 24 verifyFormat("// clang-format off\n"25 "// comment\n"26 "if (a) f();\n"27 "// clang-format on\n"28 "if (b) {\n"29 " g();\n"30 "}",31 "// clang-format off\n"32 "// comment\n"33 "if (a) f();\n"34 "// clang-format on\n"35 "if (b) g();",36 Style);37 38 verifyFormat("if (a) {\n"39 " switch (b) {\n"40 " case 1:\n"41 " c = 0;\n"42 " break;\n"43 " default:\n"44 " c = 1;\n"45 " }\n"46 "}",47 "if (a)\n"48 " switch (b) {\n"49 " case 1:\n"50 " c = 0;\n"51 " break;\n"52 " default:\n"53 " c = 1;\n"54 " }",55 Style);56 57 verifyFormat("for (auto node : nodes) {\n"58 " if (node) {\n"59 " break;\n"60 " }\n"61 "}",62 "for (auto node : nodes)\n"63 " if (node)\n"64 " break;",65 Style);66 67 verifyFormat("for (auto node : nodes) {\n"68 " if (node)\n"69 "}",70 "for (auto node : nodes)\n"71 " if (node)",72 Style);73 74 verifyFormat("do {\n"75 " --a;\n"76 "} while (a);",77 "do\n"78 " --a;\n"79 "while (a);",80 Style);81 82 verifyFormat("if (i) {\n"83 " ++i;\n"84 "} else {\n"85 " --i;\n"86 "}",87 "if (i)\n"88 " ++i;\n"89 "else {\n"90 " --i;\n"91 "}",92 Style);93 94 verifyFormat("void f() {\n"95 " while (j--) {\n"96 " while (i) {\n"97 " --i;\n"98 " }\n"99 " }\n"100 "}",101 "void f() {\n"102 " while (j--)\n"103 " while (i)\n"104 " --i;\n"105 "}",106 Style);107 108 verifyFormat("f({\n"109 " if (a) {\n"110 " g();\n"111 " }\n"112 "});",113 "f({\n"114 " if (a)\n"115 " g();\n"116 "});",117 Style);118 119 verifyFormat("if (a) {\n"120 " f();\n"121 "} else if (b) {\n"122 " g();\n"123 "} else {\n"124 " h();\n"125 "}",126 "if (a)\n"127 " f();\n"128 "else if (b)\n"129 " g();\n"130 "else\n"131 " h();",132 Style);133 134 verifyFormat("if (a) {\n"135 " f();\n"136 "}\n"137 "// comment\n"138 "/* comment */",139 "if (a)\n"140 " f();\n"141 "// comment\n"142 "/* comment */",143 Style);144 145 verifyFormat("if (a) {\n"146 " // foo\n"147 " // bar\n"148 " f();\n"149 "}",150 "if (a)\n"151 " // foo\n"152 " // bar\n"153 " f();",154 Style);155 156 verifyFormat("if (a) { //\n"157 " b = 1;\n"158 "}",159 "if (a) //\n"160 " b = 1;",161 Style);162 163 verifyFormat("if (a) { // comment\n"164 " // comment\n"165 " f();\n"166 "}",167 "if (a) // comment\n"168 " // comment\n"169 " f();",170 Style);171 172 verifyFormat("if (a) {\n"173 " f(); // comment\n"174 "}",175 "if (a)\n"176 " f(); // comment",177 Style);178 179 verifyFormat("if (a) {\n"180 " f();\n"181 "}\n"182 "#undef A\n"183 "#undef B",184 "if (a)\n"185 " f();\n"186 "#undef A\n"187 "#undef B",188 Style);189 190 verifyFormat("if (a)\n"191 "#ifdef A\n"192 " f();\n"193 "#else\n"194 " g();\n"195 "#endif",196 Style);197 198 verifyFormat("#if 0\n"199 "#elif 1\n"200 "#endif\n"201 "void f() {\n"202 " if (a) {\n"203 " g();\n"204 " }\n"205 "}",206 "#if 0\n"207 "#elif 1\n"208 "#endif\n"209 "void f() {\n"210 " if (a) g();\n"211 "}",212 Style);213 214 verifyFormat("do {\n"215 "#if 0\n"216 "#else\n"217 " if (b) {\n"218 "#endif\n"219 " }\n"220 "} while (0);",221 Style);222 223 Style.RemoveBracesLLVM = true;224 verifyFormat("if (a) //\n"225 " return b;",226 Style);227 Style.RemoveBracesLLVM = false;228 229 Style.ColumnLimit = 15;230 231 verifyFormat("#define A \\\n"232 " if (a) \\\n"233 " f();",234 Style);235 236 verifyFormat("if (a + b >\n"237 " c) {\n"238 " f();\n"239 "}",240 "if (a + b > c)\n"241 " f();",242 Style);243 244 Style.BreakBeforeBraces = FormatStyle::BS_Custom;245 Style.BraceWrapping.AfterControlStatement = FormatStyle::BWACS_Always;246 247 verifyFormat("if (a) //\n"248 "{\n"249 " b = 1;\n"250 "}",251 "if (a) //\n"252 " b = 1;",253 Style);254}255 256TEST_F(BracesInserterTest, InsertBracesRange) {257 FormatStyle Style = getLLVMStyle();258 Style.InsertBraces = true;259 260 constexpr StringRef Code("while (a)\n"261 " if (b)\n"262 " return;");263 264 verifyFormat("while (a) {\n"265 " if (b)\n"266 " return;\n"267 "}",268 Code, Style, {tooling::Range(0, 9)}); // line 1269 270 verifyFormat("while (a) {\n"271 " if (b) {\n"272 " return;\n"273 " }\n"274 "}",275 Code, Style, {tooling::Range(0, 18)}); // lines 1-2276 277 verifyFormat("while (a)\n"278 " if (b) {\n"279 " return;\n"280 " }",281 Code, Style, {tooling::Range(10, 8)}); // line 2282 283 verifyFormat(Code, Code, Style, {tooling::Range(19, 11)}); // line 3284}285 286} // namespace287} // namespace test288} // namespace format289} // namespace clang290