812 lines · cpp
1//===- unittest/Format/AlignBracketsTest.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 "align-brackets-test"12 13namespace clang {14namespace format {15namespace test {16namespace {17 18class AlignBracketsTest : public FormatTestBase {};19 20TEST_F(AlignBracketsTest, AlignsAfterOpenBracket) {21 verifyFormat(22 "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"23 " aaaaaaaaa aaaaaaa) {}");24 verifyFormat(25 "SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"26 " aaaaaaaaaaa aaaaaaaaa);");27 verifyFormat(28 "SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"29 " aaaaaaaaaaaaaaaaaaaaa));");30 FormatStyle Style = getLLVMStyle();31 Style.AlignAfterOpenBracket = false;32 verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"33 " aaaaaaaaaaa aaaaaaaa, aaaaaaaaa aaaaaaa) {}",34 Style);35 verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"36 " aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaa aaaaaaaaa);",37 Style);38 verifyFormat("SomeLongVariableName->someFunction(\n"39 " foooooooo(aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaa));",40 Style);41 verifyFormat(42 "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"43 " aaaaaaaaa aaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",44 Style);45 verifyFormat(46 "SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"47 " aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",48 Style);49 verifyFormat(50 "SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"51 " aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",52 Style);53 54 verifyFormat("bbbbbbbbbbbb(aaaaaaaaaaaaaaaaaaaaaaaa, //\n"55 " ccccccc(aaaaaaaaaaaaaaaaa, //\n"56 " b));",57 Style);58 59 Style.ColumnLimit = 30;60 verifyFormat("for (int foo = 0; foo < FOO;\n"61 " ++foo) {\n"62 " bar(foo);\n"63 "}",64 Style);65 Style.ColumnLimit = 80;66 67 Style.BreakAfterOpenBracketFunction = true;68 Style.BinPackArguments = false;69 Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;70 verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"71 " aaaaaaaaaaa aaaaaaaa,\n"72 " aaaaaaaaa aaaaaaa,\n"73 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",74 Style);75 verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"76 " aaaaaaaaaaa aaaaaaaaa,\n"77 " aaaaaaaaaaa aaaaaaaaa,\n"78 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",79 Style);80 verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"81 " aaaaaaaaaaaaaaa,\n"82 " aaaaaaaaaaaaaaaaaaaaa,\n"83 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",84 Style);85 verifyFormat(86 "aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"87 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",88 Style);89 verifyFormat(90 "aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"91 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",92 Style);93 verifyFormat(94 "aaaaaaaaaaaaaaaaaaaaaaaa(\n"95 " aaaaaaaaaaaaaaaaaaaaa(\n"96 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)),\n"97 " aaaaaaaaaaaaaaaa);",98 Style);99 verifyFormat(100 "aaaaaaaaaaaaaaaaaaaaaaaa(\n"101 " aaaaaaaaaaaaaaaaaaaaa(\n"102 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)) &&\n"103 " aaaaaaaaaaaaaaaa);",104 Style);105 verifyFormat(106 "fooooooooooo(new BARRRRRRRRR(\n"107 " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",108 Style);109 verifyFormat(110 "fooooooooooo(::new BARRRRRRRRR(\n"111 " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",112 Style);113 verifyFormat(114 "fooooooooooo(new FOO::BARRRR(\n"115 " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",116 Style);117 118 Style.BreakAfterOpenBracketFunction = true;119 Style.BreakBeforeCloseBracketFunction = true;120 Style.BreakBeforeCloseBracketBracedList = true;121 Style.BinPackArguments = false;122 Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;123 verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"124 " aaaaaaaaaaa aaaaaaaa,\n"125 " aaaaaaaaa aaaaaaa,\n"126 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"127 ") {}",128 Style);129 verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"130 " aaaaaaaaaaa aaaaaaaaa,\n"131 " aaaaaaaaaaa aaaaaaaaa,\n"132 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"133 ");",134 Style);135 verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"136 " aaaaaaaaaaaaaaa,\n"137 " aaaaaaaaaaaaaaaaaaaaa,\n"138 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"139 "));",140 Style);141 verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"142 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"143 "));",144 Style);145 verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"146 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"147 "));",148 Style);149 verifyFormat(150 "aaaaaaaaaaaaaaaaaaaaaaaa(\n"151 " aaaaaaaaaaaaaaaaaaaaa(\n"152 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"153 " ),\n"154 " aaaaaaaaaaaaaaaa\n"155 ");",156 Style);157 verifyFormat(158 "aaaaaaaaaaaaaaaaaaaaaaaa(\n"159 " aaaaaaaaaaaaaaaaaaaaa(\n"160 " aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"161 " ) &&\n"162 " aaaaaaaaaaaaaaaa\n"163 ");",164 Style);165 verifyFormat("void foo(\n"166 " void (*foobarpntr)(\n"167 " aaaaaaaaaaaaaaaaaa *,\n"168 " bbbbbbbbbbbbbb *,\n"169 " cccccccccccccccccccc *,\n"170 " dddddddddddddddddd *\n"171 " )\n"172 ");",173 Style);174 verifyFormat("aaaaaaa<bbbbbbbb> const aaaaaaaaaa{\n"175 " aaaaaaaaaaaaa(aaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"176 "};",177 Style);178 179 verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"180 " const bool &aaaaaaaaa, const void *aaaaaaaaaa\n"181 ") const {\n"182 " return true;\n"183 "}",184 Style);185 verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaa(\n"186 " const bool &aaaaaaaaaa, const void *aaaaaaaaaa\n"187 ") const;",188 Style);189 verifyFormat("void aaaaaaaaa(\n"190 " int aaaaaa, int bbbbbb, int cccccc, int dddddddddd\n"191 ") const noexcept -> std::vector<of_very_long_type>;",192 Style);193 verifyFormat(194 "x = aaaaaaaaaaaaaaa(\n"195 " \"a aaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaa\"\n"196 ");",197 Style);198 Style.ColumnLimit = 60;199 verifyFormat("auto lambda =\n"200 " [&b](\n"201 " auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"202 " ) {};",203 Style);204 verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(\n"205 " &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"206 ");",207 Style);208}209 210TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndent) {211 auto Style = getLLVMStyle();212 213 StringRef Short = "functionCall(paramA, paramB, paramC);\n"214 "void functionDecl(int a, int b, int c);";215 216 StringRef Medium = "functionCall(paramA, paramB, paramC, paramD, paramE, "217 "paramF, paramG, paramH, paramI);\n"218 "void functionDecl(int argumentA, int argumentB, int "219 "argumentC, int argumentD, int argumentE);";220 221 verifyFormat(Short, Style);222 223 StringRef NoBreak = "functionCall(paramA, paramB, paramC, paramD, paramE, "224 "paramF, paramG, paramH,\n"225 " paramI);\n"226 "void functionDecl(int argumentA, int argumentB, int "227 "argumentC, int argumentD,\n"228 " int argumentE);";229 230 verifyFormat(NoBreak, Medium, Style);231 verifyFormat(NoBreak,232 "functionCall(\n"233 " paramA,\n"234 " paramB,\n"235 " paramC,\n"236 " paramD,\n"237 " paramE,\n"238 " paramF,\n"239 " paramG,\n"240 " paramH,\n"241 " paramI\n"242 ");\n"243 "void functionDecl(\n"244 " int argumentA,\n"245 " int argumentB,\n"246 " int argumentC,\n"247 " int argumentD,\n"248 " int argumentE\n"249 ");",250 Style);251 252 verifyFormat("outerFunctionCall(nestedFunctionCall(argument1),\n"253 " nestedLongFunctionCall(argument1, "254 "argument2, argument3,\n"255 " argument4, "256 "argument5));",257 Style);258 259 Style.BreakAfterOpenBracketFunction = true;260 Style.BreakBeforeCloseBracketFunction = true;261 262 verifyFormat(Short, Style);263 verifyFormat(264 "functionCall(\n"265 " paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "266 "paramI\n"267 ");\n"268 "void functionDecl(\n"269 " int argumentA, int argumentB, int argumentC, int argumentD, int "270 "argumentE\n"271 ");",272 Medium, Style);273 274 Style.AllowAllArgumentsOnNextLine = false;275 Style.AllowAllParametersOfDeclarationOnNextLine = false;276 277 verifyFormat(Short, Style);278 verifyFormat(279 "functionCall(\n"280 " paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "281 "paramI\n"282 ");\n"283 "void functionDecl(\n"284 " int argumentA, int argumentB, int argumentC, int argumentD, int "285 "argumentE\n"286 ");",287 Medium, Style);288 289 Style.BinPackArguments = false;290 Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;291 292 verifyFormat(Short, Style);293 294 verifyFormat("functionCall(\n"295 " paramA,\n"296 " paramB,\n"297 " paramC,\n"298 " paramD,\n"299 " paramE,\n"300 " paramF,\n"301 " paramG,\n"302 " paramH,\n"303 " paramI\n"304 ");\n"305 "void functionDecl(\n"306 " int argumentA,\n"307 " int argumentB,\n"308 " int argumentC,\n"309 " int argumentD,\n"310 " int argumentE\n"311 ");",312 Medium, Style);313 314 verifyFormat("outerFunctionCall(\n"315 " nestedFunctionCall(argument1),\n"316 " nestedLongFunctionCall(\n"317 " argument1,\n"318 " argument2,\n"319 " argument3,\n"320 " argument4,\n"321 " argument5\n"322 " )\n"323 ");",324 Style);325 326 verifyFormat("int a = (int)b;", Style);327 verifyFormat("int a = (int)b;",328 "int a = (\n"329 " int\n"330 ") b;",331 Style);332 333 verifyFormat("return (true);", Style);334 verifyFormat("return (true);",335 "return (\n"336 " true\n"337 ");",338 Style);339 340 verifyFormat("void foo();", Style);341 verifyFormat("void foo();",342 "void foo(\n"343 ");",344 Style);345 346 verifyFormat("void foo() {}", Style);347 verifyFormat("void foo() {}",348 "void foo(\n"349 ") {\n"350 "}",351 Style);352 353 verifyFormat("auto string = std::string();", Style);354 verifyFormat("auto string = std::string();",355 "auto string = std::string(\n"356 ");",357 Style);358 359 verifyFormat("void (*functionPointer)() = nullptr;", Style);360 verifyFormat("void (*functionPointer)() = nullptr;",361 "void (\n"362 " *functionPointer\n"363 ")\n"364 "(\n"365 ") = nullptr;",366 Style);367}368 369TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentIfStatement) {370 auto Style = getLLVMStyle();371 372 verifyFormat("if (foo()) {\n"373 " return;\n"374 "}",375 Style);376 377 verifyFormat("if (quiteLongArg !=\n"378 " (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "379 "comment\n"380 " return;\n"381 "}",382 Style);383 384 Style.BreakAfterOpenBracketFunction = true;385 Style.BreakBeforeCloseBracketFunction = true;386 387 verifyFormat("if (foo()) {\n"388 " return;\n"389 "}",390 Style);391 392 verifyFormat("if (quiteLongArg !=\n"393 " (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "394 "comment\n"395 " return;\n"396 "}",397 Style);398 399 verifyFormat("void foo() {\n"400 " if (camelCaseName < alsoLongName ||\n"401 " anotherEvenLongerName <=\n"402 " thisReallyReallyReallyReallyReallyReallyLongerName ||"403 "\n"404 " otherName < thisLastName) {\n"405 " return;\n"406 " } else if (quiteLongName < alsoLongName ||\n"407 " anotherEvenLongerName <=\n"408 " thisReallyReallyReallyReallyReallyReallyLonger"409 "Name ||\n"410 " otherName < thisLastName) {\n"411 " return;\n"412 " }\n"413 "}",414 Style);415 416 Style.ContinuationIndentWidth = 2;417 verifyFormat("void foo() {\n"418 " if (ThisIsRatherALongIfClause && thatIExpectToBeBroken ||\n"419 " ontoMultipleLines && whenFormattedCorrectly) {\n"420 " if (false) {\n"421 " return;\n"422 " } else if (thisIsRatherALongIfClause && "423 "thatIExpectToBeBroken ||\n"424 " ontoMultipleLines && whenFormattedCorrectly) {\n"425 " return;\n"426 " }\n"427 " }\n"428 "}",429 Style);430}431 432TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentForStatement) {433 auto Style = getLLVMStyle();434 435 verifyFormat("for (int i = 0; i < 5; ++i) {\n"436 " doSomething();\n"437 "}",438 Style);439 440 verifyFormat("for (int myReallyLongCountVariable = 0; "441 "myReallyLongCountVariable < count;\n"442 " myReallyLongCountVariable++) {\n"443 " doSomething();\n"444 "}",445 Style);446 447 Style.BreakAfterOpenBracketFunction = true;448 Style.BreakBeforeCloseBracketFunction = true;449 450 verifyFormat("for (int i = 0; i < 5; ++i) {\n"451 " doSomething();\n"452 "}",453 Style);454 455 verifyFormat("for (int myReallyLongCountVariable = 0; "456 "myReallyLongCountVariable < count;\n"457 " myReallyLongCountVariable++) {\n"458 " doSomething();\n"459 "}",460 Style);461}462 463TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentInitializers) {464 auto Style = getLLVMStyleWithColumns(60);465 Style.BreakAfterOpenBracketBracedList = true;466 Style.BreakBeforeCloseBracketBracedList = true;467 // Aggregate initialization.468 verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"469 " 10000000, 20000000\n"470 "};",471 Style);472 verifyFormat("SomeStruct s{\n"473 " \"xxxxxxxxxxxxxxxx\", \"yyyyyyyyyyyyyyyy\",\n"474 " \"zzzzzzzzzzzzzzzz\"\n"475 "};",476 Style);477 // Designated initializers.478 verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"479 " [0] = 10000000, [1] = 20000000\n"480 "};",481 Style);482 verifyFormat("SomeStruct s{\n"483 " .foo = \"xxxxxxxxxxxxx\",\n"484 " .bar = \"yyyyyyyyyyyyy\",\n"485 " .baz = \"zzzzzzzzzzzzz\"\n"486 "};",487 Style);488 // List initialization.489 verifyFormat("SomeStruct s{\n"490 " \"xxxxxxxxxxxxx\",\n"491 " \"yyyyyyyyyyyyy\",\n"492 " \"zzzzzzzzzzzzz\",\n"493 "};",494 Style);495 verifyFormat("SomeStruct{\n"496 " \"xxxxxxxxxxxxx\",\n"497 " \"yyyyyyyyyyyyy\",\n"498 " \"zzzzzzzzzzzzz\",\n"499 "};",500 Style);501 verifyFormat("new SomeStruct{\n"502 " \"xxxxxxxxxxxxx\",\n"503 " \"yyyyyyyyyyyyy\",\n"504 " \"zzzzzzzzzzzzz\",\n"505 "};",506 Style);507 // Member initializer.508 verifyFormat("class SomeClass {\n"509 " SomeStruct s{\n"510 " \"xxxxxxxxxxxxx\",\n"511 " \"yyyyyyyyyyyyy\",\n"512 " \"zzzzzzzzzzzzz\",\n"513 " };\n"514 "};",515 Style);516 // Constructor member initializer.517 verifyFormat("SomeClass::SomeClass : strct{\n"518 " \"xxxxxxxxxxxxx\",\n"519 " \"yyyyyyyyyyyyy\",\n"520 " \"zzzzzzzzzzzzz\",\n"521 " } {}",522 Style);523 // Copy initialization.524 verifyFormat("SomeStruct s = SomeStruct{\n"525 " \"xxxxxxxxxxxxx\",\n"526 " \"yyyyyyyyyyyyy\",\n"527 " \"zzzzzzzzzzzzz\",\n"528 "};",529 Style);530 // Copy list initialization.531 verifyFormat("SomeStruct s = {\n"532 " \"xxxxxxxxxxxxx\",\n"533 " \"yyyyyyyyyyyyy\",\n"534 " \"zzzzzzzzzzzzz\",\n"535 "};",536 Style);537 // Assignment operand initialization.538 verifyFormat("s = {\n"539 " \"xxxxxxxxxxxxx\",\n"540 " \"yyyyyyyyyyyyy\",\n"541 " \"zzzzzzzzzzzzz\",\n"542 "};",543 Style);544 // Returned object initialization.545 verifyFormat("return {\n"546 " \"xxxxxxxxxxxxx\",\n"547 " \"yyyyyyyyyyyyy\",\n"548 " \"zzzzzzzzzzzzz\",\n"549 "};",550 Style);551 // Initializer list.552 verifyFormat("auto initializerList = {\n"553 " \"xxxxxxxxxxxxx\",\n"554 " \"yyyyyyyyyyyyy\",\n"555 " \"zzzzzzzzzzzzz\",\n"556 "};",557 Style);558 // Function parameter initialization.559 verifyFormat("func({\n"560 " \"xxxxxxxxxxxxx\",\n"561 " \"yyyyyyyyyyyyy\",\n"562 " \"zzzzzzzzzzzzz\",\n"563 "});",564 Style);565 // Nested init lists.566 verifyFormat("SomeStruct s = {\n"567 " {{init1, init2, init3, init4, init5},\n"568 " {init1, init2, init3, init4, init5}}\n"569 "};",570 Style);571 verifyFormat("SomeStruct s = {\n"572 " {{\n"573 " .init1 = 1,\n"574 " .init2 = 2,\n"575 " .init3 = 3,\n"576 " .init4 = 4,\n"577 " .init5 = 5,\n"578 " },\n"579 " {init1, init2, init3, init4, init5}}\n"580 "};",581 Style);582 verifyFormat("SomeArrayT a[3] = {\n"583 " {\n"584 " foo,\n"585 " bar,\n"586 " },\n"587 " {\n"588 " foo,\n"589 " bar,\n"590 " },\n"591 " SomeArrayT{},\n"592 "};",593 Style);594 verifyFormat("SomeArrayT a[3] = {\n"595 " {foo},\n"596 " {\n"597 " {\n"598 " init1,\n"599 " init2,\n"600 " init3,\n"601 " },\n"602 " {\n"603 " init1,\n"604 " init2,\n"605 " init3,\n"606 " },\n"607 " },\n"608 " {baz},\n"609 "};",610 Style);611}612 613TEST_F(AlignBracketsTest, AllowAllArgumentsOnNextLineDontAlign) {614 // Check that AllowAllArgumentsOnNextLine is respected for both BAS_DontAlign615 // and BAS_Align.616 FormatStyle Style = getLLVMStyleWithColumns(35);617 StringRef Input = "functionCall(paramA, paramB, paramC);\n"618 "void functionDecl(int A, int B, int C);";619 Style.AllowAllArgumentsOnNextLine = false;620 Style.AlignAfterOpenBracket = false;621 verifyFormat(StringRef("functionCall(paramA, paramB,\n"622 " paramC);\n"623 "void functionDecl(int A, int B,\n"624 " int C);"),625 Input, Style);626 Style.AlignAfterOpenBracket = true;627 verifyFormat(StringRef("functionCall(paramA, paramB,\n"628 " paramC);\n"629 "void functionDecl(int A, int B,\n"630 " int C);"),631 Input, Style);632 // However, BAS_AlwaysBreak and BAS_BlockIndent should take precedence over633 // AllowAllArgumentsOnNextLine.634 Style.BreakAfterOpenBracketFunction = true;635 verifyFormat(StringRef("functionCall(\n"636 " paramA, paramB, paramC);\n"637 "void functionDecl(\n"638 " int A, int B, int C);"),639 Input, Style);640 Style.BreakAfterOpenBracketFunction = true;641 Style.BreakBeforeCloseBracketFunction = true;642 verifyFormat("functionCall(\n"643 " paramA, paramB, paramC\n"644 ");\n"645 "void functionDecl(\n"646 " int A, int B, int C\n"647 ");",648 Input, Style);649 Style.BreakBeforeCloseBracketFunction = false;650 651 // When AllowAllArgumentsOnNextLine is set, we prefer breaking before the652 // first argument.653 Style.AllowAllArgumentsOnNextLine = true;654 Style.BreakAfterOpenBracketFunction = true;655 verifyFormat(StringRef("functionCall(\n"656 " paramA, paramB, paramC);\n"657 "void functionDecl(\n"658 " int A, int B, int C);"),659 Input, Style);660 // It wouldn't fit on one line with aligned parameters so this setting661 // doesn't change anything for BAS_Align.662 Style.AlignAfterOpenBracket = true;663 Style.BreakAfterOpenBracketFunction = false;664 verifyFormat(StringRef("functionCall(paramA, paramB,\n"665 " paramC);\n"666 "void functionDecl(int A, int B,\n"667 " int C);"),668 Input, Style);669 Style.BreakAfterOpenBracketFunction = true;670 verifyFormat(StringRef("functionCall(\n"671 " paramA, paramB, paramC);\n"672 "void functionDecl(\n"673 " int A, int B, int C);"),674 Input, Style);675}676 677TEST_F(AlignBracketsTest, FormatsDeclarationBreakAlways) {678 FormatStyle BreakAlways = getGoogleStyle();679 BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;680 verifyFormat("void f(int a,\n"681 " int b);",682 BreakAlways);683 verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"684 " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"685 " int cccccccccccccccccccccccc);",686 BreakAlways);687 688 // Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set689 // to BPPS_AlwaysOnePerLine.690 BreakAlways.BreakAfterOpenBracketFunction = true;691 verifyFormat(692 "void someLongFunctionName(\n"693 " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"694 " int b);",695 BreakAlways);696 BreakAlways.BreakAfterOpenBracketFunction = true;697 BreakAlways.BreakBeforeCloseBracketFunction = true;698 verifyFormat(699 "void someLongFunctionName(\n"700 " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"701 " int b\n"702 ");",703 BreakAlways);704}705 706TEST_F(AlignBracketsTest, FormatsDefinitionBreakAlways) {707 FormatStyle BreakAlways = getGoogleStyle();708 BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;709 verifyFormat("void f(int a,\n"710 " int b) {\n"711 " f(a, b);\n"712 "}",713 BreakAlways);714 715 // Ensure BinPackArguments interact correctly when BinPackParameters is set to716 // BPPS_AlwaysOnePerLine.717 verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"718 " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"719 " int cccccccccccccccccccccccc) {\n"720 " f(aaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbb,\n"721 " cccccccccccccccccccccccc);\n"722 "}",723 BreakAlways);724 BreakAlways.BinPackArguments = false;725 verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"726 " int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"727 " int cccccccccccccccccccccccc) {\n"728 " f(aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"729 " bbbbbbbbbbbbbbbbbbbbbbbbb,\n"730 " cccccccccccccccccccccccc);\n"731 "}",732 BreakAlways);733 734 // Ensure BreakFunctionDefinitionParameters interacts correctly when735 // BinPackParameters is set to BPPS_AlwaysOnePerLine.736 BreakAlways.BreakFunctionDefinitionParameters = true;737 verifyFormat("void f(\n"738 " int a,\n"739 " int b) {\n"740 " f(a, b);\n"741 "}",742 BreakAlways);743 BreakAlways.BreakFunctionDefinitionParameters = false;744 745 // Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set746 // to BPPS_AlwaysOnePerLine.747 BreakAlways.BreakAfterOpenBracketFunction = true;748 verifyFormat(749 "void someLongFunctionName(\n"750 " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"751 " int b) {\n"752 " someLongFunctionName(\n"753 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b);\n"754 "}",755 BreakAlways);756 BreakAlways.BreakAfterOpenBracketFunction = true;757 BreakAlways.BreakBeforeCloseBracketFunction = true;758 verifyFormat(759 "void someLongFunctionName(\n"760 " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"761 " int b\n"762 ") {\n"763 " someLongFunctionName(\n"764 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b\n"765 " );\n"766 "}",767 BreakAlways);768}769 770TEST_F(AlignBracketsTest, ParenthesesAndOperandAlignment) {771 FormatStyle Style = getLLVMStyleWithColumns(40);772 verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"773 " bbbbbbbbbbbbbbbbbbbbbb);",774 Style);775 Style.AlignAfterOpenBracket = true;776 Style.AlignOperands = FormatStyle::OAS_DontAlign;777 verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"778 " bbbbbbbbbbbbbbbbbbbbbb);",779 Style);780 Style.AlignAfterOpenBracket = false;781 Style.AlignOperands = FormatStyle::OAS_Align;782 verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"783 " bbbbbbbbbbbbbbbbbbbbbb);",784 Style);785 Style.AlignAfterOpenBracket = false;786 Style.AlignOperands = FormatStyle::OAS_DontAlign;787 verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"788 " bbbbbbbbbbbbbbbbbbbbbb);",789 Style);790}791 792TEST_F(AlignBracketsTest, BlockIndentAndNamespace) {793 auto Style = getLLVMStyleWithColumns(120);794 Style.AllowShortNamespacesOnASingleLine = true;795 Style.BreakAfterOpenBracketFunction = true;796 Style.BreakAfterOpenBracketBracedList = true;797 Style.BreakBeforeCloseBracketFunction = true;798 Style.BreakBeforeCloseBracketBracedList = true;799 800 verifyNoCrash(801 "namespace {\n"802 "void xxxxxxxxxxxxxxxxxxxxx(nnnnn::TTTTTTTTTTTTT const *mmmm,\n"803 " YYYYYYYYYYYYYYYYY &yyyyyyyyyyyyyy);\n"804 "} //",805 Style);806}807 808} // namespace809} // namespace test810} // namespace format811} // namespace clang812