brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.8 KiB · 10ca5fb Raw
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