diff options
Diffstat (limited to 'unittests/Format/FormatTest.cpp')
-rw-r--r-- | unittests/Format/FormatTest.cpp | 158 |
1 files changed, 147 insertions, 11 deletions
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 02c749337e..5cab6f96f3 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -166,6 +166,39 @@ TEST_F(FormatTest, OnlyGeneratesNecessaryReplacements) { TEST_F(FormatTest, RemovesTrailingWhitespaceOfFormattedLine) { EXPECT_EQ("int a;\nint b;", format("int a; \nint b;", 0, 0, getLLVMStyle())); + EXPECT_EQ("int a;", format("int a; ")); + EXPECT_EQ("int a;\n", format("int a; \n \n \n ")); + EXPECT_EQ("int a;\nint b; ", + format("int a; \nint b; ", 0, 0, getLLVMStyle())); +} + +TEST_F(FormatTest, FormatsCorrectRegionForLeadingWhitespace) { + EXPECT_EQ("int b;\nint a;", + format("int b;\n int a;", 7, 0, getLLVMStyle())); + EXPECT_EQ("int b;\n int a;", + format("int b;\n int a;", 6, 0, getLLVMStyle())); + + EXPECT_EQ("#define A \\\n" + " int a; \\\n" + " int b;", + format("#define A \\\n" + " int a; \\\n" + " int b;", + 26, 0, getLLVMStyleWithColumns(12))); + EXPECT_EQ("#define A \\\n" + " int a; \\\n" + " int b;", + format("#define A \\\n" + " int a; \\\n" + " int b;", + 25, 0, getLLVMStyleWithColumns(12))); +} + +TEST_F(FormatTest, RemovesWhitespaceWhenTriggeredOnEmptyLine) { + EXPECT_EQ("int a;\n\n int b;", + format("int a;\n \n\n int b;", 7, 0, getLLVMStyle())); + EXPECT_EQ("int a;\n\n int b;", + format("int a;\n \n\n int b;", 9, 0, getLLVMStyle())); } TEST_F(FormatTest, ReformatsMovedLines) { @@ -390,6 +423,10 @@ TEST_F(FormatTest, FormatsSwitchStatement) { "}"); verifyFormat("switch (test)\n" " ;"); + verifyFormat("switch (x) {\n" + "default: {\n" + " // Do nothing.\n" + "}"); verifyGoogleFormat("switch (x) {\n" " case 1:\n" @@ -537,6 +574,13 @@ TEST_F(FormatTest, UnderstandsSingleLineComments) { " aaaaaaaaaaaaaaaaaaaaaa); // 81 cols with this comment"); } +TEST_F(FormatTest, RemovesTrailingWhitespaceOfComments) { + EXPECT_EQ("// comment", format("// comment ")); + EXPECT_EQ("int aaaaaaa, bbbbbbb; // comment", + format("int aaaaaaa, bbbbbbb; // comment ", + getLLVMStyleWithColumns(33))); +} + TEST_F(FormatTest, UnderstandsMultiLineComments) { verifyFormat("f(/*test=*/ true);"); EXPECT_EQ( @@ -612,6 +656,11 @@ TEST_F(FormatTest, CommentsInStaticInitializers) { "\n" " b\n" "};")); + verifyFormat("const uint8_t aaaaaaaaaaaaaaaaaaaaaa[0] = {\n" + " 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // comment\n" + " 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // comment\n" + " 0x00, 0x00, 0x00, 0x00 // comment\n" + "};"); } //===----------------------------------------------------------------------===// @@ -1189,9 +1238,11 @@ TEST_F(FormatTest, ConstructorInitializers) { TEST_F(FormatTest, BreaksAsHighAsPossible) { verifyFormat( - "if ((aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaaaaaaaaaaaaa) ||\n" - " (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb && bbbbbbbbbbbbbbbbbbbbbbbbbb))\n" - " f();"); + "void f() {\n" + " if ((aaaaaaaaaaaaaaaaaaaaaaaaaaaaa && aaaaaaaaaaaaaaaaaaaaaaaaaa) ||\n" + " (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb && bbbbbbbbbbbbbbbbbbbbbbbbbb))\n" + " f();\n" + "}"); verifyFormat("if (Intervals[i].getRange().getFirst() <\n" " Intervals[i - 1].getRange().getLast()) {\n}"); } @@ -1222,8 +1273,10 @@ TEST_F(FormatTest, BreaksDesireably) { " (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);"); verifyFormat( - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&\n" - " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);"); + "void f() {\n" + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&\n" + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);\n" + "}"); verifyFormat( "aaaaaa(new Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaa));"); @@ -1319,7 +1372,7 @@ TEST_F(FormatTest, FormatsBuilderPattern) { " ->aaaaaaaa(aaaaaaaaaaaaaaa);"); verifyFormat( "aaaaaaaaaaaaaaaaaaa()->aaaaaa(bbbbb)->aaaaaaaaaaaaaaaaaaa( // break\n" - " aaaaaaaaaaaaaa);"); + " aaaaaaaaaaaaaa);"); verifyFormat( "aaaaaaaaaaaaaaaaaaaaaaa *aaaaaaaaa = aaaaaa->aaaaaaaaaaaa()\n" " ->aaaaaaaaaaaaaaaa(\n" @@ -1334,6 +1387,10 @@ TEST_F(FormatTest, DoesNotBreakTrailingAnnotation) { " GUARDED_BY(aaaaaaaaaaaaa);"); verifyFormat("void aaaaaaaaaaaa(int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) const\n" " GUARDED_BY(aaaaaaaaaaaaa) {}"); + verifyFormat( + "void aaaaaaaaaaaaaaaaaa()\n" + " __attribute__((aaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaa,\n" + " aaaaaaaaaaaaaaaaaaaaaaaaa));"); } TEST_F(FormatTest, BreaksAccordingToOperatorPrecedence) { @@ -1796,7 +1853,7 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { verifyFormat("int main(int argc, char **argv) {}"); verifyFormat("Test::Test(int b) : a(b * b) {}"); verifyIndependentOfContext("f(a, *a);"); - verifyIndependentOfContext("f(*a);"); + verifyFormat("void g() { f(*a); }"); verifyIndependentOfContext("int a = b * 10;"); verifyIndependentOfContext("int a = 10 * b;"); verifyIndependentOfContext("int a = b * c;"); @@ -1829,6 +1886,7 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { verifyIndependentOfContext("return sizeof(int **);"); verifyIndependentOfContext("return sizeof(int ******);"); verifyIndependentOfContext("return (int **&)a;"); + verifyFormat("void f(Type (*parameter)[10]) {}"); verifyGoogleFormat("return sizeof(int**);"); verifyIndependentOfContext("Type **A = static_cast<Type **>(P);"); verifyGoogleFormat("Type** A = static_cast<Type**>(P);"); @@ -1868,7 +1926,7 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { verifyIndependentOfContext("a = &(x + y);"); verifyIndependentOfContext("*(x + y).call();"); verifyIndependentOfContext("&(x + y)->call();"); - verifyIndependentOfContext("&(*I).first"); + verifyFormat("void f() { &(*I).first; }"); verifyIndependentOfContext("f(b * /* confusing comment */ ++c);"); verifyFormat( @@ -1893,7 +1951,9 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { verifyIndependentOfContext("A = new SomeType *[Length]();"); verifyGoogleFormat("A = new SomeType* [Length]();"); +} +TEST_F(FormatTest, AdaptivelyFormatsPointersAndReferences) { EXPECT_EQ("int *a;\n" "int *a;\n" "int *a;", @@ -1917,6 +1977,21 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { getGoogleStyle())); } +TEST_F(FormatTest, UnderstandsRvalueReferences) { + verifyFormat("int f(int &&a) {}"); + verifyFormat("int f(int a, char &&b) {}"); + verifyFormat("void f() { int &&a = b; }"); + verifyGoogleFormat("int f(int a, char&& b) {}"); + verifyGoogleFormat("void f() { int&& a = b; }"); + + // FIXME: These require somewhat deeper changes in template arguments + // formatting. + // verifyIndependentOfContext("A<int &&> a;"); + // verifyIndependentOfContext("A<int &&, int &&> a;"); + // verifyGoogleFormat("A<int&&> a;"); + // verifyGoogleFormat("A<int&&, int&&> a;"); +} + TEST_F(FormatTest, FormatsBinaryOperatorsPrecedingEquals) { verifyFormat("void f() {\n" " x[aaaaaaaaa -\n" @@ -1961,12 +2036,13 @@ TEST_F(FormatTest, FormatsCasts) { } TEST_F(FormatTest, FormatsFunctionTypes) { - // FIXME: Determine the cases that need a space after the return type and fix. verifyFormat("A<bool()> a;"); verifyFormat("A<SomeType()> a;"); verifyFormat("A<void(*)(int, std::string)> a;"); - verifyFormat("int(*func)(void *);"); + // FIXME: Inconsistent. + verifyFormat("int (*func)(void *);"); + verifyFormat("void f() { int(*func)(void *); }"); } TEST_F(FormatTest, BreaksLongDeclarations) { @@ -2994,8 +3070,17 @@ TEST_F(FormatTest, BreakStringLiterals) { EXPECT_EQ("\"some \"\n" "\"text\"", format("\"some text\"", getLLVMStyleWithColumns(7))); - EXPECT_EQ("\"some text\"", + EXPECT_EQ("\"some\"\n" + "\" text\"", format("\"some text\"", getLLVMStyleWithColumns(6))); + EXPECT_EQ("\"some\"\n" + "\" tex\"\n" + "\" and\"", + format("\"some tex and\"", getLLVMStyleWithColumns(6))); + EXPECT_EQ("\"some\"\n" + "\"/tex\"\n" + "\"/and\"", + format("\"some/tex/and\"", getLLVMStyleWithColumns(6))); EXPECT_EQ("variable =\n" " \"long string \"\n" @@ -3032,6 +3117,57 @@ TEST_F(FormatTest, BreakStringLiterals) { "aaaaaaaaaaaaaaaaaaaa(\n" " aaaaaaaaaaaaaaaaaaaa,\n" " aaaaaa(\"aaa aaaaa aaa aaa aaaaa aaa aaaaa aaa aaa aaaaaa\"));"); + + EXPECT_EQ( + "\"splitmea\"\n" + "\"trandomp\"\n" + "\"oint\"", + format("\"splitmeatrandompoint\"", getLLVMStyleWithColumns(10))); + + EXPECT_EQ( + "\"split/\"\n" + "\"pathat/\"\n" + "\"slashes\"", + format("\"split/pathat/slashes\"", getLLVMStyleWithColumns(10))); +} + +TEST_F(FormatTest, DoNotBreakStringLiteralsInEscapeSequence) { + EXPECT_EQ("\"\\a\"", + format("\"\\a\"", getLLVMStyleWithColumns(3))); + EXPECT_EQ("\"\\\"", + format("\"\\\"", getLLVMStyleWithColumns(2))); + EXPECT_EQ("\"test\"\n" + "\"\\n\"", + format("\"test\\n\"", getLLVMStyleWithColumns(7))); + EXPECT_EQ("\"tes\\\\\"\n" + "\"n\"", + format("\"tes\\\\n\"", getLLVMStyleWithColumns(7))); + EXPECT_EQ("\"\\\\\\\\\"\n" + "\"\\n\"", + format("\"\\\\\\\\\\n\"", getLLVMStyleWithColumns(7))); + EXPECT_EQ("\"\\uff01\"", + format("\"\\uff01\"", getLLVMStyleWithColumns(7))); + EXPECT_EQ("\"\\uff01\"\n" + "\"test\"", + format("\"\\uff01test\"", getLLVMStyleWithColumns(8))); + EXPECT_EQ("\"\\Uff01ff02\"", + format("\"\\Uff01ff02\"", getLLVMStyleWithColumns(11))); + EXPECT_EQ("\"\\x000000000001\"\n" + "\"next\"", + format("\"\\x000000000001next\"", getLLVMStyleWithColumns(16))); + EXPECT_EQ("\"\\x000000000001next\"", + format("\"\\x000000000001next\"", getLLVMStyleWithColumns(15))); + EXPECT_EQ("\"\\x000000000001\"", + format("\"\\x000000000001\"", getLLVMStyleWithColumns(7))); + EXPECT_EQ("\"test\"\n" + "\"\\000000\"\n" + "\"000001\"", + format("\"test\\000000000001\"", getLLVMStyleWithColumns(9))); + EXPECT_EQ("\"test\\000\"\n" + "\"000000001\"", + format("\"test\\000000000001\"", getLLVMStyleWithColumns(10))); + EXPECT_EQ("R\"(\\x\\x00)\"\n", + format("R\"(\\x\\x00)\"\n", getLLVMStyleWithColumns(7))); } } // end namespace tooling |