From a594ba8a76c75c0ec293cfae028bd45c093bae2c Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Mon, 16 Dec 2013 14:35:51 +0000 Subject: Always break before the colon in constructor initializers, when BreakConstructorInitializersBeforeComma is true. This option is used in WebKit style, so this also ensures initializer lists are not put on a single line, as per the WebKit coding guidelines. Patch by Florian Sowade! llvm-svn: 197386 --- clang/unittests/Format/FormatTest.cpp | 68 ++++++++++++++++++++++++++++------- 1 file changed, 56 insertions(+), 12 deletions(-) (limited to 'clang/unittests/Format/FormatTest.cpp') diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index bd9d1083576..5e38f5974a7 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -7524,7 +7524,38 @@ TEST_F(FormatTest, ConstructorInitializerIndentWidth) { " , b(b)\n" " , c(c) {}", Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a) {}", + Style); + + Style.ColumnLimit = 0; + verifyFormat("SomeClass::Constructor()\n" + " : a(a) {}", + Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a)\n" + " , b(b)\n" + " , c(c) {}", + Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a) {\n" + " foo();\n" + " bar();\n" + "}", + Style); + + Style.AllowShortFunctionsOnASingleLine = false; + verifyFormat("SomeClass::Constructor()\n" + " : a(a)\n" + " , b(b)\n" + " , c(c) {\n}", + Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a) {\n}", + Style); + Style.ColumnLimit = 80; + Style.AllowShortFunctionsOnASingleLine = true; Style.ConstructorInitializerIndentWidth = 2; verifyFormat("SomeClass::Constructor()\n" " : a(a)\n" @@ -7541,6 +7572,10 @@ TEST_F(FormatTest, ConstructorInitializerIndentWidth) { Style.ConstructorInitializerAllOnOneLineOrOnePerLine = true; Style.ConstructorInitializerIndentWidth = 4; + verifyFormat("SomeClass::Constructor() : aaaaaaaa(aaaaaaaa) {}", Style); + verifyFormat( + "SomeClass::Constructor() : aaaaa(aaaaa), aaaaa(aaaaa), aaaaa(aaaaa)\n", + Style); verifyFormat( "SomeClass::Constructor()\n" " : aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa), aaaaaaaa(aaaaaaaa) {}", @@ -7600,18 +7635,27 @@ TEST_F(FormatTest, FormatsWithWebKitStyle) { // Constructor initializers are formatted one per line with the "," on the // new line. - EXPECT_EQ( - "Constructor()\n" - " : aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa)\n" - " , aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaa, // break\n" - " aaaaaaaaaaaaaa)\n" - " , aaaaaaaaaaaaaaaaaaaaaaa() {}", - format("Constructor()\n" - " : aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa)\n" - " , aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaa, // break\n" - " aaaaaaaaaaaaaa)\n" - " , aaaaaaaaaaaaaaaaaaaaaaa() {}", - Style)); + verifyFormat("Constructor()\n" + " : aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa)\n" + " , aaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaa, // break\n" + " aaaaaaaaaaaaaa)\n" + " , aaaaaaaaaaaaaaaaaaaaaaa() {}", + Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a) {}", + Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a)\n" + " , b(b)\n" + " , c(c) {}", + Style); + verifyFormat("SomeClass::Constructor()\n" + " : a(a)\n" + "{\n" + " foo();\n" + " bar();\n" + "}", + Style); // Access specifiers should be aligned left. verifyFormat("class C {\n" -- cgit v1.2.3