blob: c4380ae4157518e98dbad83dd65df2bd94efd49e [file] [log] [blame]
//===- unittest/Format/AlignBracketsTest.cpp ------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "FormatTestBase.h"
#define DEBUG_TYPE "align-brackets-test"
namespace clang {
namespace format {
namespace test {
namespace {
class AlignBracketsTest : public FormatTestBase {};
TEST_F(AlignBracketsTest, AlignsAfterOpenBracket) {
verifyFormat(
"void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"
" aaaaaaaaa aaaaaaa) {}");
verifyFormat(
"SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"
" aaaaaaaaaaa aaaaaaaaa);");
verifyFormat(
"SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaa));");
FormatStyle Style = getLLVMStyle();
Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaa aaaaaaaa, aaaaaaaaa aaaaaaa) {}",
Style);
verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
" aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaa aaaaaaaaa);",
Style);
verifyFormat("SomeLongVariableName->someFunction(\n"
" foooooooo(aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaa));",
Style);
verifyFormat(
"void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaa aaaaaaaa,\n"
" aaaaaaaaa aaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
Style);
verifyFormat(
"SomeLongVariableName->someVeryLongFunctionName(aaaaaaaaaaa aaaaaaaaa,\n"
" aaaaaaaaaaa aaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
Style);
verifyFormat(
"SomeLongVariableName->someFunction(foooooooo(aaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",
Style);
verifyFormat("bbbbbbbbbbbb(aaaaaaaaaaaaaaaaaaaaaaaa, //\n"
" ccccccc(aaaaaaaaaaaaaaaaa, //\n"
" b));",
Style);
Style.ColumnLimit = 30;
verifyFormat("for (int foo = 0; foo < FOO;\n"
" ++foo) {\n"
" bar(foo);\n"
"}",
Style);
Style.ColumnLimit = 80;
Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
Style.BinPackArguments = false;
Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaa aaaaaaaa,\n"
" aaaaaaaaa aaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
Style);
verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
" aaaaaaaaaaa aaaaaaaaa,\n"
" aaaaaaaaaaa aaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
Style);
verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"
" aaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa));",
Style);
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",
Style);
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)));",
Style);
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)),\n"
" aaaaaaaaaaaaaaaa);",
Style);
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)) &&\n"
" aaaaaaaaaaaaaaaa);",
Style);
verifyFormat(
"fooooooooooo(new BARRRRRRRRR(\n"
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
Style);
verifyFormat(
"fooooooooooo(::new BARRRRRRRRR(\n"
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
Style);
verifyFormat(
"fooooooooooo(new FOO::BARRRR(\n"
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZZZZZZZZZZZZ()));",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
Style.BinPackArguments = false;
Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
verifyFormat("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaa aaaaaaaa,\n"
" aaaaaaaaa aaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
") {}",
Style);
verifyFormat("SomeLongVariableName->someVeryLongFunctionName(\n"
" aaaaaaaaaaa aaaaaaaaa,\n"
" aaaaaaaaaaa aaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
");",
Style);
verifyFormat("SomeLongVariableName->someFunction(foooooooo(\n"
" aaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaa,\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
"));",
Style);
verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
"));",
Style);
verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaa.aaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
"));",
Style);
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
" ),\n"
" aaaaaaaaaaaaaaaa\n"
");",
Style);
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaaa(\n"
" aaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
" ) &&\n"
" aaaaaaaaaaaaaaaa\n"
");",
Style);
verifyFormat("void foo(\n"
" void (*foobarpntr)(\n"
" aaaaaaaaaaaaaaaaaa *,\n"
" bbbbbbbbbbbbbb *,\n"
" cccccccccccccccccccc *,\n"
" dddddddddddddddddd *\n"
" )\n"
");",
Style);
verifyFormat("aaaaaaa<bbbbbbbb> const aaaaaaaaaa{\n"
" aaaaaaaaaaaaa(aaaaaaaaaaa, aaaaaaaaaaaaaaaa)\n"
"};",
Style);
verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
" const bool &aaaaaaaaa, const void *aaaaaaaaaa\n"
") const {\n"
" return true;\n"
"}",
Style);
verifyFormat("bool aaaaaaaaaaaaaaaaaaaaaaaa(\n"
" const bool &aaaaaaaaaa, const void *aaaaaaaaaa\n"
") const;",
Style);
verifyFormat("void aaaaaaaaa(\n"
" int aaaaaa, int bbbbbb, int cccccc, int dddddddddd\n"
") const noexcept -> std::vector<of_very_long_type>;",
Style);
verifyFormat(
"x = aaaaaaaaaaaaaaa(\n"
" \"a aaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaa\"\n"
");",
Style);
Style.ColumnLimit = 60;
verifyFormat("auto lambda =\n"
" [&b](\n"
" auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
" ) {};",
Style);
verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(\n"
" &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
");",
Style);
}
TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndent) {
auto Style = getLLVMStyle();
StringRef Short = "functionCall(paramA, paramB, paramC);\n"
"void functionDecl(int a, int b, int c);";
StringRef Medium = "functionCall(paramA, paramB, paramC, paramD, paramE, "
"paramF, paramG, paramH, paramI);\n"
"void functionDecl(int argumentA, int argumentB, int "
"argumentC, int argumentD, int argumentE);";
verifyFormat(Short, Style);
StringRef NoBreak = "functionCall(paramA, paramB, paramC, paramD, paramE, "
"paramF, paramG, paramH,\n"
" paramI);\n"
"void functionDecl(int argumentA, int argumentB, int "
"argumentC, int argumentD,\n"
" int argumentE);";
verifyFormat(NoBreak, Medium, Style);
verifyFormat(NoBreak,
"functionCall(\n"
" paramA,\n"
" paramB,\n"
" paramC,\n"
" paramD,\n"
" paramE,\n"
" paramF,\n"
" paramG,\n"
" paramH,\n"
" paramI\n"
");\n"
"void functionDecl(\n"
" int argumentA,\n"
" int argumentB,\n"
" int argumentC,\n"
" int argumentD,\n"
" int argumentE\n"
");",
Style);
verifyFormat("outerFunctionCall(nestedFunctionCall(argument1),\n"
" nestedLongFunctionCall(argument1, "
"argument2, argument3,\n"
" argument4, "
"argument5));",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
verifyFormat(Short, Style);
verifyFormat(
"functionCall(\n"
" paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "
"paramI\n"
");\n"
"void functionDecl(\n"
" int argumentA, int argumentB, int argumentC, int argumentD, int "
"argumentE\n"
");",
Medium, Style);
Style.AllowAllArgumentsOnNextLine = false;
Style.AllowAllParametersOfDeclarationOnNextLine = false;
verifyFormat(Short, Style);
verifyFormat(
"functionCall(\n"
" paramA, paramB, paramC, paramD, paramE, paramF, paramG, paramH, "
"paramI\n"
");\n"
"void functionDecl(\n"
" int argumentA, int argumentB, int argumentC, int argumentD, int "
"argumentE\n"
");",
Medium, Style);
Style.BinPackArguments = false;
Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
verifyFormat(Short, Style);
verifyFormat("functionCall(\n"
" paramA,\n"
" paramB,\n"
" paramC,\n"
" paramD,\n"
" paramE,\n"
" paramF,\n"
" paramG,\n"
" paramH,\n"
" paramI\n"
");\n"
"void functionDecl(\n"
" int argumentA,\n"
" int argumentB,\n"
" int argumentC,\n"
" int argumentD,\n"
" int argumentE\n"
");",
Medium, Style);
verifyFormat("outerFunctionCall(\n"
" nestedFunctionCall(argument1),\n"
" nestedLongFunctionCall(\n"
" argument1,\n"
" argument2,\n"
" argument3,\n"
" argument4,\n"
" argument5\n"
" )\n"
");",
Style);
verifyFormat("int a = (int)b;", Style);
verifyFormat("int a = (int)b;",
"int a = (\n"
" int\n"
") b;",
Style);
verifyFormat("return (true);", Style);
verifyFormat("return (true);",
"return (\n"
" true\n"
");",
Style);
verifyFormat("void foo();", Style);
verifyFormat("void foo();",
"void foo(\n"
");",
Style);
verifyFormat("void foo() {}", Style);
verifyFormat("void foo() {}",
"void foo(\n"
") {\n"
"}",
Style);
verifyFormat("auto string = std::string();", Style);
verifyFormat("auto string = std::string();",
"auto string = std::string(\n"
");",
Style);
verifyFormat("void (*functionPointer)() = nullptr;", Style);
verifyFormat("void (*functionPointer)() = nullptr;",
"void (\n"
" *functionPointer\n"
")\n"
"(\n"
") = nullptr;",
Style);
}
TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentIfStatement) {
auto Style = getLLVMStyle();
verifyFormat("if (foo()) {\n"
" return;\n"
"}",
Style);
verifyFormat("if (quiteLongArg !=\n"
" (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "
"comment\n"
" return;\n"
"}",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
verifyFormat("if (foo()) {\n"
" return;\n"
"}",
Style);
verifyFormat("if (quiteLongArg !=\n"
" (alsoLongArg - 1)) { // ABC is a very longgggggggggggg "
"comment\n"
" return;\n"
"}",
Style);
verifyFormat("void foo() {\n"
" if (camelCaseName < alsoLongName ||\n"
" anotherEvenLongerName <=\n"
" thisReallyReallyReallyReallyReallyReallyLongerName ||"
"\n"
" otherName < thisLastName) {\n"
" return;\n"
" } else if (quiteLongName < alsoLongName ||\n"
" anotherEvenLongerName <=\n"
" thisReallyReallyReallyReallyReallyReallyLonger"
"Name ||\n"
" otherName < thisLastName) {\n"
" return;\n"
" }\n"
"}",
Style);
Style.ContinuationIndentWidth = 2;
verifyFormat("void foo() {\n"
" if (ThisIsRatherALongIfClause && thatIExpectToBeBroken ||\n"
" ontoMultipleLines && whenFormattedCorrectly) {\n"
" if (false) {\n"
" return;\n"
" } else if (thisIsRatherALongIfClause && "
"thatIExpectToBeBroken ||\n"
" ontoMultipleLines && whenFormattedCorrectly) {\n"
" return;\n"
" }\n"
" }\n"
"}",
Style);
}
TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentForStatement) {
auto Style = getLLVMStyle();
verifyFormat("for (int i = 0; i < 5; ++i) {\n"
" doSomething();\n"
"}",
Style);
verifyFormat("for (int myReallyLongCountVariable = 0; "
"myReallyLongCountVariable < count;\n"
" myReallyLongCountVariable++) {\n"
" doSomething();\n"
"}",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
verifyFormat("for (int i = 0; i < 5; ++i) {\n"
" doSomething();\n"
"}",
Style);
verifyFormat("for (int myReallyLongCountVariable = 0; "
"myReallyLongCountVariable < count;\n"
" myReallyLongCountVariable++) {\n"
" doSomething();\n"
"}",
Style);
}
TEST_F(AlignBracketsTest, AlignAfterOpenBracketBlockIndentInitializers) {
auto Style = getLLVMStyleWithColumns(60);
Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
// Aggregate initialization.
verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"
" 10000000, 20000000\n"
"};",
Style);
verifyFormat("SomeStruct s{\n"
" \"xxxxxxxxxxxxxxxx\", \"yyyyyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzzzzz\"\n"
"};",
Style);
// Designated initializers.
verifyFormat("int LooooooooooooooooooooooooongVariable[2] = {\n"
" [0] = 10000000, [1] = 20000000\n"
"};",
Style);
verifyFormat("SomeStruct s{\n"
" .foo = \"xxxxxxxxxxxxx\",\n"
" .bar = \"yyyyyyyyyyyyy\",\n"
" .baz = \"zzzzzzzzzzzzz\"\n"
"};",
Style);
// List initialization.
verifyFormat("SomeStruct s{\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
verifyFormat("SomeStruct{\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
verifyFormat("new SomeStruct{\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
// Member initializer.
verifyFormat("class SomeClass {\n"
" SomeStruct s{\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
" };\n"
"};",
Style);
// Constructor member initializer.
verifyFormat("SomeClass::SomeClass : strct{\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
" } {}",
Style);
// Copy initialization.
verifyFormat("SomeStruct s = SomeStruct{\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
// Copy list initialization.
verifyFormat("SomeStruct s = {\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
// Assignment operand initialization.
verifyFormat("s = {\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
// Returned object initialization.
verifyFormat("return {\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
// Initializer list.
verifyFormat("auto initializerList = {\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"};",
Style);
// Function parameter initialization.
verifyFormat("func({\n"
" \"xxxxxxxxxxxxx\",\n"
" \"yyyyyyyyyyyyy\",\n"
" \"zzzzzzzzzzzzz\",\n"
"});",
Style);
// Nested init lists.
verifyFormat("SomeStruct s = {\n"
" {{init1, init2, init3, init4, init5},\n"
" {init1, init2, init3, init4, init5}}\n"
"};",
Style);
verifyFormat("SomeStruct s = {\n"
" {{\n"
" .init1 = 1,\n"
" .init2 = 2,\n"
" .init3 = 3,\n"
" .init4 = 4,\n"
" .init5 = 5,\n"
" },\n"
" {init1, init2, init3, init4, init5}}\n"
"};",
Style);
verifyFormat("SomeArrayT a[3] = {\n"
" {\n"
" foo,\n"
" bar,\n"
" },\n"
" {\n"
" foo,\n"
" bar,\n"
" },\n"
" SomeArrayT{},\n"
"};",
Style);
verifyFormat("SomeArrayT a[3] = {\n"
" {foo},\n"
" {\n"
" {\n"
" init1,\n"
" init2,\n"
" init3,\n"
" },\n"
" {\n"
" init1,\n"
" init2,\n"
" init3,\n"
" },\n"
" },\n"
" {baz},\n"
"};",
Style);
}
TEST_F(AlignBracketsTest, AllowAllArgumentsOnNextLineDontAlign) {
// Check that AllowAllArgumentsOnNextLine is respected for both BAS_DontAlign
// and BAS_Align.
FormatStyle Style = getLLVMStyleWithColumns(35);
StringRef Input = "functionCall(paramA, paramB, paramC);\n"
"void functionDecl(int A, int B, int C);";
Style.AllowAllArgumentsOnNextLine = false;
Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
verifyFormat(StringRef("functionCall(paramA, paramB,\n"
" paramC);\n"
"void functionDecl(int A, int B,\n"
" int C);"),
Input, Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
verifyFormat(StringRef("functionCall(paramA, paramB,\n"
" paramC);\n"
"void functionDecl(int A, int B,\n"
" int C);"),
Input, Style);
// However, BAS_AlwaysBreak and BAS_BlockIndent should take precedence over
// AllowAllArgumentsOnNextLine.
Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
verifyFormat(StringRef("functionCall(\n"
" paramA, paramB, paramC);\n"
"void functionDecl(\n"
" int A, int B, int C);"),
Input, Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
verifyFormat("functionCall(\n"
" paramA, paramB, paramC\n"
");\n"
"void functionDecl(\n"
" int A, int B, int C\n"
");",
Input, Style);
// When AllowAllArgumentsOnNextLine is set, we prefer breaking before the
// first argument.
Style.AllowAllArgumentsOnNextLine = true;
Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
verifyFormat(StringRef("functionCall(\n"
" paramA, paramB, paramC);\n"
"void functionDecl(\n"
" int A, int B, int C);"),
Input, Style);
// It wouldn't fit on one line with aligned parameters so this setting
// doesn't change anything for BAS_Align.
Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
verifyFormat(StringRef("functionCall(paramA, paramB,\n"
" paramC);\n"
"void functionDecl(int A, int B,\n"
" int C);"),
Input, Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
verifyFormat(StringRef("functionCall(\n"
" paramA, paramB, paramC);\n"
"void functionDecl(\n"
" int A, int B, int C);"),
Input, Style);
}
TEST_F(AlignBracketsTest, FormatsDeclarationBreakAlways) {
FormatStyle BreakAlways = getGoogleStyle();
BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
verifyFormat("void f(int a,\n"
" int b);",
BreakAlways);
verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
" int cccccccccccccccccccccccc);",
BreakAlways);
// Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set
// to BPPS_AlwaysOnePerLine.
BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
verifyFormat(
"void someLongFunctionName(\n"
" int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int b);",
BreakAlways);
BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
verifyFormat(
"void someLongFunctionName(\n"
" int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int b\n"
");",
BreakAlways);
}
TEST_F(AlignBracketsTest, FormatsDefinitionBreakAlways) {
FormatStyle BreakAlways = getGoogleStyle();
BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
verifyFormat("void f(int a,\n"
" int b) {\n"
" f(a, b);\n"
"}",
BreakAlways);
// Ensure BinPackArguments interact correctly when BinPackParameters is set to
// BPPS_AlwaysOnePerLine.
verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
" int cccccccccccccccccccccccc) {\n"
" f(aaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
" cccccccccccccccccccccccc);\n"
"}",
BreakAlways);
BreakAlways.BinPackArguments = false;
verifyFormat("void f(int aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
" int cccccccccccccccccccccccc) {\n"
" f(aaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" bbbbbbbbbbbbbbbbbbbbbbbbb,\n"
" cccccccccccccccccccccccc);\n"
"}",
BreakAlways);
// Ensure BreakFunctionDefinitionParameters interacts correctly when
// BinPackParameters is set to BPPS_AlwaysOnePerLine.
BreakAlways.BreakFunctionDefinitionParameters = true;
verifyFormat("void f(\n"
" int a,\n"
" int b) {\n"
" f(a, b);\n"
"}",
BreakAlways);
BreakAlways.BreakFunctionDefinitionParameters = false;
// Ensure AlignAfterOpenBracket interacts correctly with BinPackParameters set
// to BPPS_AlwaysOnePerLine.
BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak;
verifyFormat(
"void someLongFunctionName(\n"
" int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int b) {\n"
" someLongFunctionName(\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b);\n"
"}",
BreakAlways);
BreakAlways.AlignAfterOpenBracket = FormatStyle::BAS_BlockIndent;
verifyFormat(
"void someLongFunctionName(\n"
" int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" int b\n"
") {\n"
" someLongFunctionName(\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, b\n"
" );\n"
"}",
BreakAlways);
}
TEST_F(AlignBracketsTest, ParenthesesAndOperandAlignment) {
FormatStyle Style = getLLVMStyleWithColumns(40);
verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
" bbbbbbbbbbbbbbbbbbbbbb);",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_Align;
Style.AlignOperands = FormatStyle::OAS_DontAlign;
verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
" bbbbbbbbbbbbbbbbbbbbbb);",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
Style.AlignOperands = FormatStyle::OAS_Align;
verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
" bbbbbbbbbbbbbbbbbbbbbb);",
Style);
Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
Style.AlignOperands = FormatStyle::OAS_DontAlign;
verifyFormat("int a = f(aaaaaaaaaaaaaaaaaaaaaa &&\n"
" bbbbbbbbbbbbbbbbbbbbbb);",
Style);
}
} // namespace
} // namespace test
} // namespace format
} // namespace clang