1617277e7SBjörn Schäpers //===- unittest/Format/ConfigParseTest.cpp - Config parsing unit tests ----===// 2617277e7SBjörn Schäpers // 3617277e7SBjörn Schäpers // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4617277e7SBjörn Schäpers // See https://llvm.org/LICENSE.txt for license information. 5617277e7SBjörn Schäpers // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6617277e7SBjörn Schäpers // 7617277e7SBjörn Schäpers //===----------------------------------------------------------------------===// 8617277e7SBjörn Schäpers 9617277e7SBjörn Schäpers #include "clang/Format/Format.h" 10617277e7SBjörn Schäpers 11617277e7SBjörn Schäpers #include "llvm/Support/VirtualFileSystem.h" 12617277e7SBjörn Schäpers #include "gtest/gtest.h" 13617277e7SBjörn Schäpers 14617277e7SBjörn Schäpers namespace clang { 15617277e7SBjörn Schäpers namespace format { 16617277e7SBjörn Schäpers namespace { 17617277e7SBjörn Schäpers 18617277e7SBjörn Schäpers FormatStyle getGoogleStyle() { return getGoogleStyle(FormatStyle::LK_Cpp); } 19617277e7SBjörn Schäpers 20617277e7SBjörn Schäpers #define EXPECT_ALL_STYLES_EQUAL(Styles) \ 21617277e7SBjörn Schäpers for (size_t i = 1; i < Styles.size(); ++i) \ 22617277e7SBjörn Schäpers EXPECT_EQ(Styles[0], Styles[i]) \ 23617277e7SBjörn Schäpers << "Style #" << i << " of " << Styles.size() << " differs from Style #0" 24617277e7SBjörn Schäpers 25617277e7SBjörn Schäpers TEST(ConfigParseTest, GetsPredefinedStyleByName) { 26617277e7SBjörn Schäpers SmallVector<FormatStyle, 3> Styles; 27617277e7SBjörn Schäpers Styles.resize(3); 28617277e7SBjörn Schäpers 29617277e7SBjörn Schäpers Styles[0] = getLLVMStyle(); 30617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("LLVM", FormatStyle::LK_Cpp, &Styles[1])); 31617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("lLvM", FormatStyle::LK_Cpp, &Styles[2])); 32617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 33617277e7SBjörn Schäpers 34617277e7SBjörn Schäpers Styles[0] = getGoogleStyle(); 35617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("Google", FormatStyle::LK_Cpp, &Styles[1])); 36617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("gOOgle", FormatStyle::LK_Cpp, &Styles[2])); 37617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 38617277e7SBjörn Schäpers 39617277e7SBjörn Schäpers Styles[0] = getGoogleStyle(FormatStyle::LK_JavaScript); 40617277e7SBjörn Schäpers EXPECT_TRUE( 41617277e7SBjörn Schäpers getPredefinedStyle("Google", FormatStyle::LK_JavaScript, &Styles[1])); 42617277e7SBjörn Schäpers EXPECT_TRUE( 43617277e7SBjörn Schäpers getPredefinedStyle("gOOgle", FormatStyle::LK_JavaScript, &Styles[2])); 44617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 45617277e7SBjörn Schäpers 46617277e7SBjörn Schäpers Styles[0] = getChromiumStyle(FormatStyle::LK_Cpp); 47617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("Chromium", FormatStyle::LK_Cpp, &Styles[1])); 48617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("cHRoMiUM", FormatStyle::LK_Cpp, &Styles[2])); 49617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 50617277e7SBjörn Schäpers 51617277e7SBjörn Schäpers Styles[0] = getMozillaStyle(); 52617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("Mozilla", FormatStyle::LK_Cpp, &Styles[1])); 53617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("moZILla", FormatStyle::LK_Cpp, &Styles[2])); 54617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 55617277e7SBjörn Schäpers 56617277e7SBjörn Schäpers Styles[0] = getWebKitStyle(); 57617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("WebKit", FormatStyle::LK_Cpp, &Styles[1])); 58617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("wEbKit", FormatStyle::LK_Cpp, &Styles[2])); 59617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 60617277e7SBjörn Schäpers 61617277e7SBjörn Schäpers Styles[0] = getGNUStyle(); 62617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("GNU", FormatStyle::LK_Cpp, &Styles[1])); 63617277e7SBjörn Schäpers EXPECT_TRUE(getPredefinedStyle("gnU", FormatStyle::LK_Cpp, &Styles[2])); 64617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 65617277e7SBjörn Schäpers 660374bbbaSOwen Pan Styles[0] = getClangFormatStyle(); 670374bbbaSOwen Pan EXPECT_TRUE( 680374bbbaSOwen Pan getPredefinedStyle("clang-format", FormatStyle::LK_Cpp, &Styles[1])); 690374bbbaSOwen Pan EXPECT_TRUE( 700374bbbaSOwen Pan getPredefinedStyle("Clang-format", FormatStyle::LK_Cpp, &Styles[2])); 710374bbbaSOwen Pan EXPECT_ALL_STYLES_EQUAL(Styles); 720374bbbaSOwen Pan 73617277e7SBjörn Schäpers EXPECT_FALSE(getPredefinedStyle("qwerty", FormatStyle::LK_Cpp, &Styles[0])); 74617277e7SBjörn Schäpers } 75617277e7SBjörn Schäpers 76617277e7SBjörn Schäpers TEST(ConfigParseTest, GetsCorrectBasedOnStyle) { 77617277e7SBjörn Schäpers SmallVector<FormatStyle, 8> Styles; 78617277e7SBjörn Schäpers Styles.resize(2); 79617277e7SBjörn Schäpers 80617277e7SBjörn Schäpers Styles[0] = getGoogleStyle(); 81617277e7SBjörn Schäpers Styles[1] = getLLVMStyle(); 82617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("BasedOnStyle: Google", &Styles[1]).value()); 83617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 84617277e7SBjörn Schäpers 85617277e7SBjörn Schäpers Styles.resize(5); 86617277e7SBjörn Schäpers Styles[0] = getGoogleStyle(FormatStyle::LK_JavaScript); 87617277e7SBjörn Schäpers Styles[1] = getLLVMStyle(); 88617277e7SBjörn Schäpers Styles[1].Language = FormatStyle::LK_JavaScript; 89617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("BasedOnStyle: Google", &Styles[1]).value()); 90617277e7SBjörn Schäpers 91617277e7SBjörn Schäpers Styles[2] = getLLVMStyle(); 92617277e7SBjörn Schäpers Styles[2].Language = FormatStyle::LK_JavaScript; 93617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("Language: JavaScript\n" 94617277e7SBjörn Schäpers "BasedOnStyle: Google", 95617277e7SBjörn Schäpers &Styles[2]) 96617277e7SBjörn Schäpers .value()); 97617277e7SBjörn Schäpers 98617277e7SBjörn Schäpers Styles[3] = getLLVMStyle(); 99617277e7SBjörn Schäpers Styles[3].Language = FormatStyle::LK_JavaScript; 100617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("BasedOnStyle: Google\n" 101617277e7SBjörn Schäpers "Language: JavaScript", 102617277e7SBjörn Schäpers &Styles[3]) 103617277e7SBjörn Schäpers .value()); 104617277e7SBjörn Schäpers 105617277e7SBjörn Schäpers Styles[4] = getLLVMStyle(); 106617277e7SBjörn Schäpers Styles[4].Language = FormatStyle::LK_JavaScript; 107617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("---\n" 108617277e7SBjörn Schäpers "BasedOnStyle: LLVM\n" 109617277e7SBjörn Schäpers "IndentWidth: 123\n" 110617277e7SBjörn Schäpers "---\n" 111617277e7SBjörn Schäpers "BasedOnStyle: Google\n" 112617277e7SBjörn Schäpers "Language: JavaScript", 113617277e7SBjörn Schäpers &Styles[4]) 114617277e7SBjörn Schäpers .value()); 115617277e7SBjörn Schäpers EXPECT_ALL_STYLES_EQUAL(Styles); 116617277e7SBjörn Schäpers } 117617277e7SBjörn Schäpers 118617277e7SBjörn Schäpers #define CHECK_PARSE_BOOL_FIELD(FIELD, CONFIG_NAME) \ 119617277e7SBjörn Schäpers Style.FIELD = false; \ 120617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration(CONFIG_NAME ": true", &Style).value()); \ 121617277e7SBjörn Schäpers EXPECT_TRUE(Style.FIELD); \ 122617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration(CONFIG_NAME ": false", &Style).value()); \ 123617277e7SBjörn Schäpers EXPECT_FALSE(Style.FIELD) 124617277e7SBjörn Schäpers 125617277e7SBjörn Schäpers #define CHECK_PARSE_BOOL(FIELD) CHECK_PARSE_BOOL_FIELD(FIELD, #FIELD) 126617277e7SBjörn Schäpers 127617277e7SBjörn Schäpers #define CHECK_PARSE_NESTED_BOOL_FIELD(STRUCT, FIELD, CONFIG_NAME) \ 128617277e7SBjörn Schäpers Style.STRUCT.FIELD = false; \ 129617277e7SBjörn Schäpers EXPECT_EQ(0, \ 130617277e7SBjörn Schäpers parseConfiguration(#STRUCT ":\n " CONFIG_NAME ": true", &Style) \ 131617277e7SBjörn Schäpers .value()); \ 132617277e7SBjörn Schäpers EXPECT_TRUE(Style.STRUCT.FIELD); \ 133617277e7SBjörn Schäpers EXPECT_EQ(0, \ 134617277e7SBjörn Schäpers parseConfiguration(#STRUCT ":\n " CONFIG_NAME ": false", &Style) \ 135617277e7SBjörn Schäpers .value()); \ 136617277e7SBjörn Schäpers EXPECT_FALSE(Style.STRUCT.FIELD) 137617277e7SBjörn Schäpers 138617277e7SBjörn Schäpers #define CHECK_PARSE_NESTED_BOOL(STRUCT, FIELD) \ 139617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL_FIELD(STRUCT, FIELD, #FIELD) 140617277e7SBjörn Schäpers 141617277e7SBjörn Schäpers #define CHECK_PARSE(TEXT, FIELD, VALUE) \ 142617277e7SBjörn Schäpers EXPECT_NE(VALUE, Style.FIELD) << "Initial value already the same!"; \ 143617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration(TEXT, &Style).value()); \ 144617277e7SBjörn Schäpers EXPECT_EQ(VALUE, Style.FIELD) << "Unexpected value after parsing!" 145617277e7SBjörn Schäpers 146617277e7SBjörn Schäpers #define CHECK_PARSE_NESTED_VALUE(TEXT, STRUCT, FIELD, VALUE) \ 147617277e7SBjörn Schäpers EXPECT_NE(VALUE, Style.STRUCT.FIELD) << "Initial value already the same!"; \ 148617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration(#STRUCT ":\n " TEXT, &Style).value()); \ 149617277e7SBjörn Schäpers EXPECT_EQ(VALUE, Style.STRUCT.FIELD) << "Unexpected value after parsing!" 150617277e7SBjörn Schäpers 151617277e7SBjörn Schäpers TEST(ConfigParseTest, ParsesConfigurationBools) { 152617277e7SBjörn Schäpers FormatStyle Style = {}; 153617277e7SBjörn Schäpers Style.Language = FormatStyle::LK_Cpp; 154617277e7SBjörn Schäpers CHECK_PARSE_BOOL(AllowAllArgumentsOnNextLine); 155617277e7SBjörn Schäpers CHECK_PARSE_BOOL(AllowAllParametersOfDeclarationOnNextLine); 156617277e7SBjörn Schäpers CHECK_PARSE_BOOL(AllowShortCaseLabelsOnASingleLine); 15769209e30SBackl1ght CHECK_PARSE_BOOL(AllowShortCompoundRequirementOnASingleLine); 158617277e7SBjörn Schäpers CHECK_PARSE_BOOL(AllowShortEnumsOnASingleLine); 159617277e7SBjörn Schäpers CHECK_PARSE_BOOL(AllowShortLoopsOnASingleLine); 160617277e7SBjörn Schäpers CHECK_PARSE_BOOL(BinPackArguments); 161617277e7SBjörn Schäpers CHECK_PARSE_BOOL(BinPackParameters); 162617277e7SBjörn Schäpers CHECK_PARSE_BOOL(BreakAfterJavaFieldAnnotations); 163617277e7SBjörn Schäpers CHECK_PARSE_BOOL(BreakBeforeTernaryOperators); 164617277e7SBjörn Schäpers CHECK_PARSE_BOOL(BreakStringLiterals); 165617277e7SBjörn Schäpers CHECK_PARSE_BOOL(CompactNamespaces); 166617277e7SBjörn Schäpers CHECK_PARSE_BOOL(DerivePointerAlignment); 167617277e7SBjörn Schäpers CHECK_PARSE_BOOL_FIELD(DerivePointerAlignment, "DerivePointerBinding"); 168617277e7SBjörn Schäpers CHECK_PARSE_BOOL(DisableFormat); 169617277e7SBjörn Schäpers CHECK_PARSE_BOOL(IndentAccessModifiers); 170617277e7SBjörn Schäpers CHECK_PARSE_BOOL(IndentCaseLabels); 171617277e7SBjörn Schäpers CHECK_PARSE_BOOL(IndentCaseBlocks); 172617277e7SBjörn Schäpers CHECK_PARSE_BOOL(IndentGotoLabels); 173617277e7SBjörn Schäpers CHECK_PARSE_BOOL_FIELD(IndentRequiresClause, "IndentRequires"); 174617277e7SBjörn Schäpers CHECK_PARSE_BOOL(IndentRequiresClause); 175617277e7SBjörn Schäpers CHECK_PARSE_BOOL(IndentWrappedFunctionNames); 176617277e7SBjörn Schäpers CHECK_PARSE_BOOL(InsertBraces); 1772c6ecc9dSOwen Pan CHECK_PARSE_BOOL(InsertNewlineAtEOF); 178829ed96bSOwen Pan CHECK_PARSE_BOOL(KeepEmptyLinesAtEOF); 179617277e7SBjörn Schäpers CHECK_PARSE_BOOL(KeepEmptyLinesAtTheStartOfBlocks); 180617277e7SBjörn Schäpers CHECK_PARSE_BOOL(ObjCSpaceAfterProperty); 181617277e7SBjörn Schäpers CHECK_PARSE_BOOL(ObjCSpaceBeforeProtocolList); 182617277e7SBjörn Schäpers CHECK_PARSE_BOOL(Cpp11BracedListStyle); 183617277e7SBjörn Schäpers CHECK_PARSE_BOOL(ReflowComments); 184617277e7SBjörn Schäpers CHECK_PARSE_BOOL(RemoveBracesLLVM); 185617277e7SBjörn Schäpers CHECK_PARSE_BOOL(RemoveSemicolon); 186617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpacesInSquareBrackets); 187617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceInEmptyBlock); 188617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpacesInContainerLiterals); 189617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceAfterCStyleCast); 190617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceAfterTemplateKeyword); 191617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceAfterLogicalNot); 192617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeAssignmentOperators); 193617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeCaseColon); 194617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeCpp11BracedList); 195617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeCtorInitializerColon); 196617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeInheritanceColon); 197af98f3b1Smydeveloperday CHECK_PARSE_BOOL(SpaceBeforeJsonColon); 198617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeRangeBasedForLoopColon); 199617277e7SBjörn Schäpers CHECK_PARSE_BOOL(SpaceBeforeSquareBrackets); 20074cc4389Ssstwcw CHECK_PARSE_BOOL(VerilogBreakBetweenInstancePorts); 201617277e7SBjörn Schäpers 20274720d1bSGalen Elias CHECK_PARSE_NESTED_BOOL(AlignConsecutiveShortCaseStatements, Enabled); 20374720d1bSGalen Elias CHECK_PARSE_NESTED_BOOL(AlignConsecutiveShortCaseStatements, 20474720d1bSGalen Elias AcrossEmptyLines); 20574720d1bSGalen Elias CHECK_PARSE_NESTED_BOOL(AlignConsecutiveShortCaseStatements, AcrossComments); 20674720d1bSGalen Elias CHECK_PARSE_NESTED_BOOL(AlignConsecutiveShortCaseStatements, AlignCaseColons); 207617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterCaseLabel); 208617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterClass); 209617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterEnum); 210617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterFunction); 211617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterNamespace); 212617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterObjCDeclaration); 213617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterStruct); 214617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterUnion); 215617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, AfterExternBlock); 216617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, BeforeCatch); 217617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, BeforeElse); 218617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, BeforeLambdaBody); 219617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, BeforeWhile); 220617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, IndentBraces); 221617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyFunction); 222617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyRecord); 223617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyNamespace); 224617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterControlStatements); 225617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterForeachMacros); 226617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, 227617277e7SBjörn Schäpers AfterFunctionDeclarationName); 228617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, 229617277e7SBjörn Schäpers AfterFunctionDefinitionName); 230617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterIfMacros); 231617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterOverloadedOperator); 232617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, BeforeNonEmptyParentheses); 233c669541cSGedare Bloom CHECK_PARSE_NESTED_BOOL(SpacesInParensOptions, InCStyleCasts); 234c669541cSGedare Bloom CHECK_PARSE_NESTED_BOOL(SpacesInParensOptions, InConditionalStatements); 235c669541cSGedare Bloom CHECK_PARSE_NESTED_BOOL(SpacesInParensOptions, InEmptyParentheses); 236c669541cSGedare Bloom CHECK_PARSE_NESTED_BOOL(SpacesInParensOptions, Other); 237617277e7SBjörn Schäpers } 238617277e7SBjörn Schäpers 239617277e7SBjörn Schäpers #undef CHECK_PARSE_BOOL 240617277e7SBjörn Schäpers 241617277e7SBjörn Schäpers TEST(ConfigParseTest, ParsesConfiguration) { 242617277e7SBjörn Schäpers FormatStyle Style = {}; 243617277e7SBjörn Schäpers Style.Language = FormatStyle::LK_Cpp; 244617277e7SBjörn Schäpers CHECK_PARSE("AccessModifierOffset: -1234", AccessModifierOffset, -1234); 245617277e7SBjörn Schäpers CHECK_PARSE("ConstructorInitializerIndentWidth: 1234", 246617277e7SBjörn Schäpers ConstructorInitializerIndentWidth, 1234u); 247617277e7SBjörn Schäpers CHECK_PARSE("ObjCBlockIndentWidth: 1234", ObjCBlockIndentWidth, 1234u); 248617277e7SBjörn Schäpers CHECK_PARSE("ColumnLimit: 1234", ColumnLimit, 1234u); 249617277e7SBjörn Schäpers CHECK_PARSE("MaxEmptyLinesToKeep: 1234", MaxEmptyLinesToKeep, 1234u); 250617277e7SBjörn Schäpers CHECK_PARSE("PenaltyBreakAssignment: 1234", PenaltyBreakAssignment, 1234u); 251617277e7SBjörn Schäpers CHECK_PARSE("PenaltyBreakBeforeFirstCallParameter: 1234", 252617277e7SBjörn Schäpers PenaltyBreakBeforeFirstCallParameter, 1234u); 253617277e7SBjörn Schäpers CHECK_PARSE("PenaltyBreakTemplateDeclaration: 1234", 254617277e7SBjörn Schäpers PenaltyBreakTemplateDeclaration, 1234u); 255617277e7SBjörn Schäpers CHECK_PARSE("PenaltyBreakOpenParenthesis: 1234", PenaltyBreakOpenParenthesis, 256617277e7SBjörn Schäpers 1234u); 257617277e7SBjörn Schäpers CHECK_PARSE("PenaltyExcessCharacter: 1234", PenaltyExcessCharacter, 1234u); 258617277e7SBjörn Schäpers CHECK_PARSE("PenaltyReturnTypeOnItsOwnLine: 1234", 259617277e7SBjörn Schäpers PenaltyReturnTypeOnItsOwnLine, 1234u); 260617277e7SBjörn Schäpers CHECK_PARSE("SpacesBeforeTrailingComments: 1234", 261617277e7SBjörn Schäpers SpacesBeforeTrailingComments, 1234u); 262617277e7SBjörn Schäpers CHECK_PARSE("IndentWidth: 32", IndentWidth, 32u); 263617277e7SBjörn Schäpers CHECK_PARSE("ContinuationIndentWidth: 11", ContinuationIndentWidth, 11u); 264c12aa69aSJon Phillips CHECK_PARSE("BracedInitializerIndentWidth: 34", BracedInitializerIndentWidth, 265c12aa69aSJon Phillips 34); 266617277e7SBjörn Schäpers CHECK_PARSE("CommentPragmas: '// abc$'", CommentPragmas, "// abc$"); 267617277e7SBjörn Schäpers 268617277e7SBjörn Schäpers Style.QualifierAlignment = FormatStyle::QAS_Right; 269617277e7SBjörn Schäpers CHECK_PARSE("QualifierAlignment: Leave", QualifierAlignment, 270617277e7SBjörn Schäpers FormatStyle::QAS_Leave); 271617277e7SBjörn Schäpers CHECK_PARSE("QualifierAlignment: Right", QualifierAlignment, 272617277e7SBjörn Schäpers FormatStyle::QAS_Right); 273617277e7SBjörn Schäpers CHECK_PARSE("QualifierAlignment: Left", QualifierAlignment, 274617277e7SBjörn Schäpers FormatStyle::QAS_Left); 275617277e7SBjörn Schäpers CHECK_PARSE("QualifierAlignment: Custom", QualifierAlignment, 276617277e7SBjörn Schäpers FormatStyle::QAS_Custom); 277617277e7SBjörn Schäpers 278617277e7SBjörn Schäpers Style.QualifierOrder.clear(); 279617277e7SBjörn Schäpers CHECK_PARSE("QualifierOrder: [ const, volatile, type ]", QualifierOrder, 280617277e7SBjörn Schäpers std::vector<std::string>({"const", "volatile", "type"})); 281617277e7SBjörn Schäpers Style.QualifierOrder.clear(); 282617277e7SBjörn Schäpers CHECK_PARSE("QualifierOrder: [const, type]", QualifierOrder, 283617277e7SBjörn Schäpers std::vector<std::string>({"const", "type"})); 284617277e7SBjörn Schäpers Style.QualifierOrder.clear(); 285617277e7SBjörn Schäpers CHECK_PARSE("QualifierOrder: [volatile, type]", QualifierOrder, 286617277e7SBjörn Schäpers std::vector<std::string>({"volatile", "type"})); 287617277e7SBjörn Schäpers 288617277e7SBjörn Schäpers #define CHECK_ALIGN_CONSECUTIVE(FIELD) \ 289617277e7SBjörn Schäpers do { \ 290617277e7SBjörn Schäpers Style.FIELD.Enabled = true; \ 291617277e7SBjörn Schäpers CHECK_PARSE(#FIELD ": None", FIELD, \ 292617277e7SBjörn Schäpers FormatStyle::AlignConsecutiveStyle( \ 293617277e7SBjörn Schäpers {/*Enabled=*/false, /*AcrossEmptyLines=*/false, \ 294617277e7SBjörn Schäpers /*AcrossComments=*/false, /*AlignCompound=*/false, \ 295617277e7SBjörn Schäpers /*PadOperators=*/true})); \ 296617277e7SBjörn Schäpers CHECK_PARSE(#FIELD ": Consecutive", FIELD, \ 297617277e7SBjörn Schäpers FormatStyle::AlignConsecutiveStyle( \ 298617277e7SBjörn Schäpers {/*Enabled=*/true, /*AcrossEmptyLines=*/false, \ 299617277e7SBjörn Schäpers /*AcrossComments=*/false, /*AlignCompound=*/false, \ 300617277e7SBjörn Schäpers /*PadOperators=*/true})); \ 301617277e7SBjörn Schäpers CHECK_PARSE(#FIELD ": AcrossEmptyLines", FIELD, \ 302617277e7SBjörn Schäpers FormatStyle::AlignConsecutiveStyle( \ 303617277e7SBjörn Schäpers {/*Enabled=*/true, /*AcrossEmptyLines=*/true, \ 304617277e7SBjörn Schäpers /*AcrossComments=*/false, /*AlignCompound=*/false, \ 305617277e7SBjörn Schäpers /*PadOperators=*/true})); \ 306617277e7SBjörn Schäpers CHECK_PARSE(#FIELD ": AcrossEmptyLinesAndComments", FIELD, \ 307617277e7SBjörn Schäpers FormatStyle::AlignConsecutiveStyle( \ 308617277e7SBjörn Schäpers {/*Enabled=*/true, /*AcrossEmptyLines=*/true, \ 309617277e7SBjörn Schäpers /*AcrossComments=*/true, /*AlignCompound=*/false, \ 310617277e7SBjörn Schäpers /*PadOperators=*/true})); \ 311617277e7SBjörn Schäpers /* For backwards compability, false / true should still parse */ \ 312617277e7SBjörn Schäpers CHECK_PARSE(#FIELD ": false", FIELD, \ 313617277e7SBjörn Schäpers FormatStyle::AlignConsecutiveStyle( \ 314617277e7SBjörn Schäpers {/*Enabled=*/false, /*AcrossEmptyLines=*/false, \ 315617277e7SBjörn Schäpers /*AcrossComments=*/false, /*AlignCompound=*/false, \ 316617277e7SBjörn Schäpers /*PadOperators=*/true})); \ 317617277e7SBjörn Schäpers CHECK_PARSE(#FIELD ": true", FIELD, \ 318617277e7SBjörn Schäpers FormatStyle::AlignConsecutiveStyle( \ 319617277e7SBjörn Schäpers {/*Enabled=*/true, /*AcrossEmptyLines=*/false, \ 320617277e7SBjörn Schäpers /*AcrossComments=*/false, /*AlignCompound=*/false, \ 321617277e7SBjörn Schäpers /*PadOperators=*/true})); \ 322617277e7SBjörn Schäpers \ 323617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(FIELD, Enabled); \ 324617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(FIELD, AcrossEmptyLines); \ 325617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(FIELD, AcrossComments); \ 326617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(FIELD, AlignCompound); \ 327617277e7SBjörn Schäpers CHECK_PARSE_NESTED_BOOL(FIELD, PadOperators); \ 328617277e7SBjörn Schäpers } while (false) 329617277e7SBjörn Schäpers 330617277e7SBjörn Schäpers CHECK_ALIGN_CONSECUTIVE(AlignConsecutiveAssignments); 331617277e7SBjörn Schäpers CHECK_ALIGN_CONSECUTIVE(AlignConsecutiveBitFields); 332617277e7SBjörn Schäpers CHECK_ALIGN_CONSECUTIVE(AlignConsecutiveMacros); 333617277e7SBjörn Schäpers CHECK_ALIGN_CONSECUTIVE(AlignConsecutiveDeclarations); 334617277e7SBjörn Schäpers 335617277e7SBjörn Schäpers #undef CHECK_ALIGN_CONSECUTIVE 336617277e7SBjörn Schäpers 337617277e7SBjörn Schäpers Style.PointerAlignment = FormatStyle::PAS_Middle; 338617277e7SBjörn Schäpers CHECK_PARSE("PointerAlignment: Left", PointerAlignment, 339617277e7SBjörn Schäpers FormatStyle::PAS_Left); 340617277e7SBjörn Schäpers CHECK_PARSE("PointerAlignment: Right", PointerAlignment, 341617277e7SBjörn Schäpers FormatStyle::PAS_Right); 342617277e7SBjörn Schäpers CHECK_PARSE("PointerAlignment: Middle", PointerAlignment, 343617277e7SBjörn Schäpers FormatStyle::PAS_Middle); 344617277e7SBjörn Schäpers Style.ReferenceAlignment = FormatStyle::RAS_Middle; 345617277e7SBjörn Schäpers CHECK_PARSE("ReferenceAlignment: Pointer", ReferenceAlignment, 346617277e7SBjörn Schäpers FormatStyle::RAS_Pointer); 347617277e7SBjörn Schäpers CHECK_PARSE("ReferenceAlignment: Left", ReferenceAlignment, 348617277e7SBjörn Schäpers FormatStyle::RAS_Left); 349617277e7SBjörn Schäpers CHECK_PARSE("ReferenceAlignment: Right", ReferenceAlignment, 350617277e7SBjörn Schäpers FormatStyle::RAS_Right); 351617277e7SBjörn Schäpers CHECK_PARSE("ReferenceAlignment: Middle", ReferenceAlignment, 352617277e7SBjörn Schäpers FormatStyle::RAS_Middle); 353617277e7SBjörn Schäpers // For backward compatibility: 354617277e7SBjörn Schäpers CHECK_PARSE("PointerBindsToType: Left", PointerAlignment, 355617277e7SBjörn Schäpers FormatStyle::PAS_Left); 356617277e7SBjörn Schäpers CHECK_PARSE("PointerBindsToType: Right", PointerAlignment, 357617277e7SBjörn Schäpers FormatStyle::PAS_Right); 358617277e7SBjörn Schäpers CHECK_PARSE("PointerBindsToType: Middle", PointerAlignment, 359617277e7SBjörn Schäpers FormatStyle::PAS_Middle); 360617277e7SBjörn Schäpers 361617277e7SBjörn Schäpers Style.Standard = FormatStyle::LS_Auto; 362617277e7SBjörn Schäpers CHECK_PARSE("Standard: c++03", Standard, FormatStyle::LS_Cpp03); 363617277e7SBjörn Schäpers CHECK_PARSE("Standard: c++11", Standard, FormatStyle::LS_Cpp11); 364617277e7SBjörn Schäpers CHECK_PARSE("Standard: c++14", Standard, FormatStyle::LS_Cpp14); 365617277e7SBjörn Schäpers CHECK_PARSE("Standard: c++17", Standard, FormatStyle::LS_Cpp17); 366617277e7SBjörn Schäpers CHECK_PARSE("Standard: c++20", Standard, FormatStyle::LS_Cpp20); 367617277e7SBjörn Schäpers CHECK_PARSE("Standard: Auto", Standard, FormatStyle::LS_Auto); 368617277e7SBjörn Schäpers CHECK_PARSE("Standard: Latest", Standard, FormatStyle::LS_Latest); 369617277e7SBjörn Schäpers // Legacy aliases: 370617277e7SBjörn Schäpers CHECK_PARSE("Standard: Cpp03", Standard, FormatStyle::LS_Cpp03); 371617277e7SBjörn Schäpers CHECK_PARSE("Standard: Cpp11", Standard, FormatStyle::LS_Latest); 372617277e7SBjörn Schäpers CHECK_PARSE("Standard: C++03", Standard, FormatStyle::LS_Cpp03); 373617277e7SBjörn Schäpers CHECK_PARSE("Standard: C++11", Standard, FormatStyle::LS_Cpp11); 374617277e7SBjörn Schäpers 375617277e7SBjörn Schäpers Style.BreakBeforeBinaryOperators = FormatStyle::BOS_All; 376617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBinaryOperators: NonAssignment", 377617277e7SBjörn Schäpers BreakBeforeBinaryOperators, FormatStyle::BOS_NonAssignment); 378617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBinaryOperators: None", BreakBeforeBinaryOperators, 379617277e7SBjörn Schäpers FormatStyle::BOS_None); 380617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBinaryOperators: All", BreakBeforeBinaryOperators, 381617277e7SBjörn Schäpers FormatStyle::BOS_All); 382617277e7SBjörn Schäpers // For backward compatibility: 383617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBinaryOperators: false", BreakBeforeBinaryOperators, 384617277e7SBjörn Schäpers FormatStyle::BOS_None); 385617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBinaryOperators: true", BreakBeforeBinaryOperators, 386617277e7SBjörn Schäpers FormatStyle::BOS_All); 387617277e7SBjörn Schäpers 388617277e7SBjörn Schäpers Style.BreakConstructorInitializers = FormatStyle::BCIS_BeforeColon; 389617277e7SBjörn Schäpers CHECK_PARSE("BreakConstructorInitializers: BeforeComma", 390617277e7SBjörn Schäpers BreakConstructorInitializers, FormatStyle::BCIS_BeforeComma); 391617277e7SBjörn Schäpers CHECK_PARSE("BreakConstructorInitializers: AfterColon", 392617277e7SBjörn Schäpers BreakConstructorInitializers, FormatStyle::BCIS_AfterColon); 393617277e7SBjörn Schäpers CHECK_PARSE("BreakConstructorInitializers: BeforeColon", 394617277e7SBjörn Schäpers BreakConstructorInitializers, FormatStyle::BCIS_BeforeColon); 395617277e7SBjörn Schäpers // For backward compatibility: 396617277e7SBjörn Schäpers CHECK_PARSE("BreakConstructorInitializersBeforeComma: true", 397617277e7SBjörn Schäpers BreakConstructorInitializers, FormatStyle::BCIS_BeforeComma); 398617277e7SBjörn Schäpers 399617277e7SBjörn Schäpers Style.BreakInheritanceList = FormatStyle::BILS_BeforeColon; 400617277e7SBjörn Schäpers CHECK_PARSE("BreakInheritanceList: AfterComma", BreakInheritanceList, 401617277e7SBjörn Schäpers FormatStyle::BILS_AfterComma); 402617277e7SBjörn Schäpers CHECK_PARSE("BreakInheritanceList: BeforeComma", BreakInheritanceList, 403617277e7SBjörn Schäpers FormatStyle::BILS_BeforeComma); 404617277e7SBjörn Schäpers CHECK_PARSE("BreakInheritanceList: AfterColon", BreakInheritanceList, 405617277e7SBjörn Schäpers FormatStyle::BILS_AfterColon); 406617277e7SBjörn Schäpers CHECK_PARSE("BreakInheritanceList: BeforeColon", BreakInheritanceList, 407617277e7SBjörn Schäpers FormatStyle::BILS_BeforeColon); 408617277e7SBjörn Schäpers // For backward compatibility: 409617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeInheritanceComma: true", BreakInheritanceList, 410617277e7SBjörn Schäpers FormatStyle::BILS_BeforeComma); 411617277e7SBjörn Schäpers 412617277e7SBjörn Schäpers Style.PackConstructorInitializers = FormatStyle::PCIS_BinPack; 413617277e7SBjörn Schäpers CHECK_PARSE("PackConstructorInitializers: Never", PackConstructorInitializers, 414617277e7SBjörn Schäpers FormatStyle::PCIS_Never); 415617277e7SBjörn Schäpers CHECK_PARSE("PackConstructorInitializers: BinPack", 416617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_BinPack); 417617277e7SBjörn Schäpers CHECK_PARSE("PackConstructorInitializers: CurrentLine", 418617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_CurrentLine); 419617277e7SBjörn Schäpers CHECK_PARSE("PackConstructorInitializers: NextLine", 420617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_NextLine); 421c24cdd58SBackl1ght CHECK_PARSE("PackConstructorInitializers: NextLineOnly", 422c24cdd58SBackl1ght PackConstructorInitializers, FormatStyle::PCIS_NextLineOnly); 423617277e7SBjörn Schäpers // For backward compatibility: 424617277e7SBjörn Schäpers CHECK_PARSE("BasedOnStyle: Google\n" 425617277e7SBjörn Schäpers "ConstructorInitializerAllOnOneLineOrOnePerLine: true\n" 426617277e7SBjörn Schäpers "AllowAllConstructorInitializersOnNextLine: false", 427617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_CurrentLine); 428617277e7SBjörn Schäpers Style.PackConstructorInitializers = FormatStyle::PCIS_NextLine; 429617277e7SBjörn Schäpers CHECK_PARSE("BasedOnStyle: Google\n" 430617277e7SBjörn Schäpers "ConstructorInitializerAllOnOneLineOrOnePerLine: false", 431617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_BinPack); 432617277e7SBjörn Schäpers CHECK_PARSE("ConstructorInitializerAllOnOneLineOrOnePerLine: true\n" 433617277e7SBjörn Schäpers "AllowAllConstructorInitializersOnNextLine: true", 434617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_NextLine); 435617277e7SBjörn Schäpers Style.PackConstructorInitializers = FormatStyle::PCIS_BinPack; 436617277e7SBjörn Schäpers CHECK_PARSE("ConstructorInitializerAllOnOneLineOrOnePerLine: true\n" 437617277e7SBjörn Schäpers "AllowAllConstructorInitializersOnNextLine: false", 438617277e7SBjörn Schäpers PackConstructorInitializers, FormatStyle::PCIS_CurrentLine); 439617277e7SBjörn Schäpers 440617277e7SBjörn Schäpers Style.EmptyLineBeforeAccessModifier = FormatStyle::ELBAMS_LogicalBlock; 441617277e7SBjörn Schäpers CHECK_PARSE("EmptyLineBeforeAccessModifier: Never", 442617277e7SBjörn Schäpers EmptyLineBeforeAccessModifier, FormatStyle::ELBAMS_Never); 443617277e7SBjörn Schäpers CHECK_PARSE("EmptyLineBeforeAccessModifier: Leave", 444617277e7SBjörn Schäpers EmptyLineBeforeAccessModifier, FormatStyle::ELBAMS_Leave); 445617277e7SBjörn Schäpers CHECK_PARSE("EmptyLineBeforeAccessModifier: LogicalBlock", 446617277e7SBjörn Schäpers EmptyLineBeforeAccessModifier, FormatStyle::ELBAMS_LogicalBlock); 447617277e7SBjörn Schäpers CHECK_PARSE("EmptyLineBeforeAccessModifier: Always", 448617277e7SBjörn Schäpers EmptyLineBeforeAccessModifier, FormatStyle::ELBAMS_Always); 449617277e7SBjörn Schäpers 450617277e7SBjörn Schäpers Style.AlignAfterOpenBracket = FormatStyle::BAS_AlwaysBreak; 451617277e7SBjörn Schäpers CHECK_PARSE("AlignAfterOpenBracket: Align", AlignAfterOpenBracket, 452617277e7SBjörn Schäpers FormatStyle::BAS_Align); 453617277e7SBjörn Schäpers CHECK_PARSE("AlignAfterOpenBracket: DontAlign", AlignAfterOpenBracket, 454617277e7SBjörn Schäpers FormatStyle::BAS_DontAlign); 455617277e7SBjörn Schäpers CHECK_PARSE("AlignAfterOpenBracket: AlwaysBreak", AlignAfterOpenBracket, 456617277e7SBjörn Schäpers FormatStyle::BAS_AlwaysBreak); 457617277e7SBjörn Schäpers CHECK_PARSE("AlignAfterOpenBracket: BlockIndent", AlignAfterOpenBracket, 458617277e7SBjörn Schäpers FormatStyle::BAS_BlockIndent); 459617277e7SBjörn Schäpers // For backward compatibility: 460617277e7SBjörn Schäpers CHECK_PARSE("AlignAfterOpenBracket: false", AlignAfterOpenBracket, 461617277e7SBjörn Schäpers FormatStyle::BAS_DontAlign); 462617277e7SBjörn Schäpers CHECK_PARSE("AlignAfterOpenBracket: true", AlignAfterOpenBracket, 463617277e7SBjörn Schäpers FormatStyle::BAS_Align); 464617277e7SBjörn Schäpers 465617277e7SBjörn Schäpers Style.AlignEscapedNewlines = FormatStyle::ENAS_Left; 466617277e7SBjörn Schäpers CHECK_PARSE("AlignEscapedNewlines: DontAlign", AlignEscapedNewlines, 467617277e7SBjörn Schäpers FormatStyle::ENAS_DontAlign); 468617277e7SBjörn Schäpers CHECK_PARSE("AlignEscapedNewlines: Left", AlignEscapedNewlines, 469617277e7SBjörn Schäpers FormatStyle::ENAS_Left); 470617277e7SBjörn Schäpers CHECK_PARSE("AlignEscapedNewlines: Right", AlignEscapedNewlines, 471617277e7SBjörn Schäpers FormatStyle::ENAS_Right); 472617277e7SBjörn Schäpers // For backward compatibility: 473617277e7SBjörn Schäpers CHECK_PARSE("AlignEscapedNewlinesLeft: true", AlignEscapedNewlines, 474617277e7SBjörn Schäpers FormatStyle::ENAS_Left); 475617277e7SBjörn Schäpers CHECK_PARSE("AlignEscapedNewlinesLeft: false", AlignEscapedNewlines, 476617277e7SBjörn Schäpers FormatStyle::ENAS_Right); 477617277e7SBjörn Schäpers 478617277e7SBjörn Schäpers Style.AlignOperands = FormatStyle::OAS_Align; 479617277e7SBjörn Schäpers CHECK_PARSE("AlignOperands: DontAlign", AlignOperands, 480617277e7SBjörn Schäpers FormatStyle::OAS_DontAlign); 481617277e7SBjörn Schäpers CHECK_PARSE("AlignOperands: Align", AlignOperands, FormatStyle::OAS_Align); 482617277e7SBjörn Schäpers CHECK_PARSE("AlignOperands: AlignAfterOperator", AlignOperands, 483617277e7SBjörn Schäpers FormatStyle::OAS_AlignAfterOperator); 484617277e7SBjörn Schäpers // For backward compatibility: 485617277e7SBjörn Schäpers CHECK_PARSE("AlignOperands: false", AlignOperands, 486617277e7SBjörn Schäpers FormatStyle::OAS_DontAlign); 487617277e7SBjörn Schäpers CHECK_PARSE("AlignOperands: true", AlignOperands, FormatStyle::OAS_Align); 488617277e7SBjörn Schäpers 489617277e7SBjörn Schäpers CHECK_PARSE("AlignTrailingComments: Leave", AlignTrailingComments, 490617277e7SBjörn Schäpers FormatStyle::TrailingCommentsAlignmentStyle( 4912bcfff67SOwen Pan {FormatStyle::TCAS_Leave, 0})); 492617277e7SBjörn Schäpers CHECK_PARSE("AlignTrailingComments: Always", AlignTrailingComments, 493617277e7SBjörn Schäpers FormatStyle::TrailingCommentsAlignmentStyle( 4942bcfff67SOwen Pan {FormatStyle::TCAS_Always, 0})); 495617277e7SBjörn Schäpers CHECK_PARSE("AlignTrailingComments: Never", AlignTrailingComments, 496617277e7SBjörn Schäpers FormatStyle::TrailingCommentsAlignmentStyle( 4972bcfff67SOwen Pan {FormatStyle::TCAS_Never, 0})); 498617277e7SBjörn Schäpers // For backwards compatibility 499617277e7SBjörn Schäpers CHECK_PARSE("AlignTrailingComments: true", AlignTrailingComments, 500617277e7SBjörn Schäpers FormatStyle::TrailingCommentsAlignmentStyle( 5012bcfff67SOwen Pan {FormatStyle::TCAS_Always, 0})); 502617277e7SBjörn Schäpers CHECK_PARSE("AlignTrailingComments: false", AlignTrailingComments, 503617277e7SBjörn Schäpers FormatStyle::TrailingCommentsAlignmentStyle( 5042bcfff67SOwen Pan {FormatStyle::TCAS_Never, 0})); 505617277e7SBjörn Schäpers CHECK_PARSE_NESTED_VALUE("Kind: Always", AlignTrailingComments, Kind, 506617277e7SBjörn Schäpers FormatStyle::TCAS_Always); 507617277e7SBjörn Schäpers CHECK_PARSE_NESTED_VALUE("Kind: Never", AlignTrailingComments, Kind, 508617277e7SBjörn Schäpers FormatStyle::TCAS_Never); 509617277e7SBjörn Schäpers CHECK_PARSE_NESTED_VALUE("Kind: Leave", AlignTrailingComments, Kind, 510617277e7SBjörn Schäpers FormatStyle::TCAS_Leave); 511617277e7SBjörn Schäpers CHECK_PARSE_NESTED_VALUE("OverEmptyLines: 1234", AlignTrailingComments, 512617277e7SBjörn Schäpers OverEmptyLines, 1234u); 513617277e7SBjörn Schäpers 514617277e7SBjörn Schäpers Style.UseTab = FormatStyle::UT_ForIndentation; 515617277e7SBjörn Schäpers CHECK_PARSE("UseTab: Never", UseTab, FormatStyle::UT_Never); 516617277e7SBjörn Schäpers CHECK_PARSE("UseTab: ForIndentation", UseTab, FormatStyle::UT_ForIndentation); 517617277e7SBjörn Schäpers CHECK_PARSE("UseTab: Always", UseTab, FormatStyle::UT_Always); 518617277e7SBjörn Schäpers CHECK_PARSE("UseTab: ForContinuationAndIndentation", UseTab, 519617277e7SBjörn Schäpers FormatStyle::UT_ForContinuationAndIndentation); 520617277e7SBjörn Schäpers CHECK_PARSE("UseTab: AlignWithSpaces", UseTab, 521617277e7SBjörn Schäpers FormatStyle::UT_AlignWithSpaces); 522617277e7SBjörn Schäpers // For backward compatibility: 523617277e7SBjörn Schäpers CHECK_PARSE("UseTab: false", UseTab, FormatStyle::UT_Never); 524617277e7SBjörn Schäpers CHECK_PARSE("UseTab: true", UseTab, FormatStyle::UT_Always); 525617277e7SBjörn Schäpers 526617277e7SBjörn Schäpers Style.AllowShortBlocksOnASingleLine = FormatStyle::SBS_Empty; 527617277e7SBjörn Schäpers CHECK_PARSE("AllowShortBlocksOnASingleLine: Never", 528617277e7SBjörn Schäpers AllowShortBlocksOnASingleLine, FormatStyle::SBS_Never); 529617277e7SBjörn Schäpers CHECK_PARSE("AllowShortBlocksOnASingleLine: Empty", 530617277e7SBjörn Schäpers AllowShortBlocksOnASingleLine, FormatStyle::SBS_Empty); 531617277e7SBjörn Schäpers CHECK_PARSE("AllowShortBlocksOnASingleLine: Always", 532617277e7SBjörn Schäpers AllowShortBlocksOnASingleLine, FormatStyle::SBS_Always); 533617277e7SBjörn Schäpers // For backward compatibility: 534617277e7SBjörn Schäpers CHECK_PARSE("AllowShortBlocksOnASingleLine: false", 535617277e7SBjörn Schäpers AllowShortBlocksOnASingleLine, FormatStyle::SBS_Never); 536617277e7SBjörn Schäpers CHECK_PARSE("AllowShortBlocksOnASingleLine: true", 537617277e7SBjörn Schäpers AllowShortBlocksOnASingleLine, FormatStyle::SBS_Always); 538617277e7SBjörn Schäpers 539617277e7SBjörn Schäpers Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_Inline; 540617277e7SBjörn Schäpers CHECK_PARSE("AllowShortFunctionsOnASingleLine: None", 541617277e7SBjörn Schäpers AllowShortFunctionsOnASingleLine, FormatStyle::SFS_None); 542617277e7SBjörn Schäpers CHECK_PARSE("AllowShortFunctionsOnASingleLine: Inline", 543617277e7SBjörn Schäpers AllowShortFunctionsOnASingleLine, FormatStyle::SFS_Inline); 544617277e7SBjörn Schäpers CHECK_PARSE("AllowShortFunctionsOnASingleLine: Empty", 545617277e7SBjörn Schäpers AllowShortFunctionsOnASingleLine, FormatStyle::SFS_Empty); 546617277e7SBjörn Schäpers CHECK_PARSE("AllowShortFunctionsOnASingleLine: All", 547617277e7SBjörn Schäpers AllowShortFunctionsOnASingleLine, FormatStyle::SFS_All); 548617277e7SBjörn Schäpers // For backward compatibility: 549617277e7SBjörn Schäpers CHECK_PARSE("AllowShortFunctionsOnASingleLine: false", 550617277e7SBjörn Schäpers AllowShortFunctionsOnASingleLine, FormatStyle::SFS_None); 551617277e7SBjörn Schäpers CHECK_PARSE("AllowShortFunctionsOnASingleLine: true", 552617277e7SBjörn Schäpers AllowShortFunctionsOnASingleLine, FormatStyle::SFS_All); 553617277e7SBjörn Schäpers 55495c1a174SBackl1ght Style.AllowShortLambdasOnASingleLine = FormatStyle::SLS_All; 55595c1a174SBackl1ght CHECK_PARSE("AllowShortLambdasOnASingleLine: None", 55695c1a174SBackl1ght AllowShortLambdasOnASingleLine, FormatStyle::SLS_None); 55795c1a174SBackl1ght CHECK_PARSE("AllowShortLambdasOnASingleLine: Empty", 55895c1a174SBackl1ght AllowShortLambdasOnASingleLine, FormatStyle::SLS_Empty); 55995c1a174SBackl1ght CHECK_PARSE("AllowShortLambdasOnASingleLine: Inline", 56095c1a174SBackl1ght AllowShortLambdasOnASingleLine, FormatStyle::SLS_Inline); 56195c1a174SBackl1ght CHECK_PARSE("AllowShortLambdasOnASingleLine: All", 56295c1a174SBackl1ght AllowShortLambdasOnASingleLine, FormatStyle::SLS_All); 56395c1a174SBackl1ght // For backward compatibility: 56495c1a174SBackl1ght CHECK_PARSE("AllowShortLambdasOnASingleLine: false", 56595c1a174SBackl1ght AllowShortLambdasOnASingleLine, FormatStyle::SLS_None); 56695c1a174SBackl1ght CHECK_PARSE("AllowShortLambdasOnASingleLine: true", 56795c1a174SBackl1ght AllowShortLambdasOnASingleLine, FormatStyle::SLS_All); 56895c1a174SBackl1ght 569617277e7SBjörn Schäpers Style.SpaceAroundPointerQualifiers = FormatStyle::SAPQ_Both; 570617277e7SBjörn Schäpers CHECK_PARSE("SpaceAroundPointerQualifiers: Default", 571617277e7SBjörn Schäpers SpaceAroundPointerQualifiers, FormatStyle::SAPQ_Default); 572617277e7SBjörn Schäpers CHECK_PARSE("SpaceAroundPointerQualifiers: Before", 573617277e7SBjörn Schäpers SpaceAroundPointerQualifiers, FormatStyle::SAPQ_Before); 574617277e7SBjörn Schäpers CHECK_PARSE("SpaceAroundPointerQualifiers: After", 575617277e7SBjörn Schäpers SpaceAroundPointerQualifiers, FormatStyle::SAPQ_After); 576617277e7SBjörn Schäpers CHECK_PARSE("SpaceAroundPointerQualifiers: Both", 577617277e7SBjörn Schäpers SpaceAroundPointerQualifiers, FormatStyle::SAPQ_Both); 578617277e7SBjörn Schäpers 579617277e7SBjörn Schäpers Style.SpaceBeforeParens = FormatStyle::SBPO_Always; 580617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: Never", SpaceBeforeParens, 581617277e7SBjörn Schäpers FormatStyle::SBPO_Never); 582617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: Always", SpaceBeforeParens, 583617277e7SBjörn Schäpers FormatStyle::SBPO_Always); 584617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: ControlStatements", SpaceBeforeParens, 585617277e7SBjörn Schäpers FormatStyle::SBPO_ControlStatements); 586617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: ControlStatementsExceptControlMacros", 587617277e7SBjörn Schäpers SpaceBeforeParens, 588617277e7SBjörn Schäpers FormatStyle::SBPO_ControlStatementsExceptControlMacros); 589617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: NonEmptyParentheses", SpaceBeforeParens, 590617277e7SBjörn Schäpers FormatStyle::SBPO_NonEmptyParentheses); 591617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: Custom", SpaceBeforeParens, 592617277e7SBjörn Schäpers FormatStyle::SBPO_Custom); 593617277e7SBjörn Schäpers // For backward compatibility: 594617277e7SBjörn Schäpers CHECK_PARSE("SpaceAfterControlStatementKeyword: false", SpaceBeforeParens, 595617277e7SBjörn Schäpers FormatStyle::SBPO_Never); 596617277e7SBjörn Schäpers CHECK_PARSE("SpaceAfterControlStatementKeyword: true", SpaceBeforeParens, 597617277e7SBjörn Schäpers FormatStyle::SBPO_ControlStatements); 598617277e7SBjörn Schäpers CHECK_PARSE("SpaceBeforeParens: ControlStatementsExceptForEachMacros", 599617277e7SBjörn Schäpers SpaceBeforeParens, 600617277e7SBjörn Schäpers FormatStyle::SBPO_ControlStatementsExceptControlMacros); 601617277e7SBjörn Schäpers 6027c15dd60SOmar Ahmed Style.SpaceBeforeParens = FormatStyle::SBPO_Custom; 6037c15dd60SOmar Ahmed Style.SpaceBeforeParensOptions.AfterPlacementOperator = 6047c15dd60SOmar Ahmed FormatStyle::SpaceBeforeParensCustom::APO_Always; 6057c15dd60SOmar Ahmed CHECK_PARSE("SpaceBeforeParensOptions:\n" 6067c15dd60SOmar Ahmed " AfterPlacementOperator: Never", 6077c15dd60SOmar Ahmed SpaceBeforeParensOptions.AfterPlacementOperator, 6087c15dd60SOmar Ahmed FormatStyle::SpaceBeforeParensCustom::APO_Never); 6097c15dd60SOmar Ahmed 6107c15dd60SOmar Ahmed CHECK_PARSE("SpaceBeforeParensOptions:\n" 6117c15dd60SOmar Ahmed " AfterPlacementOperator: Always", 6127c15dd60SOmar Ahmed SpaceBeforeParensOptions.AfterPlacementOperator, 6137c15dd60SOmar Ahmed FormatStyle::SpaceBeforeParensCustom::APO_Always); 6147c15dd60SOmar Ahmed 6157c15dd60SOmar Ahmed CHECK_PARSE("SpaceBeforeParensOptions:\n" 6167c15dd60SOmar Ahmed " AfterPlacementOperator: Leave", 6177c15dd60SOmar Ahmed SpaceBeforeParensOptions.AfterPlacementOperator, 6187c15dd60SOmar Ahmed FormatStyle::SpaceBeforeParensCustom::APO_Leave); 6197c15dd60SOmar Ahmed 620c669541cSGedare Bloom // For backward compatibility: 621c669541cSGedare Bloom Style.SpacesInParens = FormatStyle::SIPO_Never; 622c669541cSGedare Bloom Style.SpacesInParensOptions = {}; 623c669541cSGedare Bloom CHECK_PARSE("SpacesInParentheses: true", SpacesInParens, 624c669541cSGedare Bloom FormatStyle::SIPO_Custom); 625c669541cSGedare Bloom Style.SpacesInParens = FormatStyle::SIPO_Never; 626c669541cSGedare Bloom Style.SpacesInParensOptions = {}; 627c669541cSGedare Bloom CHECK_PARSE("SpacesInParentheses: true", SpacesInParensOptions, 628c669541cSGedare Bloom FormatStyle::SpacesInParensCustom(true, false, false, true)); 629c669541cSGedare Bloom Style.SpacesInParens = FormatStyle::SIPO_Never; 630c669541cSGedare Bloom Style.SpacesInParensOptions = {}; 631c669541cSGedare Bloom CHECK_PARSE("SpacesInConditionalStatement: true", SpacesInParensOptions, 632c669541cSGedare Bloom FormatStyle::SpacesInParensCustom(true, false, false, false)); 633c669541cSGedare Bloom Style.SpacesInParens = FormatStyle::SIPO_Never; 634c669541cSGedare Bloom Style.SpacesInParensOptions = {}; 635c669541cSGedare Bloom CHECK_PARSE("SpacesInCStyleCastParentheses: true", SpacesInParensOptions, 636c669541cSGedare Bloom FormatStyle::SpacesInParensCustom(false, true, false, false)); 637c669541cSGedare Bloom Style.SpacesInParens = FormatStyle::SIPO_Never; 638c669541cSGedare Bloom Style.SpacesInParensOptions = {}; 639c669541cSGedare Bloom CHECK_PARSE("SpaceInEmptyParentheses: true", SpacesInParensOptions, 640c669541cSGedare Bloom FormatStyle::SpacesInParensCustom(false, false, true, false)); 641c669541cSGedare Bloom Style.SpacesInParens = FormatStyle::SIPO_Never; 642c669541cSGedare Bloom Style.SpacesInParensOptions = {}; 643c669541cSGedare Bloom 644617277e7SBjörn Schäpers Style.ColumnLimit = 123; 645617277e7SBjörn Schäpers FormatStyle BaseStyle = getLLVMStyle(); 646617277e7SBjörn Schäpers CHECK_PARSE("BasedOnStyle: LLVM", ColumnLimit, BaseStyle.ColumnLimit); 647617277e7SBjörn Schäpers CHECK_PARSE("BasedOnStyle: LLVM\nColumnLimit: 1234", ColumnLimit, 1234u); 648617277e7SBjörn Schäpers 649617277e7SBjörn Schäpers Style.BreakBeforeBraces = FormatStyle::BS_Stroustrup; 650617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Attach", BreakBeforeBraces, 651617277e7SBjörn Schäpers FormatStyle::BS_Attach); 652617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Linux", BreakBeforeBraces, 653617277e7SBjörn Schäpers FormatStyle::BS_Linux); 654617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Mozilla", BreakBeforeBraces, 655617277e7SBjörn Schäpers FormatStyle::BS_Mozilla); 656617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Stroustrup", BreakBeforeBraces, 657617277e7SBjörn Schäpers FormatStyle::BS_Stroustrup); 658617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Allman", BreakBeforeBraces, 659617277e7SBjörn Schäpers FormatStyle::BS_Allman); 660617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Whitesmiths", BreakBeforeBraces, 661617277e7SBjörn Schäpers FormatStyle::BS_Whitesmiths); 662617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: GNU", BreakBeforeBraces, FormatStyle::BS_GNU); 663617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: WebKit", BreakBeforeBraces, 664617277e7SBjörn Schäpers FormatStyle::BS_WebKit); 665617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeBraces: Custom", BreakBeforeBraces, 666617277e7SBjörn Schäpers FormatStyle::BS_Custom); 667617277e7SBjörn Schäpers 668617277e7SBjörn Schäpers Style.BraceWrapping.AfterControlStatement = FormatStyle::BWACS_Never; 669617277e7SBjörn Schäpers CHECK_PARSE("BraceWrapping:\n" 670617277e7SBjörn Schäpers " AfterControlStatement: MultiLine", 671617277e7SBjörn Schäpers BraceWrapping.AfterControlStatement, 672617277e7SBjörn Schäpers FormatStyle::BWACS_MultiLine); 673617277e7SBjörn Schäpers CHECK_PARSE("BraceWrapping:\n" 674617277e7SBjörn Schäpers " AfterControlStatement: Always", 675617277e7SBjörn Schäpers BraceWrapping.AfterControlStatement, FormatStyle::BWACS_Always); 676617277e7SBjörn Schäpers CHECK_PARSE("BraceWrapping:\n" 677617277e7SBjörn Schäpers " AfterControlStatement: Never", 678617277e7SBjörn Schäpers BraceWrapping.AfterControlStatement, FormatStyle::BWACS_Never); 679617277e7SBjörn Schäpers // For backward compatibility: 680617277e7SBjörn Schäpers CHECK_PARSE("BraceWrapping:\n" 681617277e7SBjörn Schäpers " AfterControlStatement: true", 682617277e7SBjörn Schäpers BraceWrapping.AfterControlStatement, FormatStyle::BWACS_Always); 683617277e7SBjörn Schäpers CHECK_PARSE("BraceWrapping:\n" 684617277e7SBjörn Schäpers " AfterControlStatement: false", 685617277e7SBjörn Schäpers BraceWrapping.AfterControlStatement, FormatStyle::BWACS_Never); 686617277e7SBjörn Schäpers 687617277e7SBjörn Schäpers Style.AlwaysBreakAfterReturnType = FormatStyle::RTBS_All; 688617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterReturnType: None", AlwaysBreakAfterReturnType, 689617277e7SBjörn Schäpers FormatStyle::RTBS_None); 690617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterReturnType: All", AlwaysBreakAfterReturnType, 691617277e7SBjörn Schäpers FormatStyle::RTBS_All); 692617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterReturnType: TopLevel", 693617277e7SBjörn Schäpers AlwaysBreakAfterReturnType, FormatStyle::RTBS_TopLevel); 694617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterReturnType: AllDefinitions", 695617277e7SBjörn Schäpers AlwaysBreakAfterReturnType, FormatStyle::RTBS_AllDefinitions); 696617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterReturnType: TopLevelDefinitions", 697617277e7SBjörn Schäpers AlwaysBreakAfterReturnType, 698617277e7SBjörn Schäpers FormatStyle::RTBS_TopLevelDefinitions); 699617277e7SBjörn Schäpers 700617277e7SBjörn Schäpers Style.AlwaysBreakTemplateDeclarations = FormatStyle::BTDS_Yes; 701617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakTemplateDeclarations: No", 702617277e7SBjörn Schäpers AlwaysBreakTemplateDeclarations, FormatStyle::BTDS_No); 703617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakTemplateDeclarations: MultiLine", 704617277e7SBjörn Schäpers AlwaysBreakTemplateDeclarations, FormatStyle::BTDS_MultiLine); 705617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakTemplateDeclarations: Yes", 706617277e7SBjörn Schäpers AlwaysBreakTemplateDeclarations, FormatStyle::BTDS_Yes); 707617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakTemplateDeclarations: false", 708617277e7SBjörn Schäpers AlwaysBreakTemplateDeclarations, FormatStyle::BTDS_MultiLine); 709617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakTemplateDeclarations: true", 710617277e7SBjörn Schäpers AlwaysBreakTemplateDeclarations, FormatStyle::BTDS_Yes); 711617277e7SBjörn Schäpers 712617277e7SBjörn Schäpers Style.AlwaysBreakAfterDefinitionReturnType = FormatStyle::DRTBS_All; 713617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterDefinitionReturnType: None", 714617277e7SBjörn Schäpers AlwaysBreakAfterDefinitionReturnType, FormatStyle::DRTBS_None); 715617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterDefinitionReturnType: All", 716617277e7SBjörn Schäpers AlwaysBreakAfterDefinitionReturnType, FormatStyle::DRTBS_All); 717617277e7SBjörn Schäpers CHECK_PARSE("AlwaysBreakAfterDefinitionReturnType: TopLevel", 718617277e7SBjörn Schäpers AlwaysBreakAfterDefinitionReturnType, 719617277e7SBjörn Schäpers FormatStyle::DRTBS_TopLevel); 720617277e7SBjörn Schäpers 721617277e7SBjörn Schäpers Style.NamespaceIndentation = FormatStyle::NI_All; 722617277e7SBjörn Schäpers CHECK_PARSE("NamespaceIndentation: None", NamespaceIndentation, 723617277e7SBjörn Schäpers FormatStyle::NI_None); 724617277e7SBjörn Schäpers CHECK_PARSE("NamespaceIndentation: Inner", NamespaceIndentation, 725617277e7SBjörn Schäpers FormatStyle::NI_Inner); 726617277e7SBjörn Schäpers CHECK_PARSE("NamespaceIndentation: All", NamespaceIndentation, 727617277e7SBjörn Schäpers FormatStyle::NI_All); 728617277e7SBjörn Schäpers 729617277e7SBjörn Schäpers Style.AllowShortIfStatementsOnASingleLine = FormatStyle::SIS_OnlyFirstIf; 730617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: Never", 731617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, FormatStyle::SIS_Never); 732617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: WithoutElse", 733617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, 734617277e7SBjörn Schäpers FormatStyle::SIS_WithoutElse); 735617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: OnlyFirstIf", 736617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, 737617277e7SBjörn Schäpers FormatStyle::SIS_OnlyFirstIf); 738617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: AllIfsAndElse", 739617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, 740617277e7SBjörn Schäpers FormatStyle::SIS_AllIfsAndElse); 741617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: Always", 742617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, 743617277e7SBjörn Schäpers FormatStyle::SIS_OnlyFirstIf); 744617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: false", 745617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, FormatStyle::SIS_Never); 746617277e7SBjörn Schäpers CHECK_PARSE("AllowShortIfStatementsOnASingleLine: true", 747617277e7SBjörn Schäpers AllowShortIfStatementsOnASingleLine, 748617277e7SBjörn Schäpers FormatStyle::SIS_WithoutElse); 749617277e7SBjörn Schäpers 750617277e7SBjörn Schäpers Style.IndentExternBlock = FormatStyle::IEBS_NoIndent; 751617277e7SBjörn Schäpers CHECK_PARSE("IndentExternBlock: AfterExternBlock", IndentExternBlock, 752617277e7SBjörn Schäpers FormatStyle::IEBS_AfterExternBlock); 753617277e7SBjörn Schäpers CHECK_PARSE("IndentExternBlock: Indent", IndentExternBlock, 754617277e7SBjörn Schäpers FormatStyle::IEBS_Indent); 755617277e7SBjörn Schäpers CHECK_PARSE("IndentExternBlock: NoIndent", IndentExternBlock, 756617277e7SBjörn Schäpers FormatStyle::IEBS_NoIndent); 757617277e7SBjörn Schäpers CHECK_PARSE("IndentExternBlock: true", IndentExternBlock, 758617277e7SBjörn Schäpers FormatStyle::IEBS_Indent); 759617277e7SBjörn Schäpers CHECK_PARSE("IndentExternBlock: false", IndentExternBlock, 760617277e7SBjörn Schäpers FormatStyle::IEBS_NoIndent); 761617277e7SBjörn Schäpers 762617277e7SBjörn Schäpers Style.BitFieldColonSpacing = FormatStyle::BFCS_None; 763617277e7SBjörn Schäpers CHECK_PARSE("BitFieldColonSpacing: Both", BitFieldColonSpacing, 764617277e7SBjörn Schäpers FormatStyle::BFCS_Both); 765617277e7SBjörn Schäpers CHECK_PARSE("BitFieldColonSpacing: None", BitFieldColonSpacing, 766617277e7SBjörn Schäpers FormatStyle::BFCS_None); 767617277e7SBjörn Schäpers CHECK_PARSE("BitFieldColonSpacing: Before", BitFieldColonSpacing, 768617277e7SBjörn Schäpers FormatStyle::BFCS_Before); 769617277e7SBjörn Schäpers CHECK_PARSE("BitFieldColonSpacing: After", BitFieldColonSpacing, 770617277e7SBjörn Schäpers FormatStyle::BFCS_After); 771617277e7SBjörn Schäpers 772617277e7SBjörn Schäpers Style.SortJavaStaticImport = FormatStyle::SJSIO_Before; 773617277e7SBjörn Schäpers CHECK_PARSE("SortJavaStaticImport: After", SortJavaStaticImport, 774617277e7SBjörn Schäpers FormatStyle::SJSIO_After); 775617277e7SBjörn Schäpers CHECK_PARSE("SortJavaStaticImport: Before", SortJavaStaticImport, 776617277e7SBjörn Schäpers FormatStyle::SJSIO_Before); 777617277e7SBjörn Schäpers 77858751f94SBackl1ght Style.SortUsingDeclarations = FormatStyle::SUD_LexicographicNumeric; 77958751f94SBackl1ght CHECK_PARSE("SortUsingDeclarations: Never", SortUsingDeclarations, 78058751f94SBackl1ght FormatStyle::SUD_Never); 78158751f94SBackl1ght CHECK_PARSE("SortUsingDeclarations: Lexicographic", SortUsingDeclarations, 78258751f94SBackl1ght FormatStyle::SUD_Lexicographic); 78358751f94SBackl1ght CHECK_PARSE("SortUsingDeclarations: LexicographicNumeric", 78458751f94SBackl1ght SortUsingDeclarations, FormatStyle::SUD_LexicographicNumeric); 78558751f94SBackl1ght // For backward compatibility: 78658751f94SBackl1ght CHECK_PARSE("SortUsingDeclarations: false", SortUsingDeclarations, 78758751f94SBackl1ght FormatStyle::SUD_Never); 78858751f94SBackl1ght CHECK_PARSE("SortUsingDeclarations: true", SortUsingDeclarations, 78958751f94SBackl1ght FormatStyle::SUD_LexicographicNumeric); 79058751f94SBackl1ght 791617277e7SBjörn Schäpers // FIXME: This is required because parsing a configuration simply overwrites 792617277e7SBjörn Schäpers // the first N elements of the list instead of resetting it. 793617277e7SBjörn Schäpers Style.ForEachMacros.clear(); 794617277e7SBjörn Schäpers std::vector<std::string> BoostForeach; 795617277e7SBjörn Schäpers BoostForeach.push_back("BOOST_FOREACH"); 796617277e7SBjörn Schäpers CHECK_PARSE("ForEachMacros: [BOOST_FOREACH]", ForEachMacros, BoostForeach); 797617277e7SBjörn Schäpers std::vector<std::string> BoostAndQForeach; 798617277e7SBjörn Schäpers BoostAndQForeach.push_back("BOOST_FOREACH"); 799617277e7SBjörn Schäpers BoostAndQForeach.push_back("Q_FOREACH"); 800617277e7SBjörn Schäpers CHECK_PARSE("ForEachMacros: [BOOST_FOREACH, Q_FOREACH]", ForEachMacros, 801617277e7SBjörn Schäpers BoostAndQForeach); 802617277e7SBjörn Schäpers 803617277e7SBjörn Schäpers Style.IfMacros.clear(); 804617277e7SBjörn Schäpers std::vector<std::string> CustomIfs; 805617277e7SBjörn Schäpers CustomIfs.push_back("MYIF"); 806617277e7SBjörn Schäpers CHECK_PARSE("IfMacros: [MYIF]", IfMacros, CustomIfs); 807617277e7SBjörn Schäpers 808617277e7SBjörn Schäpers Style.AttributeMacros.clear(); 809617277e7SBjörn Schäpers CHECK_PARSE("BasedOnStyle: LLVM", AttributeMacros, 810617277e7SBjörn Schäpers std::vector<std::string>{"__capability"}); 811617277e7SBjörn Schäpers CHECK_PARSE("AttributeMacros: [attr1, attr2]", AttributeMacros, 812617277e7SBjörn Schäpers std::vector<std::string>({"attr1", "attr2"})); 813617277e7SBjörn Schäpers 814617277e7SBjörn Schäpers Style.StatementAttributeLikeMacros.clear(); 815617277e7SBjörn Schäpers CHECK_PARSE("StatementAttributeLikeMacros: [emit,Q_EMIT]", 816617277e7SBjörn Schäpers StatementAttributeLikeMacros, 817617277e7SBjörn Schäpers std::vector<std::string>({"emit", "Q_EMIT"})); 818617277e7SBjörn Schäpers 819617277e7SBjörn Schäpers Style.StatementMacros.clear(); 820617277e7SBjörn Schäpers CHECK_PARSE("StatementMacros: [QUNUSED]", StatementMacros, 821617277e7SBjörn Schäpers std::vector<std::string>{"QUNUSED"}); 822617277e7SBjörn Schäpers CHECK_PARSE("StatementMacros: [QUNUSED, QT_REQUIRE_VERSION]", StatementMacros, 823617277e7SBjörn Schäpers std::vector<std::string>({"QUNUSED", "QT_REQUIRE_VERSION"})); 824617277e7SBjörn Schäpers 825617277e7SBjörn Schäpers Style.NamespaceMacros.clear(); 826617277e7SBjörn Schäpers CHECK_PARSE("NamespaceMacros: [TESTSUITE]", NamespaceMacros, 827617277e7SBjörn Schäpers std::vector<std::string>{"TESTSUITE"}); 828617277e7SBjörn Schäpers CHECK_PARSE("NamespaceMacros: [TESTSUITE, SUITE]", NamespaceMacros, 829617277e7SBjörn Schäpers std::vector<std::string>({"TESTSUITE", "SUITE"})); 830617277e7SBjörn Schäpers 831617277e7SBjörn Schäpers Style.WhitespaceSensitiveMacros.clear(); 832617277e7SBjörn Schäpers CHECK_PARSE("WhitespaceSensitiveMacros: [STRINGIZE]", 833617277e7SBjörn Schäpers WhitespaceSensitiveMacros, std::vector<std::string>{"STRINGIZE"}); 834617277e7SBjörn Schäpers CHECK_PARSE("WhitespaceSensitiveMacros: [STRINGIZE, ASSERT]", 835617277e7SBjörn Schäpers WhitespaceSensitiveMacros, 836617277e7SBjörn Schäpers std::vector<std::string>({"STRINGIZE", "ASSERT"})); 837617277e7SBjörn Schäpers Style.WhitespaceSensitiveMacros.clear(); 838617277e7SBjörn Schäpers CHECK_PARSE("WhitespaceSensitiveMacros: ['STRINGIZE']", 839617277e7SBjörn Schäpers WhitespaceSensitiveMacros, std::vector<std::string>{"STRINGIZE"}); 840617277e7SBjörn Schäpers CHECK_PARSE("WhitespaceSensitiveMacros: ['STRINGIZE', 'ASSERT']", 841617277e7SBjörn Schäpers WhitespaceSensitiveMacros, 842617277e7SBjörn Schäpers std::vector<std::string>({"STRINGIZE", "ASSERT"})); 843617277e7SBjörn Schäpers 844617277e7SBjörn Schäpers Style.IncludeStyle.IncludeCategories.clear(); 845617277e7SBjörn Schäpers std::vector<tooling::IncludeStyle::IncludeCategory> ExpectedCategories = { 846617277e7SBjörn Schäpers {"abc/.*", 2, 0, false}, {".*", 1, 0, true}}; 847617277e7SBjörn Schäpers CHECK_PARSE("IncludeCategories:\n" 848617277e7SBjörn Schäpers " - Regex: abc/.*\n" 849617277e7SBjörn Schäpers " Priority: 2\n" 850617277e7SBjörn Schäpers " - Regex: .*\n" 851617277e7SBjörn Schäpers " Priority: 1\n" 852*88934a82SOwen Pan " CaseSensitive: true", 853617277e7SBjörn Schäpers IncludeStyle.IncludeCategories, ExpectedCategories); 854617277e7SBjörn Schäpers CHECK_PARSE("IncludeIsMainRegex: 'abc$'", IncludeStyle.IncludeIsMainRegex, 855617277e7SBjörn Schäpers "abc$"); 856617277e7SBjörn Schäpers CHECK_PARSE("IncludeIsMainSourceRegex: 'abc$'", 857617277e7SBjörn Schäpers IncludeStyle.IncludeIsMainSourceRegex, "abc$"); 858617277e7SBjörn Schäpers 859617277e7SBjörn Schäpers Style.SortIncludes = FormatStyle::SI_Never; 860617277e7SBjörn Schäpers CHECK_PARSE("SortIncludes: true", SortIncludes, 861617277e7SBjörn Schäpers FormatStyle::SI_CaseSensitive); 862617277e7SBjörn Schäpers CHECK_PARSE("SortIncludes: false", SortIncludes, FormatStyle::SI_Never); 863617277e7SBjörn Schäpers CHECK_PARSE("SortIncludes: CaseInsensitive", SortIncludes, 864617277e7SBjörn Schäpers FormatStyle::SI_CaseInsensitive); 865617277e7SBjörn Schäpers CHECK_PARSE("SortIncludes: CaseSensitive", SortIncludes, 866617277e7SBjörn Schäpers FormatStyle::SI_CaseSensitive); 867617277e7SBjörn Schäpers CHECK_PARSE("SortIncludes: Never", SortIncludes, FormatStyle::SI_Never); 868617277e7SBjörn Schäpers 869617277e7SBjörn Schäpers Style.RawStringFormats.clear(); 870617277e7SBjörn Schäpers std::vector<FormatStyle::RawStringFormat> ExpectedRawStringFormats = { 871617277e7SBjörn Schäpers { 872617277e7SBjörn Schäpers FormatStyle::LK_TextProto, 873617277e7SBjörn Schäpers {"pb", "proto"}, 874617277e7SBjörn Schäpers {"PARSE_TEXT_PROTO"}, 875617277e7SBjörn Schäpers /*CanonicalDelimiter=*/"", 876617277e7SBjörn Schäpers "llvm", 877617277e7SBjörn Schäpers }, 878617277e7SBjörn Schäpers { 879617277e7SBjörn Schäpers FormatStyle::LK_Cpp, 880617277e7SBjörn Schäpers {"cc", "cpp"}, 881617277e7SBjörn Schäpers {"C_CODEBLOCK", "CPPEVAL"}, 882617277e7SBjörn Schäpers /*CanonicalDelimiter=*/"cc", 883617277e7SBjörn Schäpers /*BasedOnStyle=*/"", 884617277e7SBjörn Schäpers }, 885617277e7SBjörn Schäpers }; 886617277e7SBjörn Schäpers 887617277e7SBjörn Schäpers CHECK_PARSE("RawStringFormats:\n" 888617277e7SBjörn Schäpers " - Language: TextProto\n" 889617277e7SBjörn Schäpers " Delimiters:\n" 890617277e7SBjörn Schäpers " - 'pb'\n" 891617277e7SBjörn Schäpers " - 'proto'\n" 892617277e7SBjörn Schäpers " EnclosingFunctions:\n" 893617277e7SBjörn Schäpers " - 'PARSE_TEXT_PROTO'\n" 894617277e7SBjörn Schäpers " BasedOnStyle: llvm\n" 895617277e7SBjörn Schäpers " - Language: Cpp\n" 896617277e7SBjörn Schäpers " Delimiters:\n" 897617277e7SBjörn Schäpers " - 'cc'\n" 898617277e7SBjörn Schäpers " - 'cpp'\n" 899617277e7SBjörn Schäpers " EnclosingFunctions:\n" 900617277e7SBjörn Schäpers " - 'C_CODEBLOCK'\n" 901617277e7SBjörn Schäpers " - 'CPPEVAL'\n" 902617277e7SBjörn Schäpers " CanonicalDelimiter: 'cc'", 903617277e7SBjörn Schäpers RawStringFormats, ExpectedRawStringFormats); 904617277e7SBjörn Schäpers 905617277e7SBjörn Schäpers CHECK_PARSE("SpacesInLineCommentPrefix:\n" 906617277e7SBjörn Schäpers " Minimum: 0\n" 907617277e7SBjörn Schäpers " Maximum: 0", 908617277e7SBjörn Schäpers SpacesInLineCommentPrefix.Minimum, 0u); 909617277e7SBjörn Schäpers EXPECT_EQ(Style.SpacesInLineCommentPrefix.Maximum, 0u); 910617277e7SBjörn Schäpers Style.SpacesInLineCommentPrefix.Minimum = 1; 911617277e7SBjörn Schäpers CHECK_PARSE("SpacesInLineCommentPrefix:\n" 912617277e7SBjörn Schäpers " Minimum: 2", 913617277e7SBjörn Schäpers SpacesInLineCommentPrefix.Minimum, 0u); 914617277e7SBjörn Schäpers CHECK_PARSE("SpacesInLineCommentPrefix:\n" 915617277e7SBjörn Schäpers " Maximum: -1", 916617277e7SBjörn Schäpers SpacesInLineCommentPrefix.Maximum, -1u); 917617277e7SBjörn Schäpers CHECK_PARSE("SpacesInLineCommentPrefix:\n" 918617277e7SBjörn Schäpers " Minimum: 2", 919617277e7SBjörn Schäpers SpacesInLineCommentPrefix.Minimum, 2u); 920617277e7SBjörn Schäpers CHECK_PARSE("SpacesInLineCommentPrefix:\n" 921617277e7SBjörn Schäpers " Maximum: 1", 922617277e7SBjörn Schäpers SpacesInLineCommentPrefix.Maximum, 1u); 923617277e7SBjörn Schäpers EXPECT_EQ(Style.SpacesInLineCommentPrefix.Minimum, 1u); 924617277e7SBjörn Schäpers 925617277e7SBjörn Schäpers Style.SpacesInAngles = FormatStyle::SIAS_Always; 926617277e7SBjörn Schäpers CHECK_PARSE("SpacesInAngles: Never", SpacesInAngles, FormatStyle::SIAS_Never); 927617277e7SBjörn Schäpers CHECK_PARSE("SpacesInAngles: Always", SpacesInAngles, 928617277e7SBjörn Schäpers FormatStyle::SIAS_Always); 929617277e7SBjörn Schäpers CHECK_PARSE("SpacesInAngles: Leave", SpacesInAngles, FormatStyle::SIAS_Leave); 930617277e7SBjörn Schäpers // For backward compatibility: 931617277e7SBjörn Schäpers CHECK_PARSE("SpacesInAngles: false", SpacesInAngles, FormatStyle::SIAS_Never); 932617277e7SBjörn Schäpers CHECK_PARSE("SpacesInAngles: true", SpacesInAngles, FormatStyle::SIAS_Always); 933617277e7SBjörn Schäpers 934617277e7SBjörn Schäpers CHECK_PARSE("RequiresClausePosition: WithPreceding", RequiresClausePosition, 935617277e7SBjörn Schäpers FormatStyle::RCPS_WithPreceding); 936617277e7SBjörn Schäpers CHECK_PARSE("RequiresClausePosition: WithFollowing", RequiresClausePosition, 937617277e7SBjörn Schäpers FormatStyle::RCPS_WithFollowing); 938617277e7SBjörn Schäpers CHECK_PARSE("RequiresClausePosition: SingleLine", RequiresClausePosition, 939617277e7SBjörn Schäpers FormatStyle::RCPS_SingleLine); 940617277e7SBjörn Schäpers CHECK_PARSE("RequiresClausePosition: OwnLine", RequiresClausePosition, 941617277e7SBjörn Schäpers FormatStyle::RCPS_OwnLine); 942617277e7SBjörn Schäpers 943617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeConceptDeclarations: Never", 944617277e7SBjörn Schäpers BreakBeforeConceptDeclarations, FormatStyle::BBCDS_Never); 945617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeConceptDeclarations: Always", 946617277e7SBjörn Schäpers BreakBeforeConceptDeclarations, FormatStyle::BBCDS_Always); 947617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeConceptDeclarations: Allowed", 948617277e7SBjörn Schäpers BreakBeforeConceptDeclarations, FormatStyle::BBCDS_Allowed); 949617277e7SBjörn Schäpers // For backward compatibility: 950617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeConceptDeclarations: true", 951617277e7SBjörn Schäpers BreakBeforeConceptDeclarations, FormatStyle::BBCDS_Always); 952617277e7SBjörn Schäpers CHECK_PARSE("BreakBeforeConceptDeclarations: false", 953617277e7SBjörn Schäpers BreakBeforeConceptDeclarations, FormatStyle::BBCDS_Allowed); 954922c8891SKrasimir Georgiev 955922c8891SKrasimir Georgiev CHECK_PARSE("BreakAfterAttributes: Always", BreakAfterAttributes, 956922c8891SKrasimir Georgiev FormatStyle::ABS_Always); 957922c8891SKrasimir Georgiev CHECK_PARSE("BreakAfterAttributes: Leave", BreakAfterAttributes, 958922c8891SKrasimir Georgiev FormatStyle::ABS_Leave); 959922c8891SKrasimir Georgiev CHECK_PARSE("BreakAfterAttributes: Never", BreakAfterAttributes, 960922c8891SKrasimir Georgiev FormatStyle::ABS_Never); 961e3eca335SOwen Pan 962e3eca335SOwen Pan const auto DefaultLineEnding = FormatStyle::LE_DeriveLF; 963e3eca335SOwen Pan CHECK_PARSE("LineEnding: LF", LineEnding, FormatStyle::LE_LF); 964e3eca335SOwen Pan CHECK_PARSE("LineEnding: CRLF", LineEnding, FormatStyle::LE_CRLF); 965e3eca335SOwen Pan CHECK_PARSE("LineEnding: DeriveCRLF", LineEnding, FormatStyle::LE_DeriveCRLF); 966e3eca335SOwen Pan CHECK_PARSE("LineEnding: DeriveLF", LineEnding, DefaultLineEnding); 967e3eca335SOwen Pan // For backward compatibility: 968e3eca335SOwen Pan CHECK_PARSE("DeriveLineEnding: false", LineEnding, FormatStyle::LE_LF); 969e3eca335SOwen Pan Style.LineEnding = DefaultLineEnding; 970e3eca335SOwen Pan CHECK_PARSE("DeriveLineEnding: false\n" 971e3eca335SOwen Pan "UseCRLF: true", 972e3eca335SOwen Pan LineEnding, FormatStyle::LE_CRLF); 973e3eca335SOwen Pan Style.LineEnding = DefaultLineEnding; 974e3eca335SOwen Pan CHECK_PARSE("UseCRLF: true", LineEnding, FormatStyle::LE_DeriveCRLF); 9753a6a0702SOwen Pan 9763a6a0702SOwen Pan CHECK_PARSE("RemoveParentheses: MultipleParentheses", RemoveParentheses, 9773a6a0702SOwen Pan FormatStyle::RPS_MultipleParentheses); 9783a6a0702SOwen Pan CHECK_PARSE("RemoveParentheses: ReturnStatement", RemoveParentheses, 9793a6a0702SOwen Pan FormatStyle::RPS_ReturnStatement); 9803a6a0702SOwen Pan CHECK_PARSE("RemoveParentheses: Leave", RemoveParentheses, 9813a6a0702SOwen Pan FormatStyle::RPS_Leave); 98284e3fdfcSBjörn Schäpers 98384e3fdfcSBjörn Schäpers CHECK_PARSE("AllowBreakBeforeNoexceptSpecifier: Always", 98484e3fdfcSBjörn Schäpers AllowBreakBeforeNoexceptSpecifier, FormatStyle::BBNSS_Always); 98584e3fdfcSBjörn Schäpers CHECK_PARSE("AllowBreakBeforeNoexceptSpecifier: OnlyWithParen", 98684e3fdfcSBjörn Schäpers AllowBreakBeforeNoexceptSpecifier, 98784e3fdfcSBjörn Schäpers FormatStyle::BBNSS_OnlyWithParen); 98884e3fdfcSBjörn Schäpers CHECK_PARSE("AllowBreakBeforeNoexceptSpecifier: Never", 98984e3fdfcSBjörn Schäpers AllowBreakBeforeNoexceptSpecifier, FormatStyle::BBNSS_Never); 990617277e7SBjörn Schäpers } 991617277e7SBjörn Schäpers 992617277e7SBjörn Schäpers TEST(ConfigParseTest, ParsesConfigurationWithLanguages) { 993617277e7SBjörn Schäpers FormatStyle Style = {}; 994617277e7SBjörn Schäpers Style.Language = FormatStyle::LK_Cpp; 995617277e7SBjörn Schäpers CHECK_PARSE("Language: Cpp\n" 996617277e7SBjörn Schäpers "IndentWidth: 12", 997617277e7SBjörn Schäpers IndentWidth, 12u); 998617277e7SBjörn Schäpers EXPECT_EQ(parseConfiguration("Language: JavaScript\n" 999617277e7SBjörn Schäpers "IndentWidth: 34", 1000617277e7SBjörn Schäpers &Style), 1001617277e7SBjörn Schäpers ParseError::Unsuitable); 1002617277e7SBjörn Schäpers FormatStyle BinPackedTCS = {}; 1003617277e7SBjörn Schäpers BinPackedTCS.Language = FormatStyle::LK_JavaScript; 1004617277e7SBjörn Schäpers EXPECT_EQ(parseConfiguration("BinPackArguments: true\n" 1005617277e7SBjörn Schäpers "InsertTrailingCommas: Wrapped", 1006617277e7SBjörn Schäpers &BinPackedTCS), 1007617277e7SBjörn Schäpers ParseError::BinPackTrailingCommaConflict); 1008617277e7SBjörn Schäpers EXPECT_EQ(12u, Style.IndentWidth); 1009617277e7SBjörn Schäpers CHECK_PARSE("IndentWidth: 56", IndentWidth, 56u); 1010617277e7SBjörn Schäpers EXPECT_EQ(FormatStyle::LK_Cpp, Style.Language); 1011617277e7SBjörn Schäpers 1012617277e7SBjörn Schäpers Style.Language = FormatStyle::LK_JavaScript; 1013617277e7SBjörn Schäpers CHECK_PARSE("Language: JavaScript\n" 1014617277e7SBjörn Schäpers "IndentWidth: 12", 1015617277e7SBjörn Schäpers IndentWidth, 12u); 1016617277e7SBjörn Schäpers CHECK_PARSE("IndentWidth: 23", IndentWidth, 23u); 1017617277e7SBjörn Schäpers EXPECT_EQ(parseConfiguration("Language: Cpp\n" 1018617277e7SBjörn Schäpers "IndentWidth: 34", 1019617277e7SBjörn Schäpers &Style), 1020617277e7SBjörn Schäpers ParseError::Unsuitable); 1021617277e7SBjörn Schäpers EXPECT_EQ(23u, Style.IndentWidth); 1022617277e7SBjörn Schäpers CHECK_PARSE("IndentWidth: 56", IndentWidth, 56u); 1023617277e7SBjörn Schäpers EXPECT_EQ(FormatStyle::LK_JavaScript, Style.Language); 1024617277e7SBjörn Schäpers 1025617277e7SBjörn Schäpers CHECK_PARSE("BasedOnStyle: LLVM\n" 1026617277e7SBjörn Schäpers "IndentWidth: 67", 1027617277e7SBjörn Schäpers IndentWidth, 67u); 1028617277e7SBjörn Schäpers 1029617277e7SBjörn Schäpers CHECK_PARSE("---\n" 1030617277e7SBjörn Schäpers "Language: JavaScript\n" 1031617277e7SBjörn Schäpers "IndentWidth: 12\n" 1032617277e7SBjörn Schäpers "---\n" 1033617277e7SBjörn Schäpers "Language: Cpp\n" 1034617277e7SBjörn Schäpers "IndentWidth: 34\n" 1035617277e7SBjörn Schäpers "...\n", 1036617277e7SBjörn Schäpers IndentWidth, 12u); 1037617277e7SBjörn Schäpers 1038617277e7SBjörn Schäpers Style.Language = FormatStyle::LK_Cpp; 1039617277e7SBjörn Schäpers CHECK_PARSE("---\n" 1040617277e7SBjörn Schäpers "Language: JavaScript\n" 1041617277e7SBjörn Schäpers "IndentWidth: 12\n" 1042617277e7SBjörn Schäpers "---\n" 1043617277e7SBjörn Schäpers "Language: Cpp\n" 1044617277e7SBjörn Schäpers "IndentWidth: 34\n" 1045617277e7SBjörn Schäpers "...\n", 1046617277e7SBjörn Schäpers IndentWidth, 34u); 1047617277e7SBjörn Schäpers CHECK_PARSE("---\n" 1048617277e7SBjörn Schäpers "IndentWidth: 78\n" 1049617277e7SBjörn Schäpers "---\n" 1050617277e7SBjörn Schäpers "Language: JavaScript\n" 1051617277e7SBjörn Schäpers "IndentWidth: 56\n" 1052617277e7SBjörn Schäpers "...\n", 1053617277e7SBjörn Schäpers IndentWidth, 78u); 1054617277e7SBjörn Schäpers 1055617277e7SBjörn Schäpers Style.ColumnLimit = 123; 1056617277e7SBjörn Schäpers Style.IndentWidth = 234; 1057617277e7SBjörn Schäpers Style.BreakBeforeBraces = FormatStyle::BS_Linux; 1058617277e7SBjörn Schäpers Style.TabWidth = 345; 1059617277e7SBjörn Schäpers EXPECT_FALSE(parseConfiguration("---\n" 1060617277e7SBjörn Schäpers "IndentWidth: 456\n" 1061617277e7SBjörn Schäpers "BreakBeforeBraces: Allman\n" 1062617277e7SBjörn Schäpers "---\n" 1063617277e7SBjörn Schäpers "Language: JavaScript\n" 1064617277e7SBjörn Schäpers "IndentWidth: 111\n" 1065617277e7SBjörn Schäpers "TabWidth: 111\n" 1066617277e7SBjörn Schäpers "---\n" 1067617277e7SBjörn Schäpers "Language: Cpp\n" 1068617277e7SBjörn Schäpers "BreakBeforeBraces: Stroustrup\n" 1069617277e7SBjörn Schäpers "TabWidth: 789\n" 1070617277e7SBjörn Schäpers "...\n", 1071617277e7SBjörn Schäpers &Style)); 1072617277e7SBjörn Schäpers EXPECT_EQ(123u, Style.ColumnLimit); 1073617277e7SBjörn Schäpers EXPECT_EQ(456u, Style.IndentWidth); 1074617277e7SBjörn Schäpers EXPECT_EQ(FormatStyle::BS_Stroustrup, Style.BreakBeforeBraces); 1075617277e7SBjörn Schäpers EXPECT_EQ(789u, Style.TabWidth); 1076617277e7SBjörn Schäpers 1077617277e7SBjörn Schäpers EXPECT_EQ(parseConfiguration("---\n" 1078617277e7SBjörn Schäpers "Language: JavaScript\n" 1079617277e7SBjörn Schäpers "IndentWidth: 56\n" 1080617277e7SBjörn Schäpers "---\n" 1081617277e7SBjörn Schäpers "IndentWidth: 78\n" 1082617277e7SBjörn Schäpers "...\n", 1083617277e7SBjörn Schäpers &Style), 1084617277e7SBjörn Schäpers ParseError::Error); 1085617277e7SBjörn Schäpers EXPECT_EQ(parseConfiguration("---\n" 1086617277e7SBjörn Schäpers "Language: JavaScript\n" 1087617277e7SBjörn Schäpers "IndentWidth: 56\n" 1088617277e7SBjörn Schäpers "---\n" 1089617277e7SBjörn Schäpers "Language: JavaScript\n" 1090617277e7SBjörn Schäpers "IndentWidth: 78\n" 1091617277e7SBjörn Schäpers "...\n", 1092617277e7SBjörn Schäpers &Style), 1093617277e7SBjörn Schäpers ParseError::Error); 1094617277e7SBjörn Schäpers 1095617277e7SBjörn Schäpers EXPECT_EQ(FormatStyle::LK_Cpp, Style.Language); 109624231df9Ssstwcw 109724231df9Ssstwcw Style.Language = FormatStyle::LK_Verilog; 109824231df9Ssstwcw CHECK_PARSE("---\n" 109924231df9Ssstwcw "Language: Verilog\n" 110024231df9Ssstwcw "IndentWidth: 12\n" 110124231df9Ssstwcw "---\n" 110224231df9Ssstwcw "Language: Cpp\n" 110324231df9Ssstwcw "IndentWidth: 34\n" 110424231df9Ssstwcw "...\n", 110524231df9Ssstwcw IndentWidth, 12u); 110624231df9Ssstwcw CHECK_PARSE("---\n" 110724231df9Ssstwcw "IndentWidth: 78\n" 110824231df9Ssstwcw "---\n" 110924231df9Ssstwcw "Language: Verilog\n" 111024231df9Ssstwcw "IndentWidth: 56\n" 111124231df9Ssstwcw "...\n", 111224231df9Ssstwcw IndentWidth, 56u); 1113617277e7SBjörn Schäpers } 1114617277e7SBjörn Schäpers 1115617277e7SBjörn Schäpers TEST(ConfigParseTest, UsesLanguageForBasedOnStyle) { 1116617277e7SBjörn Schäpers FormatStyle Style = {}; 1117617277e7SBjörn Schäpers Style.Language = FormatStyle::LK_JavaScript; 1118617277e7SBjörn Schäpers Style.BreakBeforeTernaryOperators = true; 1119617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("BasedOnStyle: Google", &Style).value()); 1120617277e7SBjörn Schäpers EXPECT_FALSE(Style.BreakBeforeTernaryOperators); 1121617277e7SBjörn Schäpers 1122617277e7SBjörn Schäpers Style.BreakBeforeTernaryOperators = true; 1123617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration("---\n" 1124617277e7SBjörn Schäpers "BasedOnStyle: Google\n" 1125617277e7SBjörn Schäpers "---\n" 1126617277e7SBjörn Schäpers "Language: JavaScript\n" 1127617277e7SBjörn Schäpers "IndentWidth: 76\n" 1128617277e7SBjörn Schäpers "...\n", 1129617277e7SBjörn Schäpers &Style) 1130617277e7SBjörn Schäpers .value()); 1131617277e7SBjörn Schäpers EXPECT_FALSE(Style.BreakBeforeTernaryOperators); 1132617277e7SBjörn Schäpers EXPECT_EQ(76u, Style.IndentWidth); 1133617277e7SBjörn Schäpers EXPECT_EQ(FormatStyle::LK_JavaScript, Style.Language); 1134617277e7SBjörn Schäpers } 1135617277e7SBjörn Schäpers 1136617277e7SBjörn Schäpers TEST(ConfigParseTest, ConfigurationRoundTripTest) { 1137617277e7SBjörn Schäpers FormatStyle Style = getLLVMStyle(); 1138617277e7SBjörn Schäpers std::string YAML = configurationAsText(Style); 1139617277e7SBjörn Schäpers FormatStyle ParsedStyle = {}; 1140617277e7SBjörn Schäpers ParsedStyle.Language = FormatStyle::LK_Cpp; 1141617277e7SBjörn Schäpers EXPECT_EQ(0, parseConfiguration(YAML, &ParsedStyle).value()); 1142617277e7SBjörn Schäpers EXPECT_EQ(Style, ParsedStyle); 1143617277e7SBjörn Schäpers } 1144617277e7SBjörn Schäpers 1145617277e7SBjörn Schäpers TEST(ConfigParseTest, GetStyleWithEmptyFileName) { 1146617277e7SBjörn Schäpers llvm::vfs::InMemoryFileSystem FS; 1147617277e7SBjörn Schäpers auto Style1 = getStyle("file", "", "Google", "", &FS); 1148617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style1); 1149617277e7SBjörn Schäpers ASSERT_EQ(*Style1, getGoogleStyle()); 1150617277e7SBjörn Schäpers } 1151617277e7SBjörn Schäpers 1152617277e7SBjörn Schäpers TEST(ConfigParseTest, GetStyleOfFile) { 1153617277e7SBjörn Schäpers llvm::vfs::InMemoryFileSystem FS; 1154617277e7SBjörn Schäpers // Test 1: format file in the same directory. 1155617277e7SBjörn Schäpers ASSERT_TRUE( 1156617277e7SBjörn Schäpers FS.addFile("/a/.clang-format", 0, 1157617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: LLVM"))); 1158617277e7SBjörn Schäpers ASSERT_TRUE( 1159617277e7SBjörn Schäpers FS.addFile("/a/test.cpp", 0, llvm::MemoryBuffer::getMemBuffer("int i;"))); 1160617277e7SBjörn Schäpers auto Style1 = getStyle("file", "/a/.clang-format", "Google", "", &FS); 1161617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style1); 1162617277e7SBjörn Schäpers ASSERT_EQ(*Style1, getLLVMStyle()); 1163617277e7SBjörn Schäpers 1164617277e7SBjörn Schäpers // Test 2.1: fallback to default. 1165617277e7SBjörn Schäpers ASSERT_TRUE( 1166617277e7SBjörn Schäpers FS.addFile("/b/test.cpp", 0, llvm::MemoryBuffer::getMemBuffer("int i;"))); 1167617277e7SBjörn Schäpers auto Style2 = getStyle("file", "/b/test.cpp", "Mozilla", "", &FS); 1168617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style2); 1169617277e7SBjörn Schäpers ASSERT_EQ(*Style2, getMozillaStyle()); 1170617277e7SBjörn Schäpers 1171617277e7SBjörn Schäpers // Test 2.2: no format on 'none' fallback style. 1172617277e7SBjörn Schäpers Style2 = getStyle("file", "/b/test.cpp", "none", "", &FS); 1173617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style2); 1174617277e7SBjörn Schäpers ASSERT_EQ(*Style2, getNoStyle()); 1175617277e7SBjörn Schäpers 1176617277e7SBjörn Schäpers // Test 2.3: format if config is found with no based style while fallback is 1177617277e7SBjörn Schäpers // 'none'. 1178617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/b/.clang-format", 0, 1179617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("IndentWidth: 2"))); 1180617277e7SBjörn Schäpers Style2 = getStyle("file", "/b/test.cpp", "none", "", &FS); 1181617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style2); 1182617277e7SBjörn Schäpers ASSERT_EQ(*Style2, getLLVMStyle()); 1183617277e7SBjörn Schäpers 1184617277e7SBjörn Schäpers // Test 2.4: format if yaml with no based style, while fallback is 'none'. 1185617277e7SBjörn Schäpers Style2 = getStyle("{}", "a.h", "none", "", &FS); 1186617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style2); 1187617277e7SBjörn Schäpers ASSERT_EQ(*Style2, getLLVMStyle()); 1188617277e7SBjörn Schäpers 1189617277e7SBjörn Schäpers // Test 3: format file in parent directory. 1190617277e7SBjörn Schäpers ASSERT_TRUE( 1191617277e7SBjörn Schäpers FS.addFile("/c/.clang-format", 0, 1192617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: Google"))); 1193617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/c/sub/sub/sub/test.cpp", 0, 1194617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("int i;"))); 1195617277e7SBjörn Schäpers auto Style3 = getStyle("file", "/c/sub/sub/sub/test.cpp", "LLVM", "", &FS); 1196617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style3); 1197617277e7SBjörn Schäpers ASSERT_EQ(*Style3, getGoogleStyle()); 1198617277e7SBjörn Schäpers 1199617277e7SBjörn Schäpers // Test 4: error on invalid fallback style 1200617277e7SBjörn Schäpers auto Style4 = getStyle("file", "a.h", "KungFu", "", &FS); 1201617277e7SBjörn Schäpers ASSERT_FALSE((bool)Style4); 1202617277e7SBjörn Schäpers llvm::consumeError(Style4.takeError()); 1203617277e7SBjörn Schäpers 1204617277e7SBjörn Schäpers // Test 5: error on invalid yaml on command line 1205617277e7SBjörn Schäpers auto Style5 = getStyle("{invalid_key=invalid_value}", "a.h", "LLVM", "", &FS); 1206617277e7SBjörn Schäpers ASSERT_FALSE((bool)Style5); 1207617277e7SBjörn Schäpers llvm::consumeError(Style5.takeError()); 1208617277e7SBjörn Schäpers 1209617277e7SBjörn Schäpers // Test 6: error on invalid style 1210617277e7SBjörn Schäpers auto Style6 = getStyle("KungFu", "a.h", "LLVM", "", &FS); 1211617277e7SBjörn Schäpers ASSERT_FALSE((bool)Style6); 1212617277e7SBjörn Schäpers llvm::consumeError(Style6.takeError()); 1213617277e7SBjörn Schäpers 1214617277e7SBjörn Schäpers // Test 7: found config file, error on parsing it 1215617277e7SBjörn Schäpers ASSERT_TRUE( 1216617277e7SBjörn Schäpers FS.addFile("/d/.clang-format", 0, 1217617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: LLVM\n" 1218617277e7SBjörn Schäpers "InvalidKey: InvalidValue"))); 1219617277e7SBjörn Schäpers ASSERT_TRUE( 1220617277e7SBjörn Schäpers FS.addFile("/d/test.cpp", 0, llvm::MemoryBuffer::getMemBuffer("int i;"))); 1221617277e7SBjörn Schäpers auto Style7a = getStyle("file", "/d/.clang-format", "LLVM", "", &FS); 1222617277e7SBjörn Schäpers ASSERT_FALSE((bool)Style7a); 1223617277e7SBjörn Schäpers llvm::consumeError(Style7a.takeError()); 1224617277e7SBjörn Schäpers 1225617277e7SBjörn Schäpers auto Style7b = getStyle("file", "/d/.clang-format", "LLVM", "", &FS, true); 1226617277e7SBjörn Schäpers ASSERT_TRUE((bool)Style7b); 1227617277e7SBjörn Schäpers 1228617277e7SBjörn Schäpers // Test 8: inferred per-language defaults apply. 1229617277e7SBjörn Schäpers auto StyleTd = getStyle("file", "x.td", "llvm", "", &FS); 1230617277e7SBjörn Schäpers ASSERT_TRUE((bool)StyleTd); 1231617277e7SBjörn Schäpers ASSERT_EQ(*StyleTd, getLLVMStyle(FormatStyle::LK_TableGen)); 1232617277e7SBjörn Schäpers 1233617277e7SBjörn Schäpers // Test 9.1.1: overwriting a file style, when no parent file exists with no 1234617277e7SBjörn Schäpers // fallback style. 1235617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile( 1236617277e7SBjörn Schäpers "/e/sub/.clang-format", 0, 1237617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: InheritParentConfig\n" 1238617277e7SBjörn Schäpers "ColumnLimit: 20"))); 1239617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/e/sub/code.cpp", 0, 1240617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("int i;"))); 1241617277e7SBjörn Schäpers auto Style9 = getStyle("file", "/e/sub/code.cpp", "none", "", &FS); 1242617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1243617277e7SBjörn Schäpers ASSERT_EQ(*Style9, [] { 1244617277e7SBjörn Schäpers auto Style = getNoStyle(); 1245617277e7SBjörn Schäpers Style.ColumnLimit = 20; 1246617277e7SBjörn Schäpers return Style; 1247617277e7SBjörn Schäpers }()); 1248617277e7SBjörn Schäpers 1249617277e7SBjörn Schäpers // Test 9.1.2: propagate more than one level with no parent file. 1250617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/e/sub/sub/code.cpp", 0, 1251617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("int i;"))); 1252617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/e/sub/sub/.clang-format", 0, 1253617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer( 1254617277e7SBjörn Schäpers "BasedOnStyle: InheritParentConfig\n" 1255617277e7SBjörn Schäpers "WhitespaceSensitiveMacros: ['FOO', 'BAR']"))); 1256617277e7SBjörn Schäpers std::vector<std::string> NonDefaultWhiteSpaceMacros = 1257617277e7SBjörn Schäpers Style9->WhitespaceSensitiveMacros; 1258617277e7SBjörn Schäpers NonDefaultWhiteSpaceMacros[0] = "FOO"; 1259617277e7SBjörn Schäpers NonDefaultWhiteSpaceMacros[1] = "BAR"; 1260617277e7SBjörn Schäpers 1261617277e7SBjörn Schäpers ASSERT_NE(Style9->WhitespaceSensitiveMacros, NonDefaultWhiteSpaceMacros); 1262617277e7SBjörn Schäpers Style9 = getStyle("file", "/e/sub/sub/code.cpp", "none", "", &FS); 1263617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1264617277e7SBjörn Schäpers ASSERT_EQ(*Style9, [&NonDefaultWhiteSpaceMacros] { 1265617277e7SBjörn Schäpers auto Style = getNoStyle(); 1266617277e7SBjörn Schäpers Style.ColumnLimit = 20; 1267617277e7SBjörn Schäpers Style.WhitespaceSensitiveMacros = NonDefaultWhiteSpaceMacros; 1268617277e7SBjörn Schäpers return Style; 1269617277e7SBjörn Schäpers }()); 1270617277e7SBjörn Schäpers 1271617277e7SBjörn Schäpers // Test 9.2: with LLVM fallback style 1272617277e7SBjörn Schäpers Style9 = getStyle("file", "/e/sub/code.cpp", "LLVM", "", &FS); 1273617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1274617277e7SBjörn Schäpers ASSERT_EQ(*Style9, [] { 1275617277e7SBjörn Schäpers auto Style = getLLVMStyle(); 1276617277e7SBjörn Schäpers Style.ColumnLimit = 20; 1277617277e7SBjörn Schäpers return Style; 1278617277e7SBjörn Schäpers }()); 1279617277e7SBjörn Schäpers 1280617277e7SBjörn Schäpers // Test 9.3: with a parent file 1281617277e7SBjörn Schäpers ASSERT_TRUE( 1282617277e7SBjörn Schäpers FS.addFile("/e/.clang-format", 0, 1283617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: Google\n" 1284617277e7SBjörn Schäpers "UseTab: Always"))); 1285617277e7SBjörn Schäpers Style9 = getStyle("file", "/e/sub/code.cpp", "none", "", &FS); 1286617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1287617277e7SBjörn Schäpers ASSERT_EQ(*Style9, [] { 1288617277e7SBjörn Schäpers auto Style = getGoogleStyle(); 1289617277e7SBjörn Schäpers Style.ColumnLimit = 20; 1290617277e7SBjörn Schäpers Style.UseTab = FormatStyle::UT_Always; 1291617277e7SBjörn Schäpers return Style; 1292617277e7SBjörn Schäpers }()); 1293617277e7SBjörn Schäpers 1294617277e7SBjörn Schäpers // Test 9.4: propagate more than one level with a parent file. 1295617277e7SBjörn Schäpers const auto SubSubStyle = [&NonDefaultWhiteSpaceMacros] { 1296617277e7SBjörn Schäpers auto Style = getGoogleStyle(); 1297617277e7SBjörn Schäpers Style.ColumnLimit = 20; 1298617277e7SBjörn Schäpers Style.UseTab = FormatStyle::UT_Always; 1299617277e7SBjörn Schäpers Style.WhitespaceSensitiveMacros = NonDefaultWhiteSpaceMacros; 1300617277e7SBjörn Schäpers return Style; 1301617277e7SBjörn Schäpers }(); 1302617277e7SBjörn Schäpers 1303617277e7SBjörn Schäpers ASSERT_NE(Style9->WhitespaceSensitiveMacros, NonDefaultWhiteSpaceMacros); 1304617277e7SBjörn Schäpers Style9 = getStyle("file", "/e/sub/sub/code.cpp", "none", "", &FS); 1305617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1306617277e7SBjörn Schäpers ASSERT_EQ(*Style9, SubSubStyle); 1307617277e7SBjörn Schäpers 1308617277e7SBjörn Schäpers // Test 9.5: use InheritParentConfig as style name 1309617277e7SBjörn Schäpers Style9 = 1310617277e7SBjörn Schäpers getStyle("inheritparentconfig", "/e/sub/sub/code.cpp", "none", "", &FS); 1311617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1312617277e7SBjörn Schäpers ASSERT_EQ(*Style9, SubSubStyle); 1313617277e7SBjörn Schäpers 1314617277e7SBjörn Schäpers // Test 9.6: use command line style with inheritance 1315617277e7SBjörn Schäpers Style9 = getStyle("{BasedOnStyle: InheritParentConfig}", 1316617277e7SBjörn Schäpers "/e/sub/sub/code.cpp", "none", "", &FS); 1317617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1318617277e7SBjörn Schäpers ASSERT_EQ(*Style9, SubSubStyle); 1319617277e7SBjörn Schäpers 1320617277e7SBjörn Schäpers // Test 9.7: use command line style with inheritance and own config 1321617277e7SBjörn Schäpers Style9 = getStyle("{BasedOnStyle: InheritParentConfig, " 1322617277e7SBjörn Schäpers "WhitespaceSensitiveMacros: ['FOO', 'BAR']}", 1323617277e7SBjörn Schäpers "/e/sub/code.cpp", "none", "", &FS); 1324617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1325617277e7SBjörn Schäpers ASSERT_EQ(*Style9, SubSubStyle); 1326617277e7SBjörn Schäpers 1327617277e7SBjörn Schäpers // Test 9.8: use inheritance from a file without BasedOnStyle 1328617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/e/withoutbase/.clang-format", 0, 1329617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("ColumnLimit: 123"))); 1330617277e7SBjörn Schäpers ASSERT_TRUE( 1331617277e7SBjörn Schäpers FS.addFile("/e/withoutbase/sub/.clang-format", 0, 1332617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer( 1333617277e7SBjörn Schäpers "BasedOnStyle: InheritParentConfig\nIndentWidth: 7"))); 1334617277e7SBjörn Schäpers // Make sure we do not use the fallback style 1335617277e7SBjörn Schäpers Style9 = getStyle("file", "/e/withoutbase/code.cpp", "google", "", &FS); 1336617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1337617277e7SBjörn Schäpers ASSERT_EQ(*Style9, [] { 1338617277e7SBjörn Schäpers auto Style = getLLVMStyle(); 1339617277e7SBjörn Schäpers Style.ColumnLimit = 123; 1340617277e7SBjörn Schäpers return Style; 1341617277e7SBjörn Schäpers }()); 1342617277e7SBjörn Schäpers 1343617277e7SBjörn Schäpers Style9 = getStyle("file", "/e/withoutbase/sub/code.cpp", "google", "", &FS); 1344617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1345617277e7SBjörn Schäpers ASSERT_EQ(*Style9, [] { 1346617277e7SBjörn Schäpers auto Style = getLLVMStyle(); 1347617277e7SBjörn Schäpers Style.ColumnLimit = 123; 1348617277e7SBjörn Schäpers Style.IndentWidth = 7; 1349617277e7SBjörn Schäpers return Style; 1350617277e7SBjörn Schäpers }()); 1351617277e7SBjörn Schäpers 1352617277e7SBjörn Schäpers // Test 9.9: use inheritance from a specific config file. 1353617277e7SBjörn Schäpers Style9 = getStyle("file:/e/sub/sub/.clang-format", "/e/sub/sub/code.cpp", 1354617277e7SBjörn Schäpers "none", "", &FS); 1355617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style9)); 1356617277e7SBjörn Schäpers ASSERT_EQ(*Style9, SubSubStyle); 1357617277e7SBjörn Schäpers } 1358617277e7SBjörn Schäpers 1359617277e7SBjörn Schäpers TEST(ConfigParseTest, GetStyleOfSpecificFile) { 1360617277e7SBjörn Schäpers llvm::vfs::InMemoryFileSystem FS; 1361617277e7SBjörn Schäpers // Specify absolute path to a format file in a parent directory. 1362617277e7SBjörn Schäpers ASSERT_TRUE( 1363617277e7SBjörn Schäpers FS.addFile("/e/.clang-format", 0, 1364617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: LLVM"))); 1365617277e7SBjörn Schäpers ASSERT_TRUE( 1366617277e7SBjörn Schäpers FS.addFile("/e/explicit.clang-format", 0, 1367617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: Google"))); 1368617277e7SBjörn Schäpers ASSERT_TRUE(FS.addFile("/e/sub/sub/sub/test.cpp", 0, 1369617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("int i;"))); 1370617277e7SBjörn Schäpers auto Style = getStyle("file:/e/explicit.clang-format", 1371617277e7SBjörn Schäpers "/e/sub/sub/sub/test.cpp", "LLVM", "", &FS); 1372617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style)); 1373617277e7SBjörn Schäpers ASSERT_EQ(*Style, getGoogleStyle()); 1374617277e7SBjörn Schäpers 1375617277e7SBjörn Schäpers // Specify relative path to a format file. 1376617277e7SBjörn Schäpers ASSERT_TRUE( 1377617277e7SBjörn Schäpers FS.addFile("../../e/explicit.clang-format", 0, 1378617277e7SBjörn Schäpers llvm::MemoryBuffer::getMemBuffer("BasedOnStyle: Google"))); 1379617277e7SBjörn Schäpers Style = getStyle("file:../../e/explicit.clang-format", 1380617277e7SBjörn Schäpers "/e/sub/sub/sub/test.cpp", "LLVM", "", &FS); 1381617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style)); 1382617277e7SBjörn Schäpers ASSERT_EQ(*Style, getGoogleStyle()); 1383617277e7SBjörn Schäpers 1384617277e7SBjörn Schäpers // Specify path to a format file that does not exist. 1385617277e7SBjörn Schäpers Style = getStyle("file:/e/missing.clang-format", "/e/sub/sub/sub/test.cpp", 1386617277e7SBjörn Schäpers "LLVM", "", &FS); 1387617277e7SBjörn Schäpers ASSERT_FALSE(static_cast<bool>(Style)); 1388617277e7SBjörn Schäpers llvm::consumeError(Style.takeError()); 1389617277e7SBjörn Schäpers 1390617277e7SBjörn Schäpers // Specify path to a file on the filesystem. 1391617277e7SBjörn Schäpers SmallString<128> FormatFilePath; 1392617277e7SBjörn Schäpers std::error_code ECF = llvm::sys::fs::createTemporaryFile( 1393617277e7SBjörn Schäpers "FormatFileTest", "tpl", FormatFilePath); 1394617277e7SBjörn Schäpers EXPECT_FALSE((bool)ECF); 1395617277e7SBjörn Schäpers llvm::raw_fd_ostream FormatFileTest(FormatFilePath, ECF); 1396617277e7SBjörn Schäpers EXPECT_FALSE((bool)ECF); 1397617277e7SBjörn Schäpers FormatFileTest << "BasedOnStyle: Google\n"; 1398617277e7SBjörn Schäpers FormatFileTest.close(); 1399617277e7SBjörn Schäpers 1400617277e7SBjörn Schäpers SmallString<128> TestFilePath; 1401617277e7SBjörn Schäpers std::error_code ECT = 1402617277e7SBjörn Schäpers llvm::sys::fs::createTemporaryFile("CodeFileTest", "cc", TestFilePath); 1403617277e7SBjörn Schäpers EXPECT_FALSE((bool)ECT); 1404617277e7SBjörn Schäpers llvm::raw_fd_ostream CodeFileTest(TestFilePath, ECT); 1405617277e7SBjörn Schäpers CodeFileTest << "int i;\n"; 1406617277e7SBjörn Schäpers CodeFileTest.close(); 1407617277e7SBjörn Schäpers 1408617277e7SBjörn Schäpers std::string format_file_arg = std::string("file:") + FormatFilePath.c_str(); 1409617277e7SBjörn Schäpers Style = getStyle(format_file_arg, TestFilePath, "LLVM", "", nullptr); 1410617277e7SBjörn Schäpers 1411617277e7SBjörn Schäpers llvm::sys::fs::remove(FormatFilePath.c_str()); 1412617277e7SBjörn Schäpers llvm::sys::fs::remove(TestFilePath.c_str()); 1413617277e7SBjörn Schäpers ASSERT_TRUE(static_cast<bool>(Style)); 1414617277e7SBjörn Schäpers ASSERT_EQ(*Style, getGoogleStyle()); 1415617277e7SBjörn Schäpers } 1416617277e7SBjörn Schäpers 1417617277e7SBjörn Schäpers } // namespace 1418617277e7SBjörn Schäpers } // namespace format 1419617277e7SBjörn Schäpers } // namespace clang 1420