1 //===- unittest/Format/FormatTest.cpp - Formatting unit tests -------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "clang/Format/Format.h"
12 #include "../Tooling/ReplacementTest.h"
13 #include "FormatTestUtils.h"
15 #include "clang/Frontend/TextDiagnosticPrinter.h"
16 #include "llvm/Support/Debug.h"
17 #include "llvm/Support/MemoryBuffer.h"
18 #include "gtest/gtest.h"
20 #define DEBUG_TYPE "format-test"
22 using clang::tooling::ReplacementTest;
23 using clang::tooling::toReplacements;
29 FormatStyle getGoogleStyle() { return getGoogleStyle(FormatStyle::LK_Cpp); }
31 class FormatTest : public ::testing::Test {
39 std::string format(llvm::StringRef Code,
40 const FormatStyle &Style = getLLVMStyle(),
41 StatusCheck CheckComplete = SC_ExpectComplete) {
42 DEBUG(llvm::errs() << "---\n");
43 DEBUG(llvm::errs() << Code << "\n\n");
44 std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size()));
45 FormattingAttemptStatus Status;
46 tooling::Replacements Replaces =
47 reformat(Style, Code, Ranges, "<stdin>", &Status);
48 if (CheckComplete != SC_DoNotCheck) {
49 bool ExpectedCompleteFormat = CheckComplete == SC_ExpectComplete;
50 EXPECT_EQ(ExpectedCompleteFormat, Status.FormatComplete)
53 ReplacementCount = Replaces.size();
54 auto Result = applyAllReplacements(Code, Replaces);
55 EXPECT_TRUE(static_cast<bool>(Result));
56 DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
60 FormatStyle getStyleWithColumns(FormatStyle Style, unsigned ColumnLimit) {
61 Style.ColumnLimit = ColumnLimit;
65 FormatStyle getLLVMStyleWithColumns(unsigned ColumnLimit) {
66 return getStyleWithColumns(getLLVMStyle(), ColumnLimit);
69 FormatStyle getGoogleStyleWithColumns(unsigned ColumnLimit) {
70 return getStyleWithColumns(getGoogleStyle(), ColumnLimit);
73 void verifyFormat(llvm::StringRef Expected, llvm::StringRef Code,
74 const FormatStyle &Style = getLLVMStyle()) {
75 EXPECT_EQ(Expected.str(), format(Code, Style));
76 if (Style.Language == FormatStyle::LK_Cpp) {
77 // Objective-C++ is a superset of C++, so everything checked for C++
78 // needs to be checked for Objective-C++ as well.
79 FormatStyle ObjCStyle = Style;
80 ObjCStyle.Language = FormatStyle::LK_ObjC;
81 EXPECT_EQ(Expected.str(), format(test::messUp(Code), ObjCStyle));
85 void verifyFormat(llvm::StringRef Code,
86 const FormatStyle &Style = getLLVMStyle()) {
87 verifyFormat(Code, test::messUp(Code), Style);
90 void verifyIncompleteFormat(llvm::StringRef Code,
91 const FormatStyle &Style = getLLVMStyle()) {
93 format(test::messUp(Code), Style, SC_ExpectIncomplete));
96 void verifyGoogleFormat(llvm::StringRef Code) {
97 verifyFormat(Code, getGoogleStyle());
100 void verifyIndependentOfContext(llvm::StringRef text) {
102 verifyFormat(llvm::Twine("void f() { " + text + " }").str());
105 /// \brief Verify that clang-format does not crash on the given input.
106 void verifyNoCrash(llvm::StringRef Code,
107 const FormatStyle &Style = getLLVMStyle()) {
108 format(Code, Style, SC_DoNotCheck);
111 int ReplacementCount;
114 TEST_F(FormatTest, MessUp) {
115 EXPECT_EQ("1 2 3", test::messUp("1 2 3"));
116 EXPECT_EQ("1 2 3\n", test::messUp("1\n2\n3\n"));
117 EXPECT_EQ("a\n//b\nc", test::messUp("a\n//b\nc"));
118 EXPECT_EQ("a\n#b\nc", test::messUp("a\n#b\nc"));
119 EXPECT_EQ("a\n#b c d\ne", test::messUp("a\n#b\\\nc\\\nd\ne"));
122 //===----------------------------------------------------------------------===//
123 // Basic function tests.
124 //===----------------------------------------------------------------------===//
126 TEST_F(FormatTest, DoesNotChangeCorrectlyFormattedCode) {
127 EXPECT_EQ(";", format(";"));
130 TEST_F(FormatTest, FormatsGlobalStatementsAt0) {
131 EXPECT_EQ("int i;", format(" int i;"));
132 EXPECT_EQ("\nint i;", format(" \n\t \v \f int i;"));
133 EXPECT_EQ("int i;\nint j;", format(" int i; int j;"));
134 EXPECT_EQ("int i;\nint j;", format(" int i;\n int j;"));
137 TEST_F(FormatTest, FormatsUnwrappedLinesAtFirstFormat) {
138 EXPECT_EQ("int i;", format("int\ni;"));
141 TEST_F(FormatTest, FormatsNestedBlockStatements) {
142 EXPECT_EQ("{\n {\n {}\n }\n}", format("{{{}}}"));
145 TEST_F(FormatTest, FormatsNestedCall) {
146 verifyFormat("Method(f1, f2(f3));");
147 verifyFormat("Method(f1(f2, f3()));");
148 verifyFormat("Method(f1(f2, (f3())));");
151 TEST_F(FormatTest, NestedNameSpecifiers) {
152 verifyFormat("vector<::Type> v;");
153 verifyFormat("::ns::SomeFunction(::ns::SomeOtherFunction())");
154 verifyFormat("static constexpr bool Bar = decltype(bar())::value;");
155 verifyFormat("bool a = 2 < ::SomeFunction();");
156 verifyFormat("ALWAYS_INLINE ::std::string getName();");
157 verifyFormat("some::string getName();");
160 TEST_F(FormatTest, OnlyGeneratesNecessaryReplacements) {
161 EXPECT_EQ("if (a) {\n"
164 format("if(a){f();}"));
165 EXPECT_EQ(4, ReplacementCount);
166 EXPECT_EQ("if (a) {\n"
172 EXPECT_EQ(0, ReplacementCount);
179 EXPECT_EQ(0, ReplacementCount);
182 TEST_F(FormatTest, RemovesEmptyLines) {
183 EXPECT_EQ("class C {\n"
191 // Don't remove empty lines at the start of namespaces or extern "C" blocks.
192 EXPECT_EQ("namespace N {\n"
196 format("namespace N {\n"
201 EXPECT_EQ("extern /**/ \"C\" /**/ {\n"
205 format("extern /**/ \"C\" /**/ {\n"
211 // ...but do keep inlining and removing empty lines for non-block extern "C"
213 verifyFormat("extern \"C\" int f() { return 42; }", getGoogleStyle());
214 EXPECT_EQ("extern \"C\" int f() {\n"
218 format("extern \"C\" int f() {\n"
225 // Remove empty lines at the beginning and end of blocks.
226 EXPECT_EQ("void f() {\n"
233 format("void f() {\n"
243 EXPECT_EQ("void f() {\n"
248 format("void f() {\n"
259 // Don't remove empty lines in more complex control statements.
260 EXPECT_EQ("void f() {\n"
268 format("void f() {\n"
279 // FIXME: This is slightly inconsistent.
280 FormatStyle LLVMWithNoNamespaceFix = getLLVMStyle();
281 LLVMWithNoNamespaceFix.FixNamespaceComments = false;
282 EXPECT_EQ("namespace {\n"
285 format("namespace {\n"
288 "}", LLVMWithNoNamespaceFix));
289 EXPECT_EQ("namespace {\n"
292 format("namespace {\n"
296 EXPECT_EQ("namespace {\n"
300 format("namespace {\n"
305 FormatStyle Style = getLLVMStyle();
306 Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_All;
307 Style.MaxEmptyLinesToKeep = 2;
308 Style.BreakBeforeBraces = FormatStyle::BS_Custom;
309 Style.BraceWrapping.AfterClass = true;
310 Style.BraceWrapping.AfterFunction = true;
311 Style.KeepEmptyLinesAtTheStartOfBlocks = false;
313 EXPECT_EQ("class Foo\n"
330 TEST_F(FormatTest, RecognizesBinaryOperatorKeywords) {
331 verifyFormat("x = (a) and (b);");
332 verifyFormat("x = (a) or (b);");
333 verifyFormat("x = (a) bitand (b);");
334 verifyFormat("x = (a) bitor (b);");
335 verifyFormat("x = (a) not_eq (b);");
336 verifyFormat("x = (a) and_eq (b);");
337 verifyFormat("x = (a) or_eq (b);");
338 verifyFormat("x = (a) xor (b);");
341 TEST_F(FormatTest, RecognizesUnaryOperatorKeywords) {
342 verifyFormat("x = compl(a);");
343 verifyFormat("x = not(a);");
344 verifyFormat("x = bitand(a);");
345 // Unary operator must not be merged with the next identifier
346 verifyFormat("x = compl a;");
347 verifyFormat("x = not a;");
348 verifyFormat("x = bitand a;");
351 //===----------------------------------------------------------------------===//
352 // Tests for control statements.
353 //===----------------------------------------------------------------------===//
355 TEST_F(FormatTest, FormatIfWithoutCompoundStatement) {
356 verifyFormat("if (true)\n f();\ng();");
357 verifyFormat("if (a)\n if (b)\n if (c)\n g();\nh();");
358 verifyFormat("if (a)\n if (b) {\n f();\n }\ng();");
359 verifyFormat("if constexpr (true)\n"
361 verifyFormat("if constexpr (a)\n"
362 " if constexpr (b)\n"
363 " if constexpr (c)\n"
366 verifyFormat("if constexpr (a)\n"
367 " if constexpr (b) {\n"
372 FormatStyle AllowsMergedIf = getLLVMStyle();
373 AllowsMergedIf.AlignEscapedNewlines = FormatStyle::ENAS_Left;
374 AllowsMergedIf.AllowShortIfStatementsOnASingleLine = true;
375 verifyFormat("if (a)\n"
385 verifyFormat("#define A \\\n"
390 verifyFormat("if (a)\n"
393 verifyFormat("if (a)\n"
397 verifyFormat("if (a) // Can't merge this\n"
400 verifyFormat("if (a) /* still don't merge */\n"
403 verifyFormat("if (a) { // Never merge this\n"
407 verifyFormat("if (a) { /* Never merge this */\n"
412 AllowsMergedIf.ColumnLimit = 14;
413 verifyFormat("if (a) return;", AllowsMergedIf);
414 verifyFormat("if (aaaaaaaaa)\n"
418 AllowsMergedIf.ColumnLimit = 13;
419 verifyFormat("if (a)\n return;", AllowsMergedIf);
422 TEST_F(FormatTest, FormatLoopsWithoutCompoundStatement) {
423 FormatStyle AllowsMergedLoops = getLLVMStyle();
424 AllowsMergedLoops.AllowShortLoopsOnASingleLine = true;
425 verifyFormat("while (true) continue;", AllowsMergedLoops);
426 verifyFormat("for (;;) continue;", AllowsMergedLoops);
427 verifyFormat("for (int &v : vec) v *= 2;", AllowsMergedLoops);
428 verifyFormat("while (true)\n"
431 verifyFormat("for (;;)\n"
434 verifyFormat("for (;;)\n"
435 " for (;;) continue;",
437 verifyFormat("for (;;) // Can't merge this\n"
440 verifyFormat("for (;;) /* still don't merge */\n"
445 TEST_F(FormatTest, FormatShortBracedStatements) {
446 FormatStyle AllowSimpleBracedStatements = getLLVMStyle();
447 AllowSimpleBracedStatements.ColumnLimit = 40;
448 AllowSimpleBracedStatements.AllowShortBlocksOnASingleLine = true;
450 AllowSimpleBracedStatements.AllowShortIfStatementsOnASingleLine = true;
451 AllowSimpleBracedStatements.AllowShortLoopsOnASingleLine = true;
453 AllowSimpleBracedStatements.BreakBeforeBraces = FormatStyle::BS_Custom;
454 AllowSimpleBracedStatements.BraceWrapping.AfterFunction = true;
455 AllowSimpleBracedStatements.BraceWrapping.SplitEmptyRecord = false;
457 verifyFormat("if (true) {}", AllowSimpleBracedStatements);
458 verifyFormat("if constexpr (true) {}", AllowSimpleBracedStatements);
459 verifyFormat("while (true) {}", AllowSimpleBracedStatements);
460 verifyFormat("for (;;) {}", AllowSimpleBracedStatements);
461 verifyFormat("if (true) { f(); }", AllowSimpleBracedStatements);
462 verifyFormat("if constexpr (true) { f(); }", AllowSimpleBracedStatements);
463 verifyFormat("while (true) { f(); }", AllowSimpleBracedStatements);
464 verifyFormat("for (;;) { f(); }", AllowSimpleBracedStatements);
465 verifyFormat("if (true) {\n"
466 " ffffffffffffffffffffffffffffffffffffffffffffffffffffff();\n"
468 AllowSimpleBracedStatements);
469 verifyFormat("if (true) { //\n"
472 AllowSimpleBracedStatements);
473 verifyFormat("if (true) {\n"
477 AllowSimpleBracedStatements);
478 verifyFormat("if (true) {\n"
483 AllowSimpleBracedStatements);
485 verifyFormat("struct A2 {\n"
488 AllowSimpleBracedStatements);
489 verifyFormat("typedef struct A2 {\n"
492 AllowSimpleBracedStatements);
493 verifyFormat("template <int> struct A2 {\n"
496 AllowSimpleBracedStatements);
498 AllowSimpleBracedStatements.AllowShortIfStatementsOnASingleLine = false;
499 verifyFormat("if (true) {}", AllowSimpleBracedStatements);
500 verifyFormat("if (true) {\n"
503 AllowSimpleBracedStatements);
504 verifyFormat("if (true) {\n"
509 AllowSimpleBracedStatements);
511 AllowSimpleBracedStatements.AllowShortLoopsOnASingleLine = false;
512 verifyFormat("while (true) {}", AllowSimpleBracedStatements);
513 verifyFormat("while (true) {\n"
516 AllowSimpleBracedStatements);
517 verifyFormat("for (;;) {}", AllowSimpleBracedStatements);
518 verifyFormat("for (;;) {\n"
521 AllowSimpleBracedStatements);
523 AllowSimpleBracedStatements.AllowShortIfStatementsOnASingleLine = true;
524 AllowSimpleBracedStatements.AllowShortLoopsOnASingleLine = true;
525 AllowSimpleBracedStatements.BraceWrapping.AfterControlStatement = true;
527 verifyFormat("if (true) {}", AllowSimpleBracedStatements);
528 verifyFormat("if constexpr (true) {}", AllowSimpleBracedStatements);
529 verifyFormat("while (true) {}", AllowSimpleBracedStatements);
530 verifyFormat("for (;;) {}", AllowSimpleBracedStatements);
531 verifyFormat("if (true) { f(); }", AllowSimpleBracedStatements);
532 verifyFormat("if constexpr (true) { f(); }", AllowSimpleBracedStatements);
533 verifyFormat("while (true) { f(); }", AllowSimpleBracedStatements);
534 verifyFormat("for (;;) { f(); }", AllowSimpleBracedStatements);
535 verifyFormat("if (true)\n"
537 " ffffffffffffffffffffffffffffffffffffffffffffffffffffff();\n"
539 AllowSimpleBracedStatements);
540 verifyFormat("if (true)\n"
544 AllowSimpleBracedStatements);
545 verifyFormat("if (true)\n"
550 AllowSimpleBracedStatements);
551 verifyFormat("if (true)\n"
558 AllowSimpleBracedStatements);
560 AllowSimpleBracedStatements.AllowShortIfStatementsOnASingleLine = false;
561 verifyFormat("if (true) {}", AllowSimpleBracedStatements);
562 verifyFormat("if (true)\n"
566 AllowSimpleBracedStatements);
567 verifyFormat("if (true)\n"
574 AllowSimpleBracedStatements);
576 AllowSimpleBracedStatements.AllowShortLoopsOnASingleLine = false;
577 verifyFormat("while (true) {}", AllowSimpleBracedStatements);
578 verifyFormat("while (true)\n"
582 AllowSimpleBracedStatements);
583 verifyFormat("for (;;) {}", AllowSimpleBracedStatements);
584 verifyFormat("for (;;)\n"
588 AllowSimpleBracedStatements);
591 TEST_F(FormatTest, ShortBlocksInMacrosDontMergeWithCodeAfterMacro) {
592 FormatStyle Style = getLLVMStyleWithColumns(60);
593 Style.AllowShortBlocksOnASingleLine = true;
594 Style.AllowShortIfStatementsOnASingleLine = true;
595 Style.BreakBeforeBraces = FormatStyle::BS_Allman;
596 EXPECT_EQ("#define A \\\n"
597 " if (HANDLEwernufrnuLwrmviferuvnierv) \\\n"
598 " { RET_ERR1_ANUIREUINERUIFNIOAerwfwrvnuier; }\n"
600 format("#define A \\\n"
601 " if (HANDLEwernufrnuLwrmviferuvnierv) { \\\n"
602 " RET_ERR1_ANUIREUINERUIFNIOAerwfwrvnuier; \\\n"
608 TEST_F(FormatTest, ParseIfElse) {
609 verifyFormat("if (true)\n"
619 verifyFormat("if (true)\n"
632 verifyFormat("if (true)\n"
633 " if constexpr (true)\n"
635 " if constexpr (true)\n"
645 verifyFormat("void f() {\n"
652 TEST_F(FormatTest, ElseIf) {
653 verifyFormat("if (a) {\n} else if (b) {\n}");
654 verifyFormat("if (a)\n"
660 verifyFormat("if constexpr (a)\n"
662 "else if constexpr (b)\n"
666 verifyFormat("if (a) {\n"
674 verifyFormat("if (a) {\n"
675 "} else if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
676 " aaaaaaaaaaaaaaaaaaaaaaaaaaaa)) {\n"
678 verifyFormat("if (a) {\n"
680 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n"
682 getLLVMStyleWithColumns(62));
683 verifyFormat("if (a) {\n"
684 "} else if constexpr (\n"
685 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n"
687 getLLVMStyleWithColumns(62));
690 TEST_F(FormatTest, FormatsForLoop) {
692 "for (int VeryVeryLongLoopVariable = 0; VeryVeryLongLoopVariable < 10;\n"
693 " ++VeryVeryLongLoopVariable)\n"
695 verifyFormat("for (;;)\n"
697 verifyFormat("for (;;) {\n}");
698 verifyFormat("for (;;) {\n"
701 verifyFormat("for (int i = 0; (i < 10); ++i) {\n}");
704 "for (std::vector<UnwrappedLine>::iterator I = UnwrappedLines.begin(),\n"
705 " E = UnwrappedLines.end();\n"
706 " I != E; ++I) {\n}");
709 "for (MachineFun::iterator IIII = PrevIt, EEEE = F.end(); IIII != EEEE;\n"
711 verifyFormat("for (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaa =\n"
712 " aaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaa;\n"
713 " aaaaaaaaaaa != aaaaaaaaaaaaaaaaaaa; ++aaaaaaaaaaa) {\n}");
714 verifyFormat("for (llvm::ArrayRef<NamedDecl *>::iterator\n"
715 " I = FD->getDeclsInPrototypeScope().begin(),\n"
716 " E = FD->getDeclsInPrototypeScope().end();\n"
717 " I != E; ++I) {\n}");
718 verifyFormat("for (SmallVectorImpl<TemplateIdAnnotationn *>::iterator\n"
719 " I = Container.begin(),\n"
720 " E = Container.end();\n"
721 " I != E; ++I) {\n}",
722 getLLVMStyleWithColumns(76));
725 "for (aaaaaaaaaaaaaaaaa aaaaaaaaaaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;\n"
726 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa !=\n"
727 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
728 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);\n"
729 " ++aaaaaaaaaaa) {\n}");
730 verifyFormat("for (int i = 0; i < aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
731 " bbbbbbbbbbbbbbbbbbbb < ccccccccccccccc;\n"
733 verifyFormat("for (int aaaaaaaaaaa = 1; aaaaaaaaaaa <= bbbbbbbbbbbbbbb;\n"
734 " aaaaaaaaaaa++, bbbbbbbbbbbbbbbbb++) {\n"
736 verifyFormat("for (some_namespace::SomeIterator iter( // force break\n"
740 verifyFormat("for (auto aaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
741 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);\n"
742 " aaaaaaaaaaaaaaaaaaaaaaaaaaa != bbbbbbbbbbbbbbbbbbbbbbb;\n"
743 " ++aaaaaaaaaaaaaaaaaaaaaaaaaaa) {");
745 // These should not be formatted as Objective-C for-in loops.
746 verifyFormat("for (Foo *x = 0; x != in; x++) {\n}");
747 verifyFormat("Foo *x;\nfor (x = 0; x != in; x++) {\n}");
748 verifyFormat("Foo *x;\nfor (x in y) {\n}");
749 verifyFormat("for (const Foo<Bar> &baz = in.value(); !baz.at_end(); ++baz) {\n}");
751 FormatStyle NoBinPacking = getLLVMStyle();
752 NoBinPacking.BinPackParameters = false;
753 verifyFormat("for (int aaaaaaaaaaa = 1;\n"
754 " aaaaaaaaaaa <= aaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa,\n"
755 " aaaaaaaaaaaaaaaa,\n"
756 " aaaaaaaaaaaaaaaa,\n"
757 " aaaaaaaaaaaaaaaa);\n"
758 " aaaaaaaaaaa++, bbbbbbbbbbbbbbbbb++) {\n"
762 "for (std::vector<UnwrappedLine>::iterator I = UnwrappedLines.begin(),\n"
763 " E = UnwrappedLines.end();\n"
768 FormatStyle AlignLeft = getLLVMStyle();
769 AlignLeft.PointerAlignment = FormatStyle::PAS_Left;
770 verifyFormat("for (A* a = start; a < end; ++a, ++value) {\n}", AlignLeft);
773 TEST_F(FormatTest, RangeBasedForLoops) {
774 verifyFormat("for (auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa :\n"
775 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n}");
776 verifyFormat("for (auto aaaaaaaaaaaaaaaaaaaaa :\n"
777 " aaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaa, aaaaaaaaaaaaa)) {\n}");
778 verifyFormat("for (const aaaaaaaaaaaaaaaaaaaaa &aaaaaaaaa :\n"
779 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n}");
780 verifyFormat("for (aaaaaaaaa aaaaaaaaaaaaaaaaaaaaa :\n"
781 " aaaaaaaaaaaa.aaaaaaaaaaaa().aaaaaaaaa().a()) {\n}");
784 TEST_F(FormatTest, ForEachLoops) {
785 verifyFormat("void f() {\n"
786 " foreach (Item *item, itemlist) {}\n"
787 " Q_FOREACH (Item *item, itemlist) {}\n"
788 " BOOST_FOREACH (Item *item, itemlist) {}\n"
789 " UNKNOWN_FORACH(Item * item, itemlist) {}\n"
792 // As function-like macros.
793 verifyFormat("#define foreach(x, y)\n"
794 "#define Q_FOREACH(x, y)\n"
795 "#define BOOST_FOREACH(x, y)\n"
796 "#define UNKNOWN_FOREACH(x, y)\n");
798 // Not as function-like macros.
799 verifyFormat("#define foreach (x, y)\n"
800 "#define Q_FOREACH (x, y)\n"
801 "#define BOOST_FOREACH (x, y)\n"
802 "#define UNKNOWN_FOREACH (x, y)\n");
805 TEST_F(FormatTest, FormatsWhileLoop) {
806 verifyFormat("while (true) {\n}");
807 verifyFormat("while (true)\n"
809 verifyFormat("while () {\n}");
810 verifyFormat("while () {\n"
815 TEST_F(FormatTest, FormatsDoWhile) {
816 verifyFormat("do {\n"
818 "} while (something());");
821 "while (something());");
824 TEST_F(FormatTest, FormatsSwitchStatement) {
825 verifyFormat("switch (x) {\n"
837 verifyFormat("switch (x) {\n"
846 verifyFormat("switch (x) {\n"
856 verifyFormat("switch (x) {\n"
866 verifyFormat("switch (x) {\n"
872 verifyFormat("switch (test)\n"
874 verifyFormat("switch (x) {\n"
879 verifyFormat("switch (x) {\n"
885 verifyFormat("switch (x) {\n"
887 " // Do amazing stuff\n"
894 verifyFormat("#define A \\\n"
899 getLLVMStyleWithColumns(20));
900 verifyFormat("#define OPERATION_CASE(name) \\\n"
901 " case OP_name: \\\n"
902 " return operations::Operation##name\n",
903 getLLVMStyleWithColumns(40));
904 verifyFormat("switch (x) {\n"
910 verifyGoogleFormat("switch (x) {\n"
922 verifyGoogleFormat("switch (x) {\n"
928 verifyGoogleFormat("switch (test)\n"
931 verifyGoogleFormat("#define OPERATION_CASE(name) \\\n"
932 " case OP_name: \\\n"
933 " return operations::Operation##name\n");
934 verifyGoogleFormat("Operation codeToOperation(OperationCode OpCode) {\n"
935 " // Get the correction operation class.\n"
936 " switch (OpCode) {\n"
940 " return operations::Unknown;\n"
942 "#undef OPERATION_CASE\n"
944 verifyFormat("DEBUG({\n"
955 EXPECT_EQ("DEBUG({\n"
978 verifyFormat("switch (a) {\n"
983 verifyFormat("switch (a) {\n"
984 "case some_namespace::\n"
988 getLLVMStyleWithColumns(34));
991 TEST_F(FormatTest, CaseRanges) {
992 verifyFormat("switch (x) {\n"
993 "case 'A' ... 'Z':\n"
1000 TEST_F(FormatTest, ShortCaseLabels) {
1001 FormatStyle Style = getLLVMStyle();
1002 Style.AllowShortCaseLabelsOnASingleLine = true;
1003 verifyFormat("switch (a) {\n"
1004 "case 1: x = 1; break;\n"
1009 "case 6: // comment\n"
1015 " x = 8; // comment\n"
1017 "default: y = 1; break;\n"
1020 verifyFormat("switch (a) {\n"
1021 "case 0: return; // comment\n"
1022 "case 1: break; // comment\n"
1029 "case 4: break; /* comment */\n"
1033 "case 6: /* comment */ x = 1; break;\n"
1034 "case 7: x = /* comment */ 1; break;\n"
1036 " x = 1; /* comment */\n"
1039 " break; // comment line 1\n"
1040 " // comment line 2\n"
1043 EXPECT_EQ("switch (a) {\n"
1046 " // fall through\n"
1050 " return; /* comment line 1\n"
1051 " * comment line 2 */\n"
1053 "// something else\n"
1058 format("switch (a) {\n"
1060 " // fall through\n"
1065 " return; /* comment line 1\n"
1066 " * comment line 2 */\n"
1069 "// something else\n"
1075 EXPECT_EQ("switch (a) {\n" "case 0:\n"
1076 " return; // long long long long long long long long long long long long comment\n"
1078 format("switch (a) {\n"
1079 "case 0: return; // long long long long long long long long long long long long comment line\n"
1082 EXPECT_EQ("switch (a) {\n"
1084 " return; /* long long long long long long long long long long long long comment\n"
1087 format("switch (a) {\n"
1088 "case 0: return; /* long long long long long long long long long long long long comment line */\n"
1091 verifyFormat("switch (a) {\n"
1093 "case 0: return 0;\n"
1097 verifyFormat("switch (a) {\n"
1112 Style.ColumnLimit = 21;
1113 verifyFormat("switch (a) {\n"
1114 "case 1: x = 1; break;\n"
1126 TEST_F(FormatTest, FormatsLabels) {
1127 verifyFormat("void f() {\n"
1130 " some_other_code();\n"
1132 " some_more_code();\n"
1134 " some_more_code();\n"
1140 " some_other_code();\n"
1149 //===----------------------------------------------------------------------===//
1150 // Tests for classes, namespaces, etc.
1151 //===----------------------------------------------------------------------===//
1153 TEST_F(FormatTest, DoesNotBreakSemiAfterClassDecl) {
1154 verifyFormat("class A {};");
1157 TEST_F(FormatTest, UnderstandsAccessSpecifiers) {
1158 verifyFormat("class A {\n"
1160 "public: // comment\n"
1165 verifyGoogleFormat("class A {\n"
1171 verifyFormat("class A {\n"
1176 "protected slots:\n"
1178 "protected Q_SLOTS:\n"
1182 "private Q_SLOTS:\n"
1190 // Don't interpret 'signals' the wrong way.
1191 verifyFormat("signals.set();");
1192 verifyFormat("for (Signals signals : f()) {\n}");
1194 " signals.set(); // This needs indentation.\n"
1196 verifyFormat("void f() {\n"
1202 TEST_F(FormatTest, SeparatesLogicalBlocks) {
1203 EXPECT_EQ("class A {\n"
1213 format("class A {\n"
1222 EXPECT_EQ("class A {\n"
1227 format("class A {\n"
1235 // Even ensure proper spacing inside macros.
1236 EXPECT_EQ("#define B \\\n"
1242 format("#define B \\\n"
1251 // But don't remove empty lines after macros ending in access specifiers.
1252 EXPECT_EQ("#define A private:\n"
1255 format("#define A private:\n"
1260 TEST_F(FormatTest, FormatsClasses) {
1261 verifyFormat("class A : public B {};");
1262 verifyFormat("class A : public ::B {};");
1265 "class AAAAAAAAAAAAAAAAAAAA : public BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,\n"
1266 " public CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC {};");
1267 verifyFormat("class AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
1268 " : public BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,\n"
1269 " public CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC {};");
1271 "class A : public B, public C, public D, public E, public F {};");
1272 verifyFormat("class AAAAAAAAAAAA : public B,\n"
1279 verifyFormat("class\n"
1280 " ReallyReallyLongClassName {\n"
1283 getLLVMStyleWithColumns(32));
1284 verifyFormat("struct aaaaaaaaaaaaa : public aaaaaaaaaaaaaaaaaaa< // break\n"
1285 " aaaaaaaaaaaaaaaa> {};");
1286 verifyFormat("struct aaaaaaaaaaaaaaaaaaaa\n"
1287 " : public aaaaaaaaaaaaaaaaaaa<aaaaaaaaaaaaaaaaaaaaa,\n"
1288 " aaaaaaaaaaaaaaaaaaaaaa> {};");
1289 verifyFormat("template <class R, class C>\n"
1290 "struct Aaaaaaaaaaaaaaaaa<R (C::*)(int) const>\n"
1291 " : Aaaaaaaaaaaaaaaaa<R (C::*)(int)> {};");
1292 verifyFormat("class ::A::B {};");
1295 TEST_F(FormatTest, BreakBeforeInheritanceComma) {
1296 FormatStyle StyleWithInheritanceBreak = getLLVMStyle();
1297 StyleWithInheritanceBreak.BreakBeforeInheritanceComma = true;
1299 verifyFormat("class MyClass : public X {};", StyleWithInheritanceBreak);
1300 verifyFormat("class MyClass\n"
1303 StyleWithInheritanceBreak);
1306 TEST_F(FormatTest, FormatsVariableDeclarationsAfterStructOrClass) {
1307 verifyFormat("class A {\n} a, b;");
1308 verifyFormat("struct A {\n} a, b;");
1309 verifyFormat("union A {\n} a;");
1312 TEST_F(FormatTest, FormatsEnum) {
1313 verifyFormat("enum {\n"
1317 " Three = (One + Two),\n"
1318 " Four = (Zero && (One ^ Two)) | (One << Two),\n"
1319 " Five = (One, Two, Three, Four, 5)\n"
1321 verifyGoogleFormat("enum {\n"
1325 " Three = (One + Two),\n"
1326 " Four = (Zero && (One ^ Two)) | (One << Two),\n"
1327 " Five = (One, Two, Three, Four, 5)\n"
1329 verifyFormat("enum Enum {};");
1330 verifyFormat("enum {};");
1331 verifyFormat("enum X E {} d;");
1332 verifyFormat("enum __attribute__((...)) E {} d;");
1333 verifyFormat("enum __declspec__((...)) E {} d;");
1334 verifyFormat("enum {\n"
1335 " Bar = Foo<int, int>::value\n"
1337 getLLVMStyleWithColumns(30));
1339 verifyFormat("enum ShortEnum { A, B, C };");
1340 verifyGoogleFormat("enum ShortEnum { A, B, C };");
1342 EXPECT_EQ("enum KeepEmptyLines {\n"
1349 format("enum KeepEmptyLines {\n"
1357 verifyFormat("enum E { // comment\n"
1363 verifyFormat("enum X f() {\n"
1367 verifyFormat("enum X Type::f() {\n"
1371 verifyFormat("enum ::X f() {\n"
1375 verifyFormat("enum ns::X f() {\n"
1381 TEST_F(FormatTest, FormatsEnumsWithErrors) {
1382 verifyFormat("enum Type {\n"
1383 " One = 0; // These semicolons should be commas.\n"
1386 verifyFormat("namespace n {\n"
1389 " Two, // missing };\n"
1395 TEST_F(FormatTest, FormatsEnumStruct) {
1396 verifyFormat("enum struct {\n"
1400 " Three = (One + Two),\n"
1401 " Four = (Zero && (One ^ Two)) | (One << Two),\n"
1402 " Five = (One, Two, Three, Four, 5)\n"
1404 verifyFormat("enum struct Enum {};");
1405 verifyFormat("enum struct {};");
1406 verifyFormat("enum struct X E {} d;");
1407 verifyFormat("enum struct __attribute__((...)) E {} d;");
1408 verifyFormat("enum struct __declspec__((...)) E {} d;");
1409 verifyFormat("enum struct X f() {\n a();\n return 42;\n}");
1412 TEST_F(FormatTest, FormatsEnumClass) {
1413 verifyFormat("enum class {\n"
1417 " Three = (One + Two),\n"
1418 " Four = (Zero && (One ^ Two)) | (One << Two),\n"
1419 " Five = (One, Two, Three, Four, 5)\n"
1421 verifyFormat("enum class Enum {};");
1422 verifyFormat("enum class {};");
1423 verifyFormat("enum class X E {} d;");
1424 verifyFormat("enum class __attribute__((...)) E {} d;");
1425 verifyFormat("enum class __declspec__((...)) E {} d;");
1426 verifyFormat("enum class X f() {\n a();\n return 42;\n}");
1429 TEST_F(FormatTest, FormatsEnumTypes) {
1430 verifyFormat("enum X : int {\n"
1431 " A, // Force multiple lines.\n"
1434 verifyFormat("enum X : int { A, B };");
1435 verifyFormat("enum X : std::uint32_t { A, B };");
1438 TEST_F(FormatTest, FormatsTypedefEnum) {
1439 FormatStyle Style = getLLVMStyle();
1440 Style.ColumnLimit = 40;
1441 verifyFormat("typedef enum {} EmptyEnum;");
1442 verifyFormat("typedef enum { A, B, C } ShortEnum;");
1443 verifyFormat("typedef enum {\n"
1450 Style.BreakBeforeBraces = FormatStyle::BS_Custom;
1451 Style.BraceWrapping.AfterEnum = true;
1452 verifyFormat("typedef enum {} EmptyEnum;");
1453 verifyFormat("typedef enum { A, B, C } ShortEnum;");
1454 verifyFormat("typedef enum\n"
1464 TEST_F(FormatTest, FormatsNSEnums) {
1465 verifyGoogleFormat("typedef NS_ENUM(NSInteger, SomeName) { AAA, BBB }");
1466 verifyGoogleFormat("typedef NS_ENUM(NSInteger, MyType) {\n"
1467 " // Information about someDecentlyLongValue.\n"
1468 " someDecentlyLongValue,\n"
1469 " // Information about anotherDecentlyLongValue.\n"
1470 " anotherDecentlyLongValue,\n"
1471 " // Information about aThirdDecentlyLongValue.\n"
1472 " aThirdDecentlyLongValue\n"
1474 verifyGoogleFormat("typedef NS_OPTIONS(NSInteger, MyType) {\n"
1479 verifyGoogleFormat("typedef CF_ENUM(NSInteger, MyType) {\n"
1484 verifyGoogleFormat("typedef CF_OPTIONS(NSInteger, MyType) {\n"
1491 TEST_F(FormatTest, FormatsBitfields) {
1492 verifyFormat("struct Bitfields {\n"
1493 " unsigned sClass : 8;\n"
1494 " unsigned ValueKind : 2;\n"
1496 verifyFormat("struct A {\n"
1497 " int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa : 1,\n"
1498 " bbbbbbbbbbbbbbbbbbbbbbbbb;\n"
1500 verifyFormat("struct MyStruct {\n"
1508 TEST_F(FormatTest, FormatsNamespaces) {
1509 FormatStyle LLVMWithNoNamespaceFix = getLLVMStyle();
1510 LLVMWithNoNamespaceFix.FixNamespaceComments = false;
1512 verifyFormat("namespace some_namespace {\n"
1514 "void f() { f(); }\n"
1516 LLVMWithNoNamespaceFix);
1517 verifyFormat("namespace {\n"
1519 "void f() { f(); }\n"
1521 LLVMWithNoNamespaceFix);
1522 verifyFormat("inline namespace X {\n"
1524 "void f() { f(); }\n"
1526 LLVMWithNoNamespaceFix);
1527 verifyFormat("using namespace some_namespace;\n"
1529 "void f() { f(); }",
1530 LLVMWithNoNamespaceFix);
1532 // This code is more common than we thought; if we
1533 // layout this correctly the semicolon will go into
1534 // its own line, which is undesirable.
1535 verifyFormat("namespace {};",
1536 LLVMWithNoNamespaceFix);
1537 verifyFormat("namespace {\n"
1540 LLVMWithNoNamespaceFix);
1542 verifyFormat("namespace {\n"
1543 "int SomeVariable = 0; // comment\n"
1545 LLVMWithNoNamespaceFix);
1546 EXPECT_EQ("#ifndef HEADER_GUARD\n"
1547 "#define HEADER_GUARD\n"
1548 "namespace my_namespace {\n"
1550 "} // my_namespace\n"
1551 "#endif // HEADER_GUARD",
1552 format("#ifndef HEADER_GUARD\n"
1553 " #define HEADER_GUARD\n"
1554 " namespace my_namespace {\n"
1556 "} // my_namespace\n"
1557 "#endif // HEADER_GUARD",
1558 LLVMWithNoNamespaceFix));
1560 EXPECT_EQ("namespace A::B {\n"
1563 format("namespace A::B {\n"
1566 LLVMWithNoNamespaceFix));
1568 FormatStyle Style = getLLVMStyle();
1569 Style.NamespaceIndentation = FormatStyle::NI_All;
1570 EXPECT_EQ("namespace out {\n"
1574 " } // namespace in\n"
1575 "} // namespace out",
1576 format("namespace out {\n"
1580 "} // namespace in\n"
1581 "} // namespace out",
1584 Style.NamespaceIndentation = FormatStyle::NI_Inner;
1585 EXPECT_EQ("namespace out {\n"
1589 "} // namespace in\n"
1590 "} // namespace out",
1591 format("namespace out {\n"
1595 "} // namespace in\n"
1596 "} // namespace out",
1600 TEST_F(FormatTest, FormatsCompactNamespaces) {
1601 FormatStyle Style = getLLVMStyle();
1602 Style.CompactNamespaces = true;
1604 verifyFormat("namespace A { namespace B {\n"
1605 "}} // namespace A::B",
1608 EXPECT_EQ("namespace out { namespace in {\n"
1609 "}} // namespace out::in",
1610 format("namespace out {\n"
1612 "} // namespace in\n"
1613 "} // namespace out",
1616 // Only namespaces which have both consecutive opening and end get compacted
1617 EXPECT_EQ("namespace out {\n"
1619 "} // namespace in1\n"
1621 "} // namespace in2\n"
1622 "} // namespace out",
1623 format("namespace out {\n"
1625 "} // namespace in1\n"
1627 "} // namespace in2\n"
1628 "} // namespace out",
1631 EXPECT_EQ("namespace out {\n"
1635 "} // namespace in\n"
1637 "} // namespace out",
1638 format("namespace out { int i;\n"
1639 "namespace in { int j; } // namespace in\n"
1640 "int k; } // namespace out",
1643 EXPECT_EQ("namespace A { namespace B { namespace C {\n"
1644 "}}} // namespace A::B::C\n",
1645 format("namespace A { namespace B {\n"
1647 "}} // namespace B::C\n"
1648 "} // namespace A\n",
1651 Style.ColumnLimit = 40;
1652 EXPECT_EQ("namespace aaaaaaaaaa {\n"
1653 "namespace bbbbbbbbbb {\n"
1654 "}} // namespace aaaaaaaaaa::bbbbbbbbbb",
1655 format("namespace aaaaaaaaaa {\n"
1656 "namespace bbbbbbbbbb {\n"
1657 "} // namespace bbbbbbbbbb\n"
1658 "} // namespace aaaaaaaaaa",
1661 EXPECT_EQ("namespace aaaaaa { namespace bbbbbb {\n"
1662 "namespace cccccc {\n"
1663 "}}} // namespace aaaaaa::bbbbbb::cccccc",
1664 format("namespace aaaaaa {\n"
1665 "namespace bbbbbb {\n"
1666 "namespace cccccc {\n"
1667 "} // namespace cccccc\n"
1668 "} // namespace bbbbbb\n"
1669 "} // namespace aaaaaa",
1671 Style.ColumnLimit = 80;
1673 // Extra semicolon after 'inner' closing brace prevents merging
1674 EXPECT_EQ("namespace out { namespace in {\n"
1675 "}; } // namespace out::in",
1676 format("namespace out {\n"
1678 "}; // namespace in\n"
1679 "} // namespace out",
1682 // Extra semicolon after 'outer' closing brace is conserved
1683 EXPECT_EQ("namespace out { namespace in {\n"
1684 "}}; // namespace out::in",
1685 format("namespace out {\n"
1687 "} // namespace in\n"
1688 "}; // namespace out",
1691 Style.NamespaceIndentation = FormatStyle::NI_All;
1692 EXPECT_EQ("namespace out { namespace in {\n"
1694 "}} // namespace out::in",
1695 format("namespace out {\n"
1698 "} // namespace in\n"
1699 "} // namespace out",
1701 EXPECT_EQ("namespace out { namespace mid {\n"
1704 " } // namespace in\n"
1706 "}} // namespace out::mid",
1707 format("namespace out { namespace mid {\n"
1708 "namespace in { int j; } // namespace in\n"
1709 "int k; }} // namespace out::mid",
1712 Style.NamespaceIndentation = FormatStyle::NI_Inner;
1713 EXPECT_EQ("namespace out { namespace in {\n"
1715 "}} // namespace out::in",
1716 format("namespace out {\n"
1719 "} // namespace in\n"
1720 "} // namespace out",
1722 EXPECT_EQ("namespace out { namespace mid { namespace in {\n"
1724 "}}} // namespace out::mid::in",
1725 format("namespace out {\n"
1729 "} // namespace in\n"
1730 "} // namespace mid\n"
1731 "} // namespace out",
1735 TEST_F(FormatTest, FormatsExternC) {
1736 verifyFormat("extern \"C\" {\nint a;");
1737 verifyFormat("extern \"C\" {}");
1738 verifyFormat("extern \"C\" {\n"
1741 verifyFormat("extern \"C\" int foo() {}");
1742 verifyFormat("extern \"C\" int foo();");
1743 verifyFormat("extern \"C\" int foo() {\n"
1748 FormatStyle Style = getLLVMStyle();
1749 Style.BreakBeforeBraces = FormatStyle::BS_Custom;
1750 Style.BraceWrapping.AfterFunction = true;
1751 verifyFormat("extern \"C\" int foo() {}", Style);
1752 verifyFormat("extern \"C\" int foo();", Style);
1753 verifyFormat("extern \"C\" int foo()\n"
1760 Style.BraceWrapping.AfterExternBlock = true;
1761 Style.BraceWrapping.SplitEmptyRecord = false;
1762 verifyFormat("extern \"C\"\n"
1765 verifyFormat("extern \"C\"\n"
1772 TEST_F(FormatTest, FormatsInlineASM) {
1773 verifyFormat("asm(\"xyz\" : \"=a\"(a), \"=d\"(b) : \"a\"(data));");
1774 verifyFormat("asm(\"nop\" ::: \"memory\");");
1776 "asm(\"movq\\t%%rbx, %%rsi\\n\\t\"\n"
1777 " \"cpuid\\n\\t\"\n"
1778 " \"xchgq\\t%%rbx, %%rsi\\n\\t\"\n"
1779 " : \"=a\"(*rEAX), \"=S\"(*rEBX), \"=c\"(*rECX), \"=d\"(*rEDX)\n"
1780 " : \"a\"(value));");
1782 "void NS_InvokeByIndex(void *that, unsigned int methodIndex) {\n"
1784 " mov edx,[that] // vtable in edx\n"
1785 " mov eax,methodIndex\n"
1786 " call [edx][eax*4] // stdcall\n"
1789 format("void NS_InvokeByIndex(void *that, unsigned int methodIndex) {\n"
1791 " mov edx,[that] // vtable in edx\n"
1792 " mov eax,methodIndex\n"
1793 " call [edx][eax*4] // stdcall\n"
1796 EXPECT_EQ("_asm {\n"
1804 verifyFormat("void function() {\n"
1808 EXPECT_EQ("__asm {\n"
1816 TEST_F(FormatTest, FormatTryCatch) {
1817 verifyFormat("try {\n"
1819 "} catch (int a) {\n"
1825 // Function-level try statements.
1826 verifyFormat("int f() try { return 4; } catch (...) {\n"
1829 verifyFormat("class A {\n"
1831 " A() try : a(0) {\n"
1832 " } catch (...) {\n"
1837 // Incomplete try-catch blocks.
1838 verifyIncompleteFormat("try {} catch (");
1841 TEST_F(FormatTest, FormatSEHTryCatch) {
1842 verifyFormat("__try {\n"
1844 "} __except (EXCEPTION_EXECUTE_HANDLER) {\n"
1848 verifyFormat("__try {\n"
1854 verifyFormat("DEBUG({\n"
1861 TEST_F(FormatTest, IncompleteTryCatchBlocks) {
1862 verifyFormat("try {\n"
1867 verifyFormat("try {\n"
1869 "} catch (A a) MACRO(x) {\n"
1871 "} catch (B b) MACRO(x) {\n"
1876 TEST_F(FormatTest, FormatTryCatchBraceStyles) {
1877 FormatStyle Style = getLLVMStyle();
1878 for (auto BraceStyle : {FormatStyle::BS_Attach, FormatStyle::BS_Mozilla,
1879 FormatStyle::BS_WebKit}) {
1880 Style.BreakBeforeBraces = BraceStyle;
1881 verifyFormat("try {\n"
1888 Style.BreakBeforeBraces = FormatStyle::BS_Stroustrup;
1889 verifyFormat("try {\n"
1896 verifyFormat("__try {\n"
1903 verifyFormat("@try {\n"
1910 Style.BreakBeforeBraces = FormatStyle::BS_Allman;
1911 verifyFormat("try\n"
1920 Style.BreakBeforeBraces = FormatStyle::BS_GNU;
1921 verifyFormat("try\n"
1930 Style.BreakBeforeBraces = FormatStyle::BS_Custom;
1931 Style.BraceWrapping.BeforeCatch = true;
1932 verifyFormat("try {\n"
1941 TEST_F(FormatTest, StaticInitializers) {
1942 verifyFormat("static SomeClass SC = {1, 'a'};");
1944 verifyFormat("static SomeClass WithALoooooooooooooooooooongName = {\n"
1946 "\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};");
1948 // Here, everything other than the "}" would fit on a line.
1949 verifyFormat("static int LooooooooooooooooooooooooongVariable[1] = {\n"
1950 " 10000000000000000000000000};");
1951 EXPECT_EQ("S s = {a,\n"
1960 // FIXME: This would fit into the column limit if we'd fit "{ {" on the first
1961 // line. However, the formatting looks a bit off and this probably doesn't
1962 // happen often in practice.
1963 verifyFormat("static int Variable[1] = {\n"
1964 " {1000000000000000000000000000000000000}};",
1965 getLLVMStyleWithColumns(40));
1968 TEST_F(FormatTest, DesignatedInitializers) {
1969 verifyFormat("const struct A a = {.a = 1, .b = 2};");
1970 verifyFormat("const struct A a = {.aaaaaaaaaa = 1,\n"
1971 " .bbbbbbbbbb = 2,\n"
1972 " .cccccccccc = 3,\n"
1973 " .dddddddddd = 4,\n"
1974 " .eeeeeeeeee = 5};");
1975 verifyFormat("const struct Aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaa = {\n"
1976 " .aaaaaaaaaaaaaaaaaaaaaaaaaaa = 1,\n"
1977 " .bbbbbbbbbbbbbbbbbbbbbbbbbbb = 2,\n"
1978 " .ccccccccccccccccccccccccccc = 3,\n"
1979 " .ddddddddddddddddddddddddddd = 4,\n"
1980 " .eeeeeeeeeeeeeeeeeeeeeeeeeee = 5};");
1982 verifyGoogleFormat("const struct A a = {.a = 1, .b = 2};");
1984 verifyFormat("const struct A a = {[0] = 1, [1] = 2};");
1985 verifyFormat("const struct A a = {[1] = aaaaaaaaaa,\n"
1986 " [2] = bbbbbbbbbb,\n"
1987 " [3] = cccccccccc,\n"
1988 " [4] = dddddddddd,\n"
1989 " [5] = eeeeeeeeee};");
1990 verifyFormat("const struct Aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaa = {\n"
1991 " [1] = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
1992 " [2] = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,\n"
1993 " [3] = cccccccccccccccccccccccccccccccccccccc,\n"
1994 " [4] = dddddddddddddddddddddddddddddddddddddd,\n"
1995 " [5] = eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee};");
1998 TEST_F(FormatTest, NestedStaticInitializers) {
1999 verifyFormat("static A x = {{{}}};\n");
2000 verifyFormat("static A x = {{{init1, init2, init3, init4},\n"
2001 " {init1, init2, init3, init4}}};",
2002 getLLVMStyleWithColumns(50));
2004 verifyFormat("somes Status::global_reps[3] = {\n"
2005 " {kGlobalRef, OK_CODE, NULL, NULL, NULL},\n"
2006 " {kGlobalRef, CANCELLED_CODE, NULL, NULL, NULL},\n"
2007 " {kGlobalRef, UNKNOWN_CODE, NULL, NULL, NULL}};",
2008 getLLVMStyleWithColumns(60));
2009 verifyGoogleFormat("SomeType Status::global_reps[3] = {\n"
2010 " {kGlobalRef, OK_CODE, NULL, NULL, NULL},\n"
2011 " {kGlobalRef, CANCELLED_CODE, NULL, NULL, NULL},\n"
2012 " {kGlobalRef, UNKNOWN_CODE, NULL, NULL, NULL}};");
2013 verifyFormat("CGRect cg_rect = {{rect.fLeft, rect.fTop},\n"
2014 " {rect.fRight - rect.fLeft, rect.fBottom - "
2018 "SomeArrayOfSomeType a = {\n"
2021 " {111111111111111111111111111111, 222222222222222222222222222222,\n"
2022 " 333333333333333333333333333333},\n"
2026 "SomeArrayOfSomeType a = {\n"
2029 " {{111111111111111111111111111111, 222222222222222222222222222222,\n"
2030 " 333333333333333333333333333333}},\n"
2034 verifyFormat("struct {\n"
2036 " const char *const name;\n"
2037 "} kBitsToOs[] = {{kOsMac, \"Mac\"},\n"
2038 " {kOsWin, \"Windows\"},\n"
2039 " {kOsLinux, \"Linux\"},\n"
2040 " {kOsCrOS, \"Chrome OS\"}};");
2041 verifyFormat("struct {\n"
2043 " const char *const name;\n"
2044 "} kBitsToOs[] = {\n"
2045 " {kOsMac, \"Mac\"},\n"
2046 " {kOsWin, \"Windows\"},\n"
2047 " {kOsLinux, \"Linux\"},\n"
2048 " {kOsCrOS, \"Chrome OS\"},\n"
2052 TEST_F(FormatTest, FormatsSmallMacroDefinitionsInSingleLine) {
2053 verifyFormat("#define ALooooooooooooooooooooooooooooooooooooooongMacro("
2055 " aLoooooooooooooooooooooooongFuuuuuuuuuuuuuunctiooooooooo)");
2058 TEST_F(FormatTest, DoesNotBreakPureVirtualFunctionDefinition) {
2059 verifyFormat("virtual void write(ELFWriter *writerrr,\n"
2060 " OwningPtr<FileOutputBuffer> &buffer) = 0;");
2062 // Do break defaulted and deleted functions.
2063 verifyFormat("virtual void ~Deeeeeeeestructor() =\n"
2065 getLLVMStyleWithColumns(40));
2066 verifyFormat("virtual void ~Deeeeeeeestructor() =\n"
2068 getLLVMStyleWithColumns(40));
2071 TEST_F(FormatTest, BreaksStringLiteralsOnlyInDefine) {
2072 verifyFormat("# 1111 \"/aaaaaaaaa/aaaaaaaaaaaaaaaaaaa/aaaaaaaa.cpp\" 2 3",
2073 getLLVMStyleWithColumns(40));
2074 verifyFormat("#line 11111 \"/aaaaaaaaa/aaaaaaaaaaaaaaaaaaa/aaaaaaaa.cpp\"",
2075 getLLVMStyleWithColumns(40));
2076 EXPECT_EQ("#define Q \\\n"
2077 " \"/aaaaaaaaa/aaaaaaaaaaaaaaaaaaa/\" \\\n"
2078 " \"aaaaaaaa.cpp\"",
2079 format("#define Q \"/aaaaaaaaa/aaaaaaaaaaaaaaaaaaa/aaaaaaaa.cpp\"",
2080 getLLVMStyleWithColumns(40)));
2083 TEST_F(FormatTest, UnderstandsLinePPDirective) {
2084 EXPECT_EQ("# 123 \"A string literal\"",
2085 format(" # 123 \"A string literal\""));
2088 TEST_F(FormatTest, LayoutUnknownPPDirective) {
2089 EXPECT_EQ("#;", format("#;"));
2090 verifyFormat("#\n;\n;\n;");
2093 TEST_F(FormatTest, UnescapedEndOfLineEndsPPDirective) {
2094 EXPECT_EQ("#line 42 \"test\"\n",
2095 format("# \\\n line \\\n 42 \\\n \"test\"\n"));
2096 EXPECT_EQ("#define A B\n", format("# \\\n define \\\n A \\\n B\n",
2097 getLLVMStyleWithColumns(12)));
2100 TEST_F(FormatTest, EndOfFileEndsPPDirective) {
2101 EXPECT_EQ("#line 42 \"test\"",
2102 format("# \\\n line \\\n 42 \\\n \"test\""));
2103 EXPECT_EQ("#define A B", format("# \\\n define \\\n A \\\n B"));
2106 TEST_F(FormatTest, DoesntRemoveUnknownTokens) {
2107 verifyFormat("#define A \\x20");
2108 verifyFormat("#define A \\ x20");
2109 EXPECT_EQ("#define A \\ x20", format("#define A \\ x20"));
2110 verifyFormat("#define A ''");
2111 verifyFormat("#define A ''qqq");
2112 verifyFormat("#define A `qqq");
2113 verifyFormat("f(\"aaaa, bbbb, \"\\\"ccccc\\\"\");");
2114 EXPECT_EQ("const char *c = STRINGIFY(\n"
2116 format("const char * c = STRINGIFY(\n"
2119 verifyFormat("a\r\\");
2120 verifyFormat("a\v\\");
2121 verifyFormat("a\f\\");
2124 TEST_F(FormatTest, IndentsPPDirectiveInReducedSpace) {
2125 verifyFormat("#define A(BB)", getLLVMStyleWithColumns(13));
2126 verifyFormat("#define A( \\\n BB)", getLLVMStyleWithColumns(12));
2127 verifyFormat("#define A( \\\n A, B)", getLLVMStyleWithColumns(12));
2128 // FIXME: We never break before the macro name.
2129 verifyFormat("#define AA( \\\n B)", getLLVMStyleWithColumns(12));
2131 verifyFormat("#define A A\n#define A A");
2132 verifyFormat("#define A(X) A\n#define A A");
2134 verifyFormat("#define Something Other", getLLVMStyleWithColumns(23));
2135 verifyFormat("#define Something \\\n Other", getLLVMStyleWithColumns(22));
2138 TEST_F(FormatTest, HandlePreprocessorDirectiveContext) {
2139 EXPECT_EQ("// somecomment\n"
2140 "#include \"a.h\"\n"
2143 "#include \"b.h\"\n"
2145 format(" // somecomment\n"
2146 " #include \"a.h\"\n"
2149 " #include \"b.h\"\n"
2150 " // somecomment\n",
2151 getLLVMStyleWithColumns(13)));
2154 TEST_F(FormatTest, LayoutSingleHash) { EXPECT_EQ("#\na;", format("#\na;")); }
2156 TEST_F(FormatTest, LayoutCodeInMacroDefinitions) {
2157 EXPECT_EQ("#define A \\\n"
2161 format("#define A c; e;\n"
2163 getLLVMStyleWithColumns(14)));
2166 TEST_F(FormatTest, LayoutRemainingTokens) { EXPECT_EQ("{}", format("{}")); }
2168 TEST_F(FormatTest, MacroDefinitionInsideStatement) {
2169 EXPECT_EQ("int x,\n"
2172 format("int x,\n#define A\ny;"));
2175 TEST_F(FormatTest, HashInMacroDefinition) {
2176 EXPECT_EQ("#define A(c) L#c", format("#define A(c) L#c", getLLVMStyle()));
2177 verifyFormat("#define A \\\n b #c;", getLLVMStyleWithColumns(11));
2178 verifyFormat("#define A \\\n"
2182 getLLVMStyleWithColumns(11));
2184 verifyFormat("#define A(X) \\\n"
2185 " void function##X()",
2186 getLLVMStyleWithColumns(22));
2188 verifyFormat("#define A(a, b, c) \\\n"
2190 getLLVMStyleWithColumns(22));
2192 verifyFormat("#define A void # ## #", getLLVMStyleWithColumns(22));
2195 TEST_F(FormatTest, RespectWhitespaceInMacroDefinitions) {
2196 EXPECT_EQ("#define A (x)", format("#define A (x)"));
2197 EXPECT_EQ("#define A(x)", format("#define A(x)"));
2200 TEST_F(FormatTest, EmptyLinesInMacroDefinitions) {
2201 EXPECT_EQ("#define A b;", format("#define A \\\n"
2204 getLLVMStyleWithColumns(25)));
2205 EXPECT_EQ("#define A \\\n"
2209 format("#define A \\\n"
2213 getLLVMStyleWithColumns(11)));
2214 EXPECT_EQ("#define A \\\n"
2218 format("#define A \\\n"
2222 getLLVMStyleWithColumns(11)));
2225 TEST_F(FormatTest, MacroDefinitionsWithIncompleteCode) {
2226 verifyIncompleteFormat("#define A :");
2227 verifyFormat("#define SOMECASES \\\n"
2230 getLLVMStyleWithColumns(20));
2231 verifyFormat("#define MACRO(a) \\\n"
2236 getLLVMStyleWithColumns(18));
2237 verifyFormat("#define A template <typename T>");
2238 verifyIncompleteFormat("#define STR(x) #x\n"
2239 "f(STR(this_is_a_string_literal{));");
2240 verifyFormat("#pragma omp threadprivate( \\\n"
2241 " y)), // expected-warning",
2242 getLLVMStyleWithColumns(28));
2243 verifyFormat("#d, = };");
2244 verifyFormat("#if \"a");
2245 verifyIncompleteFormat("({\n"
2250 getLLVMStyleWithColumns(15));
2251 verifyFormat("#define A \\\n"
2257 getLLVMStyleWithColumns(15));
2258 verifyNoCrash("#if a\na(\n#else\n#endif\n{a");
2259 verifyNoCrash("a={0,1\n#if a\n#else\n;\n#endif\n}");
2260 verifyNoCrash("#if a\na(\n#else\n#endif\n) a {a,b,c,d,f,g};");
2261 verifyNoCrash("#ifdef A\n a(\n #else\n #endif\n) = []() { \n)}");
2264 TEST_F(FormatTest, MacrosWithoutTrailingSemicolon) {
2265 verifyFormat("SOME_TYPE_NAME abc;"); // Gated on the newline.
2266 EXPECT_EQ("class A : public QObject {\n"
2271 format("class A : public QObject {\n"
2277 "/*static*/ int i;",
2279 " /*static*/ int i;"));
2280 EXPECT_EQ("SOME_MACRO\n"
2284 format("SOME_MACRO\n"
2288 // Only if the identifier contains at least 5 characters.
2289 EXPECT_EQ("HTTP f();", format("HTTP\nf();"));
2290 EXPECT_EQ("MACRO\nf();", format("MACRO\nf();"));
2291 // Only if everything is upper case.
2292 EXPECT_EQ("class A : public QObject {\n"
2293 " Q_Object A() {}\n"
2295 format("class A : public QObject {\n"
2300 // Only if the next line can actually start an unwrapped line.
2301 EXPECT_EQ("SOME_WEIRD_LOG_MACRO << SomeThing;",
2302 format("SOME_WEIRD_LOG_MACRO\n"
2305 verifyFormat("VISIT_GL_CALL(GenBuffers, void, (GLsizei n, GLuint* buffers), "
2307 getChromiumStyle(FormatStyle::LK_Cpp));
2310 TEST_F(FormatTest, MacroCallsWithoutTrailingSemicolon) {
2311 EXPECT_EQ("INITIALIZE_PASS_BEGIN(ScopDetection, \"polly-detect\")\n"
2312 "INITIALIZE_AG_DEPENDENCY(AliasAnalysis)\n"
2313 "INITIALIZE_PASS_DEPENDENCY(DominatorTree)\n"
2315 "INITIALIZE_PASS_END(ScopDetection, \"polly-detect\")\n"
2316 "int *createScopDetectionPass() { return 0; }",
2317 format(" INITIALIZE_PASS_BEGIN(ScopDetection, \"polly-detect\")\n"
2318 " INITIALIZE_AG_DEPENDENCY(AliasAnalysis)\n"
2319 " INITIALIZE_PASS_DEPENDENCY(DominatorTree)\n"
2321 " INITIALIZE_PASS_END(ScopDetection, \"polly-detect\")\n"
2322 " int *createScopDetectionPass() { return 0; }"));
2323 // FIXME: We could probably treat IPC_BEGIN_MESSAGE_MAP/IPC_END_MESSAGE_MAP as
2324 // braces, so that inner block is indented one level more.
2325 EXPECT_EQ("int q() {\n"
2326 " IPC_BEGIN_MESSAGE_MAP(WebKitTestController, message)\n"
2327 " IPC_MESSAGE_HANDLER(xxx, qqq)\n"
2328 " IPC_END_MESSAGE_MAP()\n"
2330 format("int q() {\n"
2331 " IPC_BEGIN_MESSAGE_MAP(WebKitTestController, message)\n"
2332 " IPC_MESSAGE_HANDLER(xxx, qqq)\n"
2333 " IPC_END_MESSAGE_MAP()\n"
2336 // Same inside macros.
2337 EXPECT_EQ("#define LIST(L) \\\n"
2341 format("#define LIST(L) \\\n"
2347 // These must not be recognized as macros.
2348 EXPECT_EQ("int q() {\n"
2366 " LOG(INFO) << x;\n"
2367 " ifstream(x) >> x;\n"
2369 format("int q() {\n"
2387 " LOG(INFO)\n << x;\n"
2388 " ifstream(x)\n >> x;\n"
2390 EXPECT_EQ("int q() {\n"
2402 " } catch (...) {\n"
2405 format("int q() {\n"
2413 "try { Q(); } catch (...) {}\n"
2415 EXPECT_EQ("class A {\n"
2417 " A(int i) noexcept() : {}\n"
2418 " A(X x)\n" // FIXME: function-level try blocks are broken.
2420 " } catch (...) {\n"
2423 format("class A {\n"
2424 " A()\n : t(0) {}\n"
2425 " A(int i)\n noexcept() : {}\n"
2427 " try : t(0) {} catch (...) {}\n"
2429 EXPECT_EQ("class SomeClass {\n"
2431 " SomeClass() EXCLUSIVE_LOCK_FUNCTION(mu_);\n"
2433 format("class SomeClass {\n"
2436 " EXCLUSIVE_LOCK_FUNCTION(mu_);\n"
2438 EXPECT_EQ("class SomeClass {\n"
2441 " EXCLUSIVE_LOCK_FUNCTION(mu_);\n"
2443 format("class SomeClass {\n"
2446 " EXCLUSIVE_LOCK_FUNCTION(mu_);\n"
2448 getLLVMStyleWithColumns(40)));
2450 verifyFormat("MACRO(>)");
2453 TEST_F(FormatTest, LayoutMacroDefinitionsStatementsSpanningBlocks) {
2454 verifyFormat("#define A \\\n"
2458 getLLVMStyleWithColumns(11));
2461 TEST_F(FormatTest, IndentPreprocessorDirectives) {
2462 FormatStyle Style = getLLVMStyle();
2463 Style.IndentPPDirectives = FormatStyle::PPDIS_None;
2464 Style.ColumnLimit = 40;
2465 verifyFormat("#ifdef _WIN32\n"
2469 "#include <someheader.h>\n"
2470 "#define MACRO \\\n"
2471 " some_very_long_func_aaaaaaaaaa();\n"
2477 Style.IndentPPDirectives = FormatStyle::PPDIS_AfterHash;
2478 verifyFormat("#ifdef _WIN32\n"
2482 "# include <someheader.h>\n"
2483 "# define MACRO \\\n"
2484 " some_very_long_func_aaaaaaaaaa();\n"
2490 verifyFormat("#if A\n"
2491 "# define MACRO \\\n"
2492 " void a(int x) { \\\n"
2501 // Comments before include guard.
2502 verifyFormat("// file comment\n"
2504 "#ifndef HEADER_H\n"
2505 "#define HEADER_H\n"
2509 // Test with include guards.
2510 verifyFormat("#ifndef HEADER_H\n"
2511 "#define HEADER_H\n"
2515 // Include guards must have a #define with the same variable immediately
2517 verifyFormat("#ifndef NOT_GUARD\n"
2523 // Include guards must cover the entire file.
2524 verifyFormat("code();\n"
2526 "#ifndef NOT_GUARD\n"
2527 "# define NOT_GUARD\n"
2531 verifyFormat("#ifndef NOT_GUARD\n"
2532 "# define NOT_GUARD\n"
2537 // Test with trailing blank lines.
2538 verifyFormat("#ifndef HEADER_H\n"
2539 "#define HEADER_H\n"
2543 // Include guards don't have #else.
2544 verifyFormat("#ifndef NOT_GUARD\n"
2545 "# define NOT_GUARD\n"
2550 verifyFormat("#ifndef NOT_GUARD\n"
2551 "# define NOT_GUARD\n"
2556 // Non-identifier #define after potential include guard.
2557 verifyFormat("#ifndef FOO\n"
2561 // #if closes past last non-preprocessor line.
2562 verifyFormat("#ifndef FOO\n"
2570 // FIXME: This doesn't handle the case where there's code between the
2571 // #ifndef and #define but all other conditions hold. This is because when
2572 // the #define line is parsed, UnwrappedLineParser::Lines doesn't hold the
2573 // previous code line yet, so we can't detect it.
2574 EXPECT_EQ("#ifndef NOT_GUARD\n"
2576 "#define NOT_GUARD\n"
2579 format("#ifndef NOT_GUARD\n"
2581 "# define NOT_GUARD\n"
2585 // FIXME: This doesn't handle cases where legitimate preprocessor lines may
2586 // be outside an include guard. Examples are #pragma once and
2587 // #pragma GCC diagnostic, or anything else that does not change the meaning
2588 // of the file if it's included multiple times.
2589 EXPECT_EQ("#ifdef WIN32\n"
2592 "#ifndef HEADER_H\n"
2593 "# define HEADER_H\n"
2596 format("#ifdef WIN32\n"
2599 "#ifndef HEADER_H\n"
2600 "#define HEADER_H\n"
2604 // FIXME: This does not detect when there is a single non-preprocessor line
2605 // in front of an include-guard-like structure where other conditions hold
2606 // because ScopedLineState hides the line.
2607 EXPECT_EQ("code();\n"
2608 "#ifndef HEADER_H\n"
2609 "#define HEADER_H\n"
2613 "#ifndef HEADER_H\n"
2614 "# define HEADER_H\n"
2618 // Keep comments aligned with #, otherwise indent comments normally. These
2619 // tests cannot use verifyFormat because messUp manipulates leading
2622 const char *Expected = ""
2625 "// Preprocessor aligned.\n"
2627 " // Code. Separated by blank line.\n"
2630 " // Code. Not aligned with #\n"
2633 const char *ToFormat = ""
2636 "// Preprocessor aligned.\n"
2638 "// Code. Separated by blank line.\n"
2641 " // Code. Not aligned with #\n"
2644 EXPECT_EQ(Expected, format(ToFormat, Style));
2645 EXPECT_EQ(Expected, format(Expected, Style));
2647 // Keep block quotes aligned.
2649 const char *Expected = ""
2652 "/* Preprocessor aligned. */\n"
2654 " /* Code. Separated by blank line. */\n"
2657 " /* Code. Not aligned with # */\n"
2660 const char *ToFormat = ""
2663 "/* Preprocessor aligned. */\n"
2665 "/* Code. Separated by blank line. */\n"
2668 " /* Code. Not aligned with # */\n"
2671 EXPECT_EQ(Expected, format(ToFormat, Style));
2672 EXPECT_EQ(Expected, format(Expected, Style));
2674 // Keep comments aligned with un-indented directives.
2676 const char *Expected = ""
2678 "// Preprocessor aligned.\n"
2680 " // Code. Separated by blank line.\n"
2683 " // Code. Not aligned with #\n"
2685 const char *ToFormat = ""
2687 "// Preprocessor aligned.\n"
2689 "// Code. Separated by blank line.\n"
2692 " // Code. Not aligned with #\n"
2694 EXPECT_EQ(Expected, format(ToFormat, Style));
2695 EXPECT_EQ(Expected, format(Expected, Style));
2698 Style.UseTab = FormatStyle::UT_Always;
2699 Style.IndentWidth = 8;
2701 verifyFormat("#ifdef _WIN32\n"
2705 "#\t\tinclude <someheader.h>\n"
2706 "#\t\tdefine MACRO \\\n"
2707 "\t\t\tsome_very_long_func_aaaaaaaaaa();\n"
2714 // Regression test: Multiline-macro inside include guards.
2715 verifyFormat("#ifndef HEADER_H\n"
2716 "#define HEADER_H\n"
2720 "#endif // HEADER_H",
2721 getLLVMStyleWithColumns(20));
2724 TEST_F(FormatTest, FormatHashIfNotAtStartOfLine) {
2725 verifyFormat("{\n { a #c; }\n}");
2728 TEST_F(FormatTest, FormatUnbalancedStructuralElements) {
2729 EXPECT_EQ("#define A \\\n { \\\n {\nint i;",
2730 format("#define A { {\nint i;", getLLVMStyleWithColumns(11)));
2731 EXPECT_EQ("#define A \\\n } \\\n }\nint i;",
2732 format("#define A } }\nint i;", getLLVMStyleWithColumns(11)));
2735 TEST_F(FormatTest, EscapedNewlines) {
2736 FormatStyle Narrow = getLLVMStyleWithColumns(11);
2737 EXPECT_EQ("#define A \\\n int i; \\\n int j;",
2738 format("#define A \\\nint i;\\\n int j;", Narrow));
2739 EXPECT_EQ("#define A\n\nint i;", format("#define A \\\n\n int i;"));
2740 EXPECT_EQ("template <class T> f();", format("\\\ntemplate <class T> f();"));
2741 EXPECT_EQ("/* \\ \\ \\\n */", format("\\\n/* \\ \\ \\\n */"));
2742 EXPECT_EQ("<a\n\\\\\n>", format("<a\n\\\\\n>"));
2744 FormatStyle AlignLeft = getLLVMStyle();
2745 AlignLeft.AlignEscapedNewlines = FormatStyle::ENAS_Left;
2746 EXPECT_EQ("#define MACRO(x) \\\n"
2749 format("#define MACRO(x) \\\n"
2754 // CRLF line endings
2755 EXPECT_EQ("#define A \\\r\n int i; \\\r\n int j;",
2756 format("#define A \\\r\nint i;\\\r\n int j;", Narrow));
2757 EXPECT_EQ("#define A\r\n\r\nint i;", format("#define A \\\r\n\r\n int i;"));
2758 EXPECT_EQ("template <class T> f();", format("\\\ntemplate <class T> f();"));
2759 EXPECT_EQ("/* \\ \\ \\\r\n */", format("\\\r\n/* \\ \\ \\\r\n */"));
2760 EXPECT_EQ("<a\r\n\\\\\r\n>", format("<a\r\n\\\\\r\n>"));
2761 EXPECT_EQ("#define MACRO(x) \\\r\n"
2763 " int x(int a);\r\n",
2764 format("#define MACRO(x) \\\r\n"
2766 " int x(int a);\r\n",
2769 FormatStyle DontAlign = getLLVMStyle();
2770 DontAlign.AlignEscapedNewlines = FormatStyle::ENAS_DontAlign;
2771 DontAlign.MaxEmptyLinesToKeep = 3;
2772 // FIXME: can't use verifyFormat here because the newline before
2773 // "public:" is not inserted the first time it's reformatted
2774 EXPECT_EQ("#define A \\\n"
2783 format("#define A \\\n"
2795 TEST_F(FormatTest, CalculateSpaceOnConsecutiveLinesInMacro) {
2796 verifyFormat("#define A \\\n"
2800 getLLVMStyleWithColumns(11));
2803 TEST_F(FormatTest, MixingPreprocessorDirectivesAndNormalCode) {
2805 "#define ALooooooooooooooooooooooooooooooooooooooongMacro("
2807 " aLoooooooooooooooooooooooongFuuuuuuuuuuuuuunctiooooooooo)\n"
2809 "AlooooooooooooooooooooooooooooooooooooooongCaaaaaaaaaal(\n"
2810 " aLooooooooooooooooooooooonPaaaaaaaaaaaaaaaaaaaaarmmmm);\n",
2811 format(" #define ALooooooooooooooooooooooooooooooooooooooongMacro("
2813 "aLoooooooooooooooooooooooongFuuuuuuuuuuuuuunctiooooooooo)\n"
2815 " AlooooooooooooooooooooooooooooooooooooooongCaaaaaaaaaal(\n"
2816 " aLooooooooooooooooooooooonPaaaaaaaaaaaaaaaaaaaaarmmmm);\n"));
2819 TEST_F(FormatTest, LayoutStatementsAroundPreprocessorDirectives) {
2823 format("int\n#define A\na;"));
2824 verifyFormat("functionCallTo(\n"
2825 " someOtherFunction(\n"
2826 " withSomeParameters, whichInSequence,\n"
2827 " areLongerThanALine(andAnotherCall,\n"
2829 " withMoreParamters,\n"
2830 " whichStronglyInfluenceTheLayout),\n"
2831 " andMoreParameters),\n"
2833 getLLVMStyleWithColumns(69));
2834 verifyFormat("Foo::Foo()\n"
2840 verifyFormat("void f() {\n"
2850 verifyFormat("void f(param1, param2,\n"
2871 getLLVMStyleWithColumns(28));
2872 verifyFormat("#if 1\n"
2874 verifyFormat("#if 1\n"
2879 verifyFormat("DEBUG({\n"
2880 " return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
2881 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;\n"
2887 verifyIncompleteFormat("void f(\n"
2894 TEST_F(FormatTest, GraciouslyHandleIncorrectPreprocessorConditions) {
2895 verifyFormat("#endif\n"
2899 TEST_F(FormatTest, FormatsJoinedLinesOnSubsequentRuns) {
2900 FormatStyle SingleLine = getLLVMStyle();
2901 SingleLine.AllowShortIfStatementsOnASingleLine = true;
2902 verifyFormat("#if 0\n"
2906 " if (test) foo2();\n"
2911 TEST_F(FormatTest, LayoutBlockInsideParens) {
2912 verifyFormat("functionCall({ int i; });");
2913 verifyFormat("functionCall({\n"
2917 verifyFormat("functionCall(\n"
2922 " aaaa, bbbb, cccc);");
2923 verifyFormat("functionA(functionB({\n"
2927 " aaaa, bbbb, cccc);");
2928 verifyFormat("functionCall(\n"
2933 " aaaa, bbbb, // comment\n"
2935 verifyFormat("functionA(functionB({\n"
2939 " aaaa, bbbb, // comment\n"
2941 verifyFormat("functionCall(aaaa, bbbb, { int i; });");
2942 verifyFormat("functionCall(aaaa, bbbb, {\n"
2947 "Aaa(\n" // FIXME: There shouldn't be a linebreak here.
2949 " int i; // break\n"
2951 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,\n"
2952 " ccccccccccccccccc));");
2953 verifyFormat("DEBUG({\n"
2959 TEST_F(FormatTest, LayoutBlockInsideStatement) {
2960 EXPECT_EQ("SOME_MACRO { int i; }\n"
2962 format(" SOME_MACRO {int i;} int i;"));
2965 TEST_F(FormatTest, LayoutNestedBlocks) {
2966 verifyFormat("void AddOsStrings(unsigned bitmask) {\n"
2970 " s kBitsToOs[] = {{10}};\n"
2971 " for (int i = 0; i < 10; ++i)\n"
2974 verifyFormat("call(parameter, {\n"
2976 " // Comment using all columns.\n"
2977 " somethingelse();\n"
2979 getLLVMStyleWithColumns(40));
2980 verifyFormat("DEBUG( //\n"
2982 verifyFormat("DEBUG( //\n"
2988 EXPECT_EQ("call(parameter, {\n"
2991 " // looooooooooong.\n"
2992 " somethingElse();\n"
2994 format("call(parameter, {\n"
2996 " // Comment too looooooooooong.\n"
2997 " somethingElse();\n"
2999 getLLVMStyleWithColumns(29)));
3000 EXPECT_EQ("DEBUG({ int i; });", format("DEBUG({ int i; });"));
3001 EXPECT_EQ("DEBUG({ // comment\n"
3004 format("DEBUG({ // comment\n"
3007 EXPECT_EQ("DEBUG({\n"
3020 verifyFormat("DEBUG({\n"
3024 verifyGoogleFormat("DEBUG({\n"
3027 FormatStyle Style = getGoogleStyle();
3028 Style.ColumnLimit = 45;
3029 verifyFormat("Debug(aaaaa,\n"
3031 " if (aaaaaaaaaaaaaaaaaaaaaaaa) return;\n"
3036 verifyFormat("SomeFunction({MACRO({ return output; }), b});");
3038 verifyNoCrash("^{v^{a}}");
3041 TEST_F(FormatTest, FormatNestedBlocksInMacros) {
3042 EXPECT_EQ("#define MACRO() \\\n"
3043 " Debug(aaa, /* force line break */ \\\n"
3048 format("#define MACRO() Debug(aaa, /* force line break */ \\\n"
3049 " { int i; int j; })",
3052 EXPECT_EQ("#define A \\\n"
3054 " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx( \\\n"
3055 " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx); \\\n"
3057 format("#define A [] { xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx( \\\n"
3058 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx); }",
3062 TEST_F(FormatTest, PutEmptyBlocksIntoOneLine) {
3063 EXPECT_EQ("{}", format("{}"));
3064 verifyFormat("enum E {};");
3065 verifyFormat("enum E {}");
3068 TEST_F(FormatTest, FormatBeginBlockEndMacros) {
3069 FormatStyle Style = getLLVMStyle();
3070 Style.MacroBlockBegin = "^[A-Z_]+_BEGIN$";
3071 Style.MacroBlockEnd = "^[A-Z_]+_END$";
3072 verifyFormat("FOO_BEGIN\n"
3075 verifyFormat("FOO_BEGIN\n"
3076 " NESTED_FOO_BEGIN\n"
3077 " NESTED_FOO_ENTRY\n"
3080 verifyFormat("FOO_BEGIN(Foo, Bar)\n"
3083 "FOO_END(Baz)", Style);
3086 //===----------------------------------------------------------------------===//
3087 // Line break tests.
3088 //===----------------------------------------------------------------------===//
3090 TEST_F(FormatTest, PreventConfusingIndents) {
3093 " SomeLongMethodName(SomeReallyLongMethod(CallOtherReallyLongMethod(\n"
3094 " parameter, parameter, parameter)),\n"
3095 " SecondLongCall(parameter));\n"
3098 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3099 " aaaaaaaaaaaaaaaaaaaaaaaa(\n"
3100 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3101 " aaaaaaaaaaaaaaaaaaaaaaaa);");
3103 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3104 " [aaaaaaaaaaaaaaaaaaaaaaaa\n"
3105 " [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]\n"
3106 " [aaaaaaaaaaaaaaaaaaaaaaaa]];");
3108 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<\n"
3109 " aaaaaaaaaaaaaaaaaaaaaaaa<\n"
3110 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>,\n"
3111 " aaaaaaaaaaaaaaaaaaaaaaaa>;");
3112 verifyFormat("int a = bbbb && ccc &&\n"
3114 "#define A Just forcing a new line\n"
3118 TEST_F(FormatTest, LineBreakingInBinaryExpressions) {
3121 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaa).aaaaaaaaaaaaaaaaaaa() ||\n"
3125 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaa).aaaaaaaaaaaaaaaaaaa() or\n"
3128 verifyFormat("bool aaaaaaaaaaaaaaaaaaaaa =\n"
3129 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa != bbbbbbbbbbbbbbbbbb &&\n"
3130 " ccccccccc == ddddddddddd;");
3131 verifyFormat("bool aaaaaaaaaaaaaaaaaaaaa =\n"
3132 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa != bbbbbbbbbbbbbbbbbb and\n"
3133 " ccccccccc == ddddddddddd;");
3135 "bool aaaaaaaaaaaaaaaaaaaaa =\n"
3136 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa not_eq bbbbbbbbbbbbbbbbbb and\n"
3137 " ccccccccc == ddddddddddd;");
3139 verifyFormat("aaaaaa = aaaaaaa(aaaaaaa, // break\n"
3141 " bbbbbb && cccccc;");
3142 verifyFormat("aaaaaa = aaaaaaa(aaaaaaa, // break\n"
3145 verifyFormat("aa = Whitespaces.addUntouchableComment(\n"
3146 " SourceMgr.getSpellingColumnNumber(\n"
3147 " TheLine.Last->FormatTok.Tok.getLocation()) -\n"
3150 verifyFormat("if ((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
3151 " bbbbbbbbbbbbbbbbbb) && // aaaaaaaaaaaaaaaa\n"
3153 verifyFormat("if constexpr ((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
3154 " bbbbbbbbbbbbbbbbbb) && // aaaaaaaaaaa\n"
3156 verifyFormat("b = a &&\n"
3160 // If the LHS of a comparison is not a binary expression itself, the
3161 // additional linebreak confuses many people.
3163 "if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3164 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) > 5) {\n"
3167 "if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3168 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) == 5) {\n"
3171 "if (aaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaa(\n"
3172 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) == 5) {\n"
3175 "if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3176 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) <=> 5) {\n"
3178 // Even explicit parentheses stress the precedence enough to make the
3179 // additional break unnecessary.
3180 verifyFormat("if ((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3181 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) == 5) {\n"
3183 // This cases is borderline, but with the indentation it is still readable.
3185 "if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3186 " aaaaaaaaaaaaaaa) > aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3187 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n"
3189 getLLVMStyleWithColumns(75));
3191 // If the LHS is a binary expression, we should still use the additional break
3192 // as otherwise the formatting hides the operator precedence.
3193 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3194 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==\n"
3197 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3198 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <=>\n"
3202 FormatStyle OnePerLine = getLLVMStyle();
3203 OnePerLine.BinPackParameters = false;
3205 "if (aaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
3206 " aaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
3207 " aaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n}",
3210 verifyFormat("int i = someFunction(aaaaaaa, 0)\n"
3211 " .aaa(aaaaaaaaaaaaa) *\n"
3214 getLLVMStyleWithColumns(40));
3217 TEST_F(FormatTest, ExpressionIndentation) {
3218 verifyFormat("bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3219 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3220 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==\n"
3221 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *\n"
3222 " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb +\n"
3223 " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb &&\n"
3224 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *\n"
3225 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >\n"
3226 " ccccccccccccccccccccccccccccccccccccccccc;");
3227 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *\n"
3228 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3229 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==\n"
3230 " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}");
3231 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3232 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *\n"
3233 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==\n"
3234 " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}");
3235 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ==\n"
3236 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *\n"
3237 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3238 " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}");
3239 verifyFormat("if () {\n"
3240 "} else if (aaaaa && bbbbb > // break\n"
3243 verifyFormat("if () {\n"
3244 "} else if (aaaaa &&\n"
3245 " bbbbb > // break\n"
3250 // Presence of a trailing comment used to change indentation of b.
3251 verifyFormat("return aaaaaaaaaaaaaaaaaaa +\n"
3253 "return aaaaaaaaaaaaaaaaaaa +\n"
3255 getLLVMStyleWithColumns(30));
3258 TEST_F(FormatTest, ExpressionIndentationBreakingBeforeOperators) {
3259 // Not sure what the best system is here. Like this, the LHS can be found
3260 // immediately above an operator (everything with the same or a higher
3261 // indent). The RHS is aligned right of the operator and so compasses
3262 // everything until something with the same indent as the operator is found.
3263 // FIXME: Is this a good system?
3264 FormatStyle Style = getLLVMStyle();
3265 Style.BreakBeforeBinaryOperators = FormatStyle::BOS_All;
3267 "bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3268 " + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3269 " + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3270 " == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3271 " * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3272 " + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3273 " && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3274 " * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3275 " > ccccccccccccccccccccccccccccccccccccccccc;",
3277 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3278 " * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3279 " + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3280 " == bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
3282 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3283 " + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3284 " * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3285 " == bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
3287 verifyFormat("if (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3288 " == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3289 " * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3290 " + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}",
3292 verifyFormat("if () {\n"
3293 "} else if (aaaaa\n"
3294 " && bbbbb // break\n"
3298 verifyFormat("return (a)\n"
3303 "int aaaaaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3304 " * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3308 verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3309 " = aaaaaaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaaaaaaaaaaaaaa;",
3312 // Forced by comments.
3314 "unsigned ContentSize =\n"
3315 " sizeof(int16_t) // DWARF ARange version number\n"
3316 " + sizeof(int32_t) // Offset of CU in the .debug_info section\n"
3317 " + sizeof(int8_t) // Pointer Size (in bytes)\n"
3318 " + sizeof(int8_t); // Segment Size (in bytes)");
3320 verifyFormat("return boost::fusion::at_c<0>(iiii).second\n"
3321 " == boost::fusion::at_c<1>(iiii).second;",
3324 Style.ColumnLimit = 60;
3325 verifyFormat("zzzzzzzzzz\n"
3326 " = bbbbbbbbbbbbbbbbb\n"
3327 " >> aaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaa);",
3331 TEST_F(FormatTest, EnforcedOperatorWraps) {
3332 // Here we'd like to wrap after the || operators, but a comment is forcing an
3334 verifyFormat("bool x = aaaaa //\n"
3340 TEST_F(FormatTest, NoOperandAlignment) {
3341 FormatStyle Style = getLLVMStyle();
3342 Style.AlignOperands = false;
3343 verifyFormat("aaaaaaaaaaaaaa(aaaaaaaaaaaa,\n"
3344 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +\n"
3345 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);",
3347 Style.BreakBeforeBinaryOperators = FormatStyle::BOS_NonAssignment;
3348 verifyFormat("bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3349 " + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3350 " + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3351 " == aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3352 " * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3353 " + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3354 " && aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3355 " * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3356 " > ccccccccccccccccccccccccccccccccccccccccc;",
3359 verifyFormat("int aaaaaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3360 " * bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3363 verifyFormat("int a = aa\n"
3364 " + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
3365 " * cccccccccccccccccccccccccccccccccccc;\n",
3368 Style.AlignAfterOpenBracket = FormatStyle::BAS_DontAlign;
3369 verifyFormat("return (a > b\n"
3376 TEST_F(FormatTest, BreakingBeforeNonAssigmentOperators) {
3377 FormatStyle Style = getLLVMStyle();
3378 Style.BreakBeforeBinaryOperators = FormatStyle::BOS_NonAssignment;
3379 verifyFormat("int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
3380 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
3381 " + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
3385 TEST_F(FormatTest, AllowBinPackingInsideArguments) {
3386 FormatStyle Style = getLLVMStyle();
3387 Style.BreakBeforeBinaryOperators = FormatStyle::BOS_NonAssignment;
3388 Style.BinPackArguments = false;
3389 Style.ColumnLimit = 40;
3390 verifyFormat("void test() {\n"
3392 " this + argument + is + quite\n"
3393 " + long + so + it + gets + wrapped\n"
3394 " + but + remains + bin - packed);\n"
3397 verifyFormat("void test() {\n"
3398 " someFunction(arg1,\n"
3399 " this + argument + is\n"
3400 " + quite + long + so\n"
3401 " + it + gets + wrapped\n"
3402 " + but + remains + bin\n"
3407 verifyFormat("void test() {\n"
3410 " this + argument + has\n"
3411 " + anotherFunc(nested,\n"
3417 " + to + being + bin - packed,\n"
3422 Style.BreakBeforeBinaryOperators = FormatStyle::BOS_None;
3423 verifyFormat("void test() {\n"
3426 " this + argument + has +\n"
3427 " anotherFunc(nested,\n"
3428 " calls + whose +\n"
3432 " in + addition) +\n"
3433 " to + being + bin - packed,\n"
3439 TEST_F(FormatTest, ConstructorInitializers) {
3440 verifyFormat("Constructor() : Initializer(FitsOnTheLine) {}");
3441 verifyFormat("Constructor() : Inttializer(FitsOnTheLine) {}",
3442 getLLVMStyleWithColumns(45));
3443 verifyFormat("Constructor()\n"
3444 " : Inttializer(FitsOnTheLine) {}",
3445 getLLVMStyleWithColumns(44));
3446 verifyFormat("Constructor()\n"
3447 " : Inttializer(FitsOnTheLine) {}",
3448 getLLVMStyleWithColumns(43));
3450 verifyFormat("template <typename T>\n"
3451 "Constructor() : Initializer(FitsOnTheLine) {}",
3452 getLLVMStyleWithColumns(45));
3455 "SomeClass::Constructor()\n"
3456 " : aaaaaaaaaaaaa(aaaaaaaaaaaaaa), aaaaaaaaaaaaaaa(aaaaaaaaaaaa) {}");
3459 "SomeClass::Constructor()\n"
3460 " : aaaaaaaaaaaaa(aaaaaaaaaaaaaa), aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3461 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa) {}");
3463 "SomeClass::Constructor()\n"
3464 " : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3465 " aaaaaaaaaaaaaaa(aaaaaaaaaaaa) {}");
3466 verifyFormat("Constructor(aaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
3467 " aaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\n"
3468 " : aaaaaaaaaa(aaaaaa) {}");
3470 verifyFormat("Constructor()\n"
3471 " : aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3472 " aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
3473 " aaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3474 " aaaaaaaaaaaaaaaaaaaaaaa() {}");
3476 verifyFormat("Constructor()\n"
3477 " : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3478 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}");
3480 verifyFormat("Constructor(int Parameter = 0)\n"
3481 " : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa),\n"
3482 " aaaaaaaaaaaa(aaaaaaaaaaaaaaaaa) {}");
3483 verifyFormat("Constructor()\n"
3484 " : aaaaaaaaaaaaaaaaaaaa(a), bbbbbbbbbbbbbbbbbbbbbbbb(b) {\n"
3486 getLLVMStyleWithColumns(60));
3487 verifyFormat("Constructor()\n"
3488 " : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3489 " aaaaaaaaaaaaaaaaaaaaaaaaa(aaaa, aaaa)) {}");
3491 // Here a line could be saved by splitting the second initializer onto two
3492 // lines, but that is not desirable.
3493 verifyFormat("Constructor()\n"
3494 " : aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaa),\n"
3495 " aaaaaaaaaaa(aaaaaaaaaaa),\n"
3496 " aaaaaaaaaaaaaaaaaaaaat(aaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}");
3498 FormatStyle OnePerLine = getLLVMStyle();
3499 OnePerLine.ConstructorInitializerAllOnOneLineOrOnePerLine = true;
3500 OnePerLine.AllowAllParametersOfDeclarationOnNextLine = false;
3501 verifyFormat("SomeClass::Constructor()\n"
3502 " : aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3503 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3504 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa) {}",
3506 verifyFormat("SomeClass::Constructor()\n"
3507 " : aaaaaaaaaaaaa(aaaaaaaaaaaaaa), // Some comment\n"
3508 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3509 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa) {}",
3511 verifyFormat("MyClass::MyClass(int var)\n"
3512 " : some_var_(var), // 4 space indent\n"
3513 " some_other_var_(var + 1) { // lined up\n"
3516 verifyFormat("Constructor()\n"
3517 " : aaaaa(aaaaaa),\n"
3521 " aaaaa(aaaaaa) {}",
3523 verifyFormat("Constructor()\n"
3524 " : aaaaa(aaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaa,\n"
3525 " aaaaaaaaaaaaaaaaaaaaaa) {}",
3527 OnePerLine.BinPackParameters = false;
3530 " : aaaaaaaaaaaaaaaaaaaaaaaa(\n"
3531 " aaaaaaaaaaa().aaa(),\n"
3532 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
3534 OnePerLine.ColumnLimit = 60;
3535 verifyFormat("Constructor()\n"
3536 " : aaaaaaaaaaaaaaaaaaaa(a),\n"
3537 " bbbbbbbbbbbbbbbbbbbbbbbb(b) {}",
3540 EXPECT_EQ("Constructor()\n"
3541 " : // Comment forcing unwanted break.\n"
3543 format("Constructor() :\n"
3544 " // Comment forcing unwanted break.\n"
3548 TEST_F(FormatTest, BreakConstructorInitializersAfterColon) {
3549 FormatStyle Style = getLLVMStyle();
3550 Style.BreakConstructorInitializers = FormatStyle::BCIS_AfterColon;
3552 verifyFormat("Constructor() : Initializer(FitsOnTheLine) {}");
3553 verifyFormat("Constructor() : Initializer(FitsOnTheLine) {}",
3554 getStyleWithColumns(Style, 45));
3555 verifyFormat("Constructor() :\n"
3556 " Initializer(FitsOnTheLine) {}",
3557 getStyleWithColumns(Style, 44));
3558 verifyFormat("Constructor() :\n"
3559 " Initializer(FitsOnTheLine) {}",
3560 getStyleWithColumns(Style, 43));
3562 verifyFormat("template <typename T>\n"
3563 "Constructor() : Initializer(FitsOnTheLine) {}",
3564 getStyleWithColumns(Style, 50));
3567 "SomeClass::Constructor() :\n"
3568 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa), aaaaaaaaaaaaaaa(aaaaaaaaaaaa) {}",
3572 "SomeClass::Constructor() :\n"
3573 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa), aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3574 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa) {}",
3577 "SomeClass::Constructor() :\n"
3578 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3579 " aaaaaaaaaaaaaaa(aaaaaaaaaaaa) {}",
3581 verifyFormat("Constructor(aaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
3582 " aaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) :\n"
3583 " aaaaaaaaaa(aaaaaa) {}",
3586 verifyFormat("Constructor() :\n"
3587 " aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3588 " aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
3589 " aaaaaaaaaaaaaaaaaaaaaaaaaaa),\n"
3590 " aaaaaaaaaaaaaaaaaaaaaaa() {}",
3593 verifyFormat("Constructor() :\n"
3594 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3595 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
3598 verifyFormat("Constructor(int Parameter = 0) :\n"
3599 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaa),\n"
3600 " aaaaaaaaaaaa(aaaaaaaaaaaaaaaaa) {}",
3602 verifyFormat("Constructor() :\n"
3603 " aaaaaaaaaaaaaaaaaaaaaa(a), bbbbbbbbbbbbbbbbbbbbbbbb(b) {\n"
3605 getStyleWithColumns(Style, 60));
3606 verifyFormat("Constructor() :\n"
3607 " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
3608 " aaaaaaaaaaaaaaaaaaaaaaaaa(aaaa, aaaa)) {}",
3611 // Here a line could be saved by splitting the second initializer onto two
3612 // lines, but that is not desirable.
3613 verifyFormat("Constructor() :\n"
3614 " aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaa),\n"
3615 " aaaaaaaaaaa(aaaaaaaaaaa),\n"
3616 " aaaaaaaaaaaaaaaaaaaaat(aaaaaaaaaaaaaaaaaaaaaaaaaaaa) {}",
3619 FormatStyle OnePerLine = Style;
3620 OnePerLine.ConstructorInitializerAllOnOneLineOrOnePerLine = true;
3621 OnePerLine.AllowAllParametersOfDeclarationOnNextLine = false;
3622 verifyFormat("SomeClass::Constructor() :\n"
3623 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3624 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3625 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa) {}",
3627 verifyFormat("SomeClass::Constructor() :\n"
3628 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa), // Some comment\n"
3629 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa),\n"
3630 " aaaaaaaaaaaaa(aaaaaaaaaaaaaa) {}",
3632 verifyFormat("MyClass::MyClass(int var) :\n"
3633 " some_var_(var), // 4 space indent\n"
3634 " some_other_var_(var + 1) { // lined up\n"
3637 verifyFormat("Constructor() :\n"