117059753Sowenca //===- unittest/Format/BracesInserterTest.cpp -----------------------------===//
217059753Sowenca //
317059753Sowenca // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
417059753Sowenca // See https://llvm.org/LICENSE.txt for license information.
517059753Sowenca // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
617059753Sowenca //
717059753Sowenca //===----------------------------------------------------------------------===//
817059753Sowenca
9*f8d10d5aSManuel Klimek #include "FormatTestBase.h"
1017059753Sowenca
1117059753Sowenca #define DEBUG_TYPE "braces-inserter-test"
1217059753Sowenca
1317059753Sowenca namespace clang {
1417059753Sowenca namespace format {
15*f8d10d5aSManuel Klimek namespace test {
1617059753Sowenca namespace {
1717059753Sowenca
18*f8d10d5aSManuel Klimek class BracesInserterTest : public FormatTestBase {};
1917059753Sowenca
TEST_F(BracesInserterTest,InsertBraces)2017059753Sowenca TEST_F(BracesInserterTest, InsertBraces) {
2117059753Sowenca FormatStyle Style = getLLVMStyle();
2217059753Sowenca Style.InsertBraces = true;
2317059753Sowenca
2417059753Sowenca verifyFormat("// clang-format off\n"
2517059753Sowenca "// comment\n"
2617059753Sowenca "if (a) f();\n"
2717059753Sowenca "// clang-format on\n"
2817059753Sowenca "if (b) {\n"
2917059753Sowenca " g();\n"
3017059753Sowenca "}",
3117059753Sowenca "// clang-format off\n"
3217059753Sowenca "// comment\n"
3317059753Sowenca "if (a) f();\n"
3417059753Sowenca "// clang-format on\n"
3517059753Sowenca "if (b) g();",
3617059753Sowenca Style);
3717059753Sowenca
3817059753Sowenca verifyFormat("if (a) {\n"
3917059753Sowenca " switch (b) {\n"
4017059753Sowenca " case 1:\n"
4117059753Sowenca " c = 0;\n"
4217059753Sowenca " break;\n"
4317059753Sowenca " default:\n"
4417059753Sowenca " c = 1;\n"
4517059753Sowenca " }\n"
4617059753Sowenca "}",
4717059753Sowenca "if (a)\n"
4817059753Sowenca " switch (b) {\n"
4917059753Sowenca " case 1:\n"
5017059753Sowenca " c = 0;\n"
5117059753Sowenca " break;\n"
5217059753Sowenca " default:\n"
5317059753Sowenca " c = 1;\n"
5417059753Sowenca " }",
5517059753Sowenca Style);
5617059753Sowenca
5717059753Sowenca verifyFormat("for (auto node : nodes) {\n"
5817059753Sowenca " if (node) {\n"
5917059753Sowenca " break;\n"
6017059753Sowenca " }\n"
6117059753Sowenca "}",
6217059753Sowenca "for (auto node : nodes)\n"
6317059753Sowenca " if (node)\n"
6417059753Sowenca " break;",
6517059753Sowenca Style);
6617059753Sowenca
6717059753Sowenca verifyFormat("for (auto node : nodes) {\n"
6817059753Sowenca " if (node)\n"
6917059753Sowenca "}",
7017059753Sowenca "for (auto node : nodes)\n"
7117059753Sowenca " if (node)",
7217059753Sowenca Style);
7317059753Sowenca
7417059753Sowenca verifyFormat("do {\n"
7517059753Sowenca " --a;\n"
7617059753Sowenca "} while (a);",
7717059753Sowenca "do\n"
7817059753Sowenca " --a;\n"
7917059753Sowenca "while (a);",
8017059753Sowenca Style);
8117059753Sowenca
8217059753Sowenca verifyFormat("if (i) {\n"
8317059753Sowenca " ++i;\n"
8417059753Sowenca "} else {\n"
8517059753Sowenca " --i;\n"
8617059753Sowenca "}",
8717059753Sowenca "if (i)\n"
8817059753Sowenca " ++i;\n"
8917059753Sowenca "else {\n"
9017059753Sowenca " --i;\n"
9117059753Sowenca "}",
9217059753Sowenca Style);
9317059753Sowenca
9417059753Sowenca verifyFormat("void f() {\n"
9517059753Sowenca " while (j--) {\n"
9617059753Sowenca " while (i) {\n"
9717059753Sowenca " --i;\n"
9817059753Sowenca " }\n"
9917059753Sowenca " }\n"
10017059753Sowenca "}",
10117059753Sowenca "void f() {\n"
10217059753Sowenca " while (j--)\n"
10317059753Sowenca " while (i)\n"
10417059753Sowenca " --i;\n"
10517059753Sowenca "}",
10617059753Sowenca Style);
10717059753Sowenca
10817059753Sowenca verifyFormat("f({\n"
10917059753Sowenca " if (a) {\n"
11017059753Sowenca " g();\n"
11117059753Sowenca " }\n"
11217059753Sowenca "});",
11317059753Sowenca "f({\n"
11417059753Sowenca " if (a)\n"
11517059753Sowenca " g();\n"
11617059753Sowenca "});",
11717059753Sowenca Style);
11817059753Sowenca
11917059753Sowenca verifyFormat("if (a) {\n"
12017059753Sowenca " f();\n"
12117059753Sowenca "} else if (b) {\n"
12217059753Sowenca " g();\n"
12317059753Sowenca "} else {\n"
12417059753Sowenca " h();\n"
12517059753Sowenca "}",
12617059753Sowenca "if (a)\n"
12717059753Sowenca " f();\n"
12817059753Sowenca "else if (b)\n"
12917059753Sowenca " g();\n"
13017059753Sowenca "else\n"
13117059753Sowenca " h();",
13217059753Sowenca Style);
13317059753Sowenca
13417059753Sowenca verifyFormat("if (a) {\n"
13517059753Sowenca " f();\n"
13617059753Sowenca "}\n"
13717059753Sowenca "// comment\n"
13817059753Sowenca "/* comment */",
13917059753Sowenca "if (a)\n"
14017059753Sowenca " f();\n"
14117059753Sowenca "// comment\n"
14217059753Sowenca "/* comment */",
14317059753Sowenca Style);
14417059753Sowenca
14517059753Sowenca verifyFormat("if (a) {\n"
14617059753Sowenca " // foo\n"
14717059753Sowenca " // bar\n"
14817059753Sowenca " f();\n"
14917059753Sowenca "}",
15017059753Sowenca "if (a)\n"
15117059753Sowenca " // foo\n"
15217059753Sowenca " // bar\n"
15317059753Sowenca " f();",
15417059753Sowenca Style);
15517059753Sowenca
15617059753Sowenca verifyFormat("if (a) { //\n"
15717059753Sowenca " b = 1;\n"
15817059753Sowenca "}",
15917059753Sowenca "if (a) //\n"
16017059753Sowenca " b = 1;",
16117059753Sowenca Style);
16217059753Sowenca
16317059753Sowenca verifyFormat("if (a) { // comment\n"
16417059753Sowenca " // comment\n"
16517059753Sowenca " f();\n"
16617059753Sowenca "}",
16717059753Sowenca "if (a) // comment\n"
16817059753Sowenca " // comment\n"
16917059753Sowenca " f();",
17017059753Sowenca Style);
17117059753Sowenca
17217059753Sowenca verifyFormat("if (a) {\n"
17317059753Sowenca " f(); // comment\n"
17417059753Sowenca "}",
17517059753Sowenca "if (a)\n"
17617059753Sowenca " f(); // comment",
17717059753Sowenca Style);
17817059753Sowenca
17917059753Sowenca verifyFormat("if (a) {\n"
18017059753Sowenca " f();\n"
18117059753Sowenca "}\n"
18217059753Sowenca "#undef A\n"
18317059753Sowenca "#undef B",
18417059753Sowenca "if (a)\n"
18517059753Sowenca " f();\n"
18617059753Sowenca "#undef A\n"
18717059753Sowenca "#undef B",
18817059753Sowenca Style);
18917059753Sowenca
19017059753Sowenca verifyFormat("if (a)\n"
19117059753Sowenca "#ifdef A\n"
19217059753Sowenca " f();\n"
19317059753Sowenca "#else\n"
19417059753Sowenca " g();\n"
19517059753Sowenca "#endif",
19617059753Sowenca Style);
19717059753Sowenca
19817059753Sowenca verifyFormat("#if 0\n"
19917059753Sowenca "#elif 1\n"
20017059753Sowenca "#endif\n"
20117059753Sowenca "void f() {\n"
20217059753Sowenca " if (a) {\n"
20317059753Sowenca " g();\n"
20417059753Sowenca " }\n"
20517059753Sowenca "}",
20617059753Sowenca "#if 0\n"
20717059753Sowenca "#elif 1\n"
20817059753Sowenca "#endif\n"
20917059753Sowenca "void f() {\n"
21017059753Sowenca " if (a) g();\n"
21117059753Sowenca "}",
21217059753Sowenca Style);
21317059753Sowenca
21417059753Sowenca verifyFormat("do {\n"
21517059753Sowenca "#if 0\n"
21617059753Sowenca "#else\n"
21717059753Sowenca " if (b) {\n"
21817059753Sowenca "#endif\n"
21917059753Sowenca " }\n"
22017059753Sowenca "} while (0);",
22117059753Sowenca Style);
22217059753Sowenca
22317059753Sowenca Style.RemoveBracesLLVM = true;
22417059753Sowenca verifyFormat("if (a) //\n"
22517059753Sowenca " return b;",
22617059753Sowenca Style);
22717059753Sowenca Style.RemoveBracesLLVM = false;
22817059753Sowenca
22917059753Sowenca Style.ColumnLimit = 15;
23017059753Sowenca
23117059753Sowenca verifyFormat("#define A \\\n"
23217059753Sowenca " if (a) \\\n"
23317059753Sowenca " f();",
23417059753Sowenca Style);
23517059753Sowenca
23617059753Sowenca verifyFormat("if (a + b >\n"
23717059753Sowenca " c) {\n"
23817059753Sowenca " f();\n"
23917059753Sowenca "}",
24017059753Sowenca "if (a + b > c)\n"
24117059753Sowenca " f();",
24217059753Sowenca Style);
24317059753Sowenca
24417059753Sowenca Style.BreakBeforeBraces = FormatStyle::BS_Custom;
24517059753Sowenca Style.BraceWrapping.AfterControlStatement = FormatStyle::BWACS_Always;
24617059753Sowenca
24717059753Sowenca verifyFormat("if (a) //\n"
24817059753Sowenca "{\n"
24917059753Sowenca " b = 1;\n"
25017059753Sowenca "}",
25117059753Sowenca "if (a) //\n"
25217059753Sowenca " b = 1;",
25317059753Sowenca Style);
25417059753Sowenca }
25517059753Sowenca
TEST_F(BracesInserterTest,InsertBracesRange)25617059753Sowenca TEST_F(BracesInserterTest, InsertBracesRange) {
25717059753Sowenca FormatStyle Style = getLLVMStyle();
25817059753Sowenca Style.InsertBraces = true;
25917059753Sowenca
26017059753Sowenca const StringRef Code("while (a)\n"
26117059753Sowenca " if (b)\n"
26217059753Sowenca " return;");
26317059753Sowenca
26417059753Sowenca verifyFormat("while (a) {\n"
26517059753Sowenca " if (b)\n"
26617059753Sowenca " return;\n"
26717059753Sowenca "}",
26817059753Sowenca Code, Style, {tooling::Range(0, 9)}); // line 1
26917059753Sowenca
27017059753Sowenca verifyFormat("while (a) {\n"
27117059753Sowenca " if (b) {\n"
27217059753Sowenca " return;\n"
27317059753Sowenca " }\n"
27417059753Sowenca "}",
27517059753Sowenca Code, Style, {tooling::Range(0, 18)}); // lines 1-2
27617059753Sowenca
27717059753Sowenca verifyFormat("while (a)\n"
27817059753Sowenca " if (b) {\n"
27917059753Sowenca " return;\n"
28017059753Sowenca " }",
28117059753Sowenca Code, Style, {tooling::Range(10, 8)}); // line 2
28217059753Sowenca
283*f8d10d5aSManuel Klimek verifyFormat(Code, Code, Style, {tooling::Range(19, 11)}); // line 3
28417059753Sowenca }
28517059753Sowenca
28617059753Sowenca } // namespace
287*f8d10d5aSManuel Klimek } // namespace test
28817059753Sowenca } // namespace format
28917059753Sowenca } // namespace clang
290