//===- unittest/Format/FormatTestComments.cpp - Formatting unit tests -----===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "FormatTestBase.h"

#define DEBUG_TYPE "format-test-comments"

namespace clang {
namespace format {
namespace test {
namespace {

FormatStyle getGoogleStyle() { return getGoogleStyle(FormatStyle::LK_Cpp); }

class FormatTestComments : public FormatTestBase {};

//===----------------------------------------------------------------------===//
// Tests for comments.
//===----------------------------------------------------------------------===//

TEST_F(FormatTestComments, UnderstandsSingleLineComments) {
  verifyFormat("//* */");
  verifyFormat("// line 1\n"
               "// line 2\n"
               "void f() {}");

  EXPECT_EQ("// comment", format("//comment"));
  EXPECT_EQ("// #comment", format("//#comment"));

  EXPECT_EQ("// comment\n"
            "// clang-format on",
            format("//comment\n"
                   "// clang-format on"));

  verifyFormat("void f() {\n"
               "  // Doesn't do anything\n"
               "}");
  verifyFormat("SomeObject\n"
               "    // Calling someFunction on SomeObject\n"
               "    .someFunction();");
  verifyFormat("auto result = SomeObject\n"
               "                  // Calling someFunction on SomeObject\n"
               "                  .someFunction();");
  verifyFormat("void f(int i,  // some comment (probably for i)\n"
               "       int j,  // some comment (probably for j)\n"
               "       int k); // some comment (probably for k)");
  verifyFormat("void f(int i,\n"
               "       // some comment (probably for j)\n"
               "       int j,\n"
               "       // some comment (probably for k)\n"
               "       int k);");

  verifyFormat("int i    // This is a fancy variable\n"
               "    = 5; // with nicely aligned comment.");

  verifyFormat("// Leading comment.\n"
               "int a; // Trailing comment.");
  verifyFormat("int a; // Trailing comment\n"
               "       // on 2\n"
               "       // or 3 lines.\n"
               "int b;");
  verifyFormat("int a; // Trailing comment\n"
               "\n"
               "// Leading comment.\n"
               "int b;");
  verifyFormat("int a;    // Comment.\n"
               "          // More details.\n"
               "int bbbb; // Another comment.");
  verifyFormat(
      "int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; // comment\n"
      "int bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;   // comment\n"
      "int cccccccccccccccccccccccccccccc;       // comment\n"
      "int ddd;                     // looooooooooooooooooooooooong comment\n"
      "int aaaaaaaaaaaaaaaaaaaaaaa; // comment\n"
      "int bbbbbbbbbbbbbbbbbbbbb;   // comment\n"
      "int ccccccccccccccccccc;     // comment");

  verifyFormat("#include \"a\"     // comment\n"
               "#include \"a/b/c\" // comment");
  verifyFormat("#include <a>     // comment\n"
               "#include <a/b/c> // comment");
  EXPECT_EQ("#include \"a\"     // comment\n"
            "#include \"a/b/c\" // comment",
            format("#include \\\n"
                   "  \"a\" // comment\n"
                   "#include \"a/b/c\" // comment"));

  verifyFormat("enum E {\n"
               "  // comment\n"
               "  VAL_A, // comment\n"
               "  VAL_B\n"
               "};");

  EXPECT_EQ("enum A {\n"
            "  // line a\n"
            "  a,\n"
            "  b, // line b\n"
            "\n"
            "  // line c\n"
            "  c\n"
            "};",
            format("enum A {\n"
                   "  // line a\n"
                   "  a,\n"
                   "  b, // line b\n"
                   "\n"
                   "  // line c\n"
                   "  c\n"
                   "};",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("enum A {\n"
            "  a, // line 1\n"
            "  // line 2\n"
            "};",
            format("enum A {\n"
                   "  a, // line 1\n"
                   "  // line 2\n"
                   "};",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("enum A {\n"
            "  a, // line 1\n"
            "     // line 2\n"
            "};",
            format("enum A {\n"
                   "  a, // line 1\n"
                   "   // line 2\n"
                   "};",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("enum A {\n"
            "  a, // line 1\n"
            "  // line 2\n"
            "  b\n"
            "};",
            format("enum A {\n"
                   "  a, // line 1\n"
                   "  // line 2\n"
                   "  b\n"
                   "};",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("enum A {\n"
            "  a, // line 1\n"
            "     // line 2\n"
            "  b\n"
            "};",
            format("enum A {\n"
                   "  a, // line 1\n"
                   "   // line 2\n"
                   "  b\n"
                   "};",
                   getLLVMStyleWithColumns(20)));
  verifyFormat(
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
      "    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; // Trailing comment");
  verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
               "    // Comment inside a statement.\n"
               "    bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;");
  verifyFormat("SomeFunction(a,\n"
               "             // comment\n"
               "             b + x);");
  verifyFormat("SomeFunction(a, a,\n"
               "             // comment\n"
               "             b + x);");
  verifyFormat(
      "bool aaaaaaaaaaaaa = // comment\n"
      "    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
      "    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;");

  verifyFormat("int aaaa; // aaaaa\n"
               "int aa;   // aaaaaaa",
               getLLVMStyleWithColumns(20));

  EXPECT_EQ("void f() { // This does something ..\n"
            "}\n"
            "int a; // This is unrelated",
            format("void f()    {     // This does something ..\n"
                   "  }\n"
                   "int   a;     // This is unrelated"));
  EXPECT_EQ("class C {\n"
            "  void f() { // This does something ..\n"
            "  } // awesome..\n"
            "\n"
            "  int a; // This is unrelated\n"
            "};",
            format("class C{void f()    { // This does something ..\n"
                   "      } // awesome..\n"
                   " \n"
                   "int a;    // This is unrelated\n"
                   "};"));

  EXPECT_EQ("int i; // single line trailing comment",
            format("int i;\\\n// single line trailing comment"));

  verifyGoogleFormat("int a;  // Trailing comment.");

  verifyFormat("someFunction(anotherFunction( // Force break.\n"
               "    parameter));");

  verifyGoogleFormat("#endif  // HEADER_GUARD");

  verifyFormat("const char *test[] = {\n"
               "    // A\n"
               "    \"aaaa\",\n"
               "    // B\n"
               "    \"aaaaa\"};");
  verifyGoogleFormat(
      "aaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
      "    aaaaaaaaaaaaaaaaaaaaaa);  // 81_cols_with_this_comment");
  EXPECT_EQ("D(a, {\n"
            "  // test\n"
            "  int a;\n"
            "});",
            format("D(a, {\n"
                   "// test\n"
                   "int a;\n"
                   "});"));

  EXPECT_EQ("lineWith(); // comment\n"
            "// at start\n"
            "otherLine();",
            format("lineWith();   // comment\n"
                   "// at start\n"
                   "otherLine();"));
  EXPECT_EQ("lineWith(); // comment\n"
            "/*\n"
            " * at start */\n"
            "otherLine();",
            format("lineWith();   // comment\n"
                   "/*\n"
                   " * at start */\n"
                   "otherLine();"));
  EXPECT_EQ("lineWith(); // comment\n"
            "            // at start\n"
            "otherLine();",
            format("lineWith();   // comment\n"
                   " // at start\n"
                   "otherLine();"));

  EXPECT_EQ("lineWith(); // comment\n"
            "// at start\n"
            "otherLine(); // comment",
            format("lineWith();   // comment\n"
                   "// at start\n"
                   "otherLine();   // comment"));
  EXPECT_EQ("lineWith();\n"
            "// at start\n"
            "otherLine(); // comment",
            format("lineWith();\n"
                   " // at start\n"
                   "otherLine();   // comment"));
  EXPECT_EQ("// first\n"
            "// at start\n"
            "otherLine(); // comment",
            format("// first\n"
                   " // at start\n"
                   "otherLine();   // comment"));
  EXPECT_EQ("f();\n"
            "// first\n"
            "// at start\n"
            "otherLine(); // comment",
            format("f();\n"
                   "// first\n"
                   " // at start\n"
                   "otherLine();   // comment"));
  verifyFormat("f(); // comment\n"
               "// first\n"
               "// at start\n"
               "otherLine();");
  EXPECT_EQ("f(); // comment\n"
            "// first\n"
            "// at start\n"
            "otherLine();",
            format("f();   // comment\n"
                   "// first\n"
                   " // at start\n"
                   "otherLine();"));
  EXPECT_EQ("f(); // comment\n"
            "     // first\n"
            "// at start\n"
            "otherLine();",
            format("f();   // comment\n"
                   " // first\n"
                   "// at start\n"
                   "otherLine();"));
  EXPECT_EQ("void f() {\n"
            "  lineWith(); // comment\n"
            "  // at start\n"
            "}",
            format("void              f() {\n"
                   "  lineWith(); // comment\n"
                   "  // at start\n"
                   "}"));
  EXPECT_EQ("int xy; // a\n"
            "int z;  // b",
            format("int xy;    // a\n"
                   "int z;    //b"));
  EXPECT_EQ("int xy; // a\n"
            "int z; // bb",
            format("int xy;    // a\n"
                   "int z;    //bb",
                   getLLVMStyleWithColumns(12)));

  verifyFormat("#define A                                                  \\\n"
               "  int i; /* iiiiiiiiiiiiiiiiiiiii */                       \\\n"
               "  int jjjjjjjjjjjjjjjjjjjjjjjj; /* */",
               getLLVMStyleWithColumns(60));
  verifyFormat(
      "#define A                                                   \\\n"
      "  int i;                        /* iiiiiiiiiiiiiiiiiiiii */ \\\n"
      "  int jjjjjjjjjjjjjjjjjjjjjjjj; /* */",
      getLLVMStyleWithColumns(61));

  verifyFormat("if ( // This is some comment\n"
               "    x + 3) {\n"
               "}");
  EXPECT_EQ("if ( // This is some comment\n"
            "     // spanning two lines\n"
            "    x + 3) {\n"
            "}",
            format("if( // This is some comment\n"
                   "     // spanning two lines\n"
                   " x + 3) {\n"
                   "}"));

  verifyNoCrash("/\\\n/");
  verifyNoCrash("/\\\n* */");
  // The 0-character somehow makes the lexer return a proper comment.
  verifyNoCrash(StringRef("/*\\\0\n/", 6));
}

TEST_F(FormatTestComments, KeepsParameterWithTrailingCommentsOnTheirOwnLine) {
  EXPECT_EQ("SomeFunction(a,\n"
            "             b, // comment\n"
            "             c);",
            format("SomeFunction(a,\n"
                   "          b, // comment\n"
                   "      c);"));
  EXPECT_EQ("SomeFunction(a, b,\n"
            "             // comment\n"
            "             c);",
            format("SomeFunction(a,\n"
                   "          b,\n"
                   "  // comment\n"
                   "      c);"));
  EXPECT_EQ("SomeFunction(a, b, // comment (unclear relation)\n"
            "             c);",
            format("SomeFunction(a, b, // comment (unclear relation)\n"
                   "      c);"));
  EXPECT_EQ("SomeFunction(a, // comment\n"
            "             b,\n"
            "             c); // comment",
            format("SomeFunction(a,     // comment\n"
                   "          b,\n"
                   "      c); // comment"));
  EXPECT_EQ("aaaaaaaaaa(aaaa(aaaa,\n"
            "                aaaa), //\n"
            "           aaaa, bbbbb);",
            format("aaaaaaaaaa(aaaa(aaaa,\n"
                   "aaaa), //\n"
                   "aaaa, bbbbb);"));

  FormatStyle BreakAlways = getLLVMStyle();
  BreakAlways.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
  verifyFormat("int SomeFunction(a,\n"
               "                 b, // comment\n"
               "                 c,\n"
               "                 d);",
               BreakAlways);
  verifyFormat("int SomeFunction(a,\n"
               "                 b,\n"
               "                 // comment\n"
               "                 c);",
               BreakAlways);
}

TEST_F(FormatTestComments, RemovesTrailingWhitespaceOfComments) {
  EXPECT_EQ("// comment", format("// comment  "));
  EXPECT_EQ("int aaaaaaa, bbbbbbb; // comment",
            format("int aaaaaaa, bbbbbbb; // comment                   ",
                   getLLVMStyleWithColumns(33)));
  EXPECT_EQ("// comment\\\n", format("// comment\\\n  \t \v   \f   "));
  EXPECT_EQ("// comment    \\\n", format("// comment    \\\n  \t \v   \f   "));
}

TEST_F(FormatTestComments, UnderstandsBlockComments) {
  verifyFormat("f(/*noSpaceAfterParameterNamingComment=*/true);");
  verifyFormat("void f() { g(/*aaa=*/x, /*bbb=*/!y, /*c=*/::c); }");
  verifyFormat("fooooooooooooooooooooooooooooo(\n"
               "    /*qq_=*/move(q), [this, b](bar<void(uint32_t)> b) {},\n"
               "    c);",
               getLLVMStyleWithColumns(60));
  EXPECT_EQ("f(aaaaaaaaaaaaaaaaaaaaaaaaa, /* Trailing comment for aa... */\n"
            "  bbbbbbbbbbbbbbbbbbbbbbbbb);",
            format("f(aaaaaaaaaaaaaaaaaaaaaaaaa ,   \\\n"
                   "/* Trailing comment for aa... */\n"
                   "  bbbbbbbbbbbbbbbbbbbbbbbbb);"));
  EXPECT_EQ(
      "f(aaaaaaaaaaaaaaaaaaaaaaaaa,\n"
      "  /* Leading comment for bb... */ bbbbbbbbbbbbbbbbbbbbbbbbb);",
      format("f(aaaaaaaaaaaaaaaaaaaaaaaaa    ,   \n"
             "/* Leading comment for bb... */   bbbbbbbbbbbbbbbbbbbbbbbbb);"));

  verifyFormat(
      "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
      "    aaaaaaaaaaaaaaaaaa,\n"
      "    aaaaaaaaaaaaaaaaaa) { /*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/ }",
      "void      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
      "                      aaaaaaaaaaaaaaaaaa  ,\n"
      "    aaaaaaaaaaaaaaaaaa) {   /*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/\n"
      "}");

  verifyFormat("f(/* aaaaaaaaaaaaaaaaaa = */\n"
               "  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);");

  verifyFormat(
      "int aaaaaaaaaaaaa(/* 1st */ int bbbbbbbbbb, /* 2nd */ int ccccccccccc,\n"
      "                  /* 3rd */ int dddddddddddd);");

  auto Style = getLLVMStyle();
  Style.BinPackParameters = FormatStyle::BPPS_OnePerLine;
  verifyFormat("aaaaaaaa(/* parameter 1 */ aaaaaa,\n"
               "         /* parameter 2 */ aaaaaa,\n"
               "         /* parameter 3 */ aaaaaa,\n"
               "         /* parameter 4 */ aaaaaa);",
               Style);
  verifyFormat("int a(/* 1st */ int b, /* 2nd */ int c);", Style);
  verifyFormat("int aaaaaaaaaaaaa(/* 1st */ int bbbbbbbbbb,\n"
               "                  /* 2nd */ int ccccccccccc,\n"
               "                  /* 3rd */ int dddddddddddd);",
               Style);

  Style.BinPackParameters = FormatStyle::BPPS_AlwaysOnePerLine;
  verifyFormat("int a(/* 1st */ int b,\n"
               "      /* 2nd */ int c);",
               Style);

  // Aligning block comments in macros.
  verifyGoogleFormat("#define A        \\\n"
                     "  int i;   /*a*/ \\\n"
                     "  int jjj; /*b*/");
}

TEST_F(FormatTestComments, AlignsBlockComments) {
  EXPECT_EQ("/*\n"
            " * Really multi-line\n"
            " * comment.\n"
            " */\n"
            "void f() {}",
            format("  /*\n"
                   "   * Really multi-line\n"
                   "   * comment.\n"
                   "   */\n"
                   "  void f() {}"));
  EXPECT_EQ("class C {\n"
            "  /*\n"
            "   * Another multi-line\n"
            "   * comment.\n"
            "   */\n"
            "  void f() {}\n"
            "};",
            format("class C {\n"
                   "/*\n"
                   " * Another multi-line\n"
                   " * comment.\n"
                   " */\n"
                   "void f() {}\n"
                   "};"));
  EXPECT_EQ("/*\n"
            "  1. This is a comment with non-trivial formatting.\n"
            "     1.1. We have to indent/outdent all lines equally\n"
            "         1.1.1. to keep the formatting.\n"
            " */",
            format("  /*\n"
                   "    1. This is a comment with non-trivial formatting.\n"
                   "       1.1. We have to indent/outdent all lines equally\n"
                   "           1.1.1. to keep the formatting.\n"
                   "   */"));
  EXPECT_EQ("/*\n"
            "Don't try to outdent if there's not enough indentation.\n"
            "*/",
            format("  /*\n"
                   " Don't try to outdent if there's not enough indentation.\n"
                   " */"));

  EXPECT_EQ("int i; /* Comment with empty...\n"
            "        *\n"
            "        * line. */",
            format("int i; /* Comment with empty...\n"
                   "        *\n"
                   "        * line. */"));
  EXPECT_EQ("int foobar = 0; /* comment */\n"
            "int bar = 0;    /* multiline\n"
            "                   comment 1 */\n"
            "int baz = 0;    /* multiline\n"
            "                   comment 2 */\n"
            "int bzz = 0;    /* multiline\n"
            "                   comment 3 */",
            format("int foobar = 0; /* comment */\n"
                   "int bar = 0;    /* multiline\n"
                   "                   comment 1 */\n"
                   "int baz = 0; /* multiline\n"
                   "                comment 2 */\n"
                   "int bzz = 0;         /* multiline\n"
                   "                        comment 3 */"));
  EXPECT_EQ("int foobar = 0; /* comment */\n"
            "int bar = 0;    /* multiline\n"
            "   comment */\n"
            "int baz = 0;    /* multiline\n"
            "comment */",
            format("int foobar = 0; /* comment */\n"
                   "int bar = 0; /* multiline\n"
                   "comment */\n"
                   "int baz = 0;        /* multiline\n"
                   "comment */"));
}

TEST_F(FormatTestComments, CommentReflowingCanBeTurnedOff) {
  FormatStyle Style = getLLVMStyleWithColumns(20);
  Style.ReflowComments = FormatStyle::RCS_Never;
  verifyFormat("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style);
  verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style);
  verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
                 "aaaaaaaaa*/",
                 Style);
  verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
                 "    aaaaaaaaa*/",
                 Style);
  verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
                 " *    aaaaaaaaa*/",
                 Style);
}

TEST_F(FormatTestComments, CommentReflowingCanApplyOnlyToIndents) {
  FormatStyle Style = getLLVMStyleWithColumns(20);
  Style.ReflowComments = FormatStyle::RCS_IndentOnly;
  verifyFormat("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style);
  verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style);
  verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
                 "aaaaaaaaa*/",
                 Style);
  verifyNoChange("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
                 "    aaaaaaaaa*/",
                 Style);
  verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
               " * aaaaaaaaa*/",
               "/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa\n"
               "      * aaaaaaaaa*/",
               Style);
}

TEST_F(FormatTestComments, CorrectlyHandlesLengthOfBlockComments) {
  EXPECT_EQ("double *x; /* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
            "              aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */",
            format("double *x; /* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
                   "              aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */"));
  EXPECT_EQ(
      "void ffffffffffff(\n"
      "    int aaaaaaaa, int bbbbbbbb,\n"
      "    int cccccccccccc) { /*\n"
      "                           aaaaaaaaaa\n"
      "                           aaaaaaaaaaaaa\n"
      "                           bbbbbbbbbbbbbb\n"
      "                           bbbbbbbbbb\n"
      "                         */\n"
      "}",
      format("void ffffffffffff(int aaaaaaaa, int bbbbbbbb, int cccccccccccc)\n"
             "{ /*\n"
             "     aaaaaaaaaa aaaaaaaaaaaaa\n"
             "     bbbbbbbbbbbbbb bbbbbbbbbb\n"
             "   */\n"
             "}",
             getLLVMStyleWithColumns(40)));
}

TEST_F(FormatTestComments, DontBreakNonTrailingBlockComments) {
  EXPECT_EQ("void ffffffffff(\n"
            "    int aaaaa /* test */);",
            format("void ffffffffff(int aaaaa /* test */);",
                   getLLVMStyleWithColumns(35)));
}

TEST_F(FormatTestComments, SplitsLongCxxComments) {
  EXPECT_EQ("// A comment that\n"
            "// doesn't fit on\n"
            "// one line",
            format("// A comment that doesn't fit on one line",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/// A comment that\n"
            "/// doesn't fit on\n"
            "/// one line",
            format("/// A comment that doesn't fit on one line",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//! A comment that\n"
            "//! doesn't fit on\n"
            "//! one line",
            format("//! A comment that doesn't fit on one line",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// a b c d\n"
            "// e f  g\n"
            "// h i j k",
            format("// a b c d e f  g h i j k", getLLVMStyleWithColumns(10)));
  EXPECT_EQ(
      "// a b c d\n"
      "// e f  g\n"
      "// h i j k",
      format("\\\n// a b c d e f  g h i j k", getLLVMStyleWithColumns(10)));
  EXPECT_EQ("if (true) // A comment that\n"
            "          // doesn't fit on\n"
            "          // one line",
            format("if (true) // A comment that doesn't fit on one line   ",
                   getLLVMStyleWithColumns(30)));
  verifyNoChange("//    Don't_touch_leading_whitespace",
                 getLLVMStyleWithColumns(20));
  EXPECT_EQ("// Add leading\n"
            "// whitespace",
            format("//Add leading whitespace", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/// Add leading\n"
            "/// whitespace",
            format("///Add leading whitespace", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//! Add leading\n"
            "//! whitespace",
            format("//!Add leading whitespace", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// whitespace", format("//whitespace"));
  EXPECT_EQ("// Even if it makes the line exceed the column\n"
            "// limit",
            format("//Even if it makes the line exceed the column limit",
                   getLLVMStyleWithColumns(51)));
  verifyFormat("//--But not here");
  EXPECT_EQ("/// line 1\n"
            "// add leading whitespace",
            format("/// line 1\n"
                   "//add leading whitespace",
                   getLLVMStyleWithColumns(30)));
  EXPECT_EQ("/// line 1\n"
            "/// line 2\n"
            "//! line 3\n"
            "//! line 4\n"
            "//! line 5\n"
            "// line 6\n"
            "// line 7",
            format("///line 1\n"
                   "///line 2\n"
                   "//! line 3\n"
                   "//!line 4\n"
                   "//!line 5\n"
                   "// line 6\n"
                   "//line 7",
                   getLLVMStyleWithColumns(20)));

  EXPECT_EQ("// aa bb cc dd",
            format("// aa bb             cc dd                   ",
                   getLLVMStyleWithColumns(15)));

  EXPECT_EQ("// A comment before\n"
            "// a macro\n"
            "// definition\n"
            "#define a b",
            format("// A comment before a macro definition\n"
                   "#define a b",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("void ffffff(\n"
            "    int aaaaaaaaa,  // wwww\n"
            "    int bbbbbbbbbb, // xxxxxxx\n"
            "                    // yyyyyyyyyy\n"
            "    int c, int d, int e) {}",
            format("void ffffff(\n"
                   "    int aaaaaaaaa, // wwww\n"
                   "    int bbbbbbbbbb, // xxxxxxx yyyyyyyyyy\n"
                   "    int c, int d, int e) {}",
                   getLLVMStyleWithColumns(40)));
  verifyFormat("//\t aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
               getLLVMStyleWithColumns(20));
  EXPECT_EQ(
      "#define XXX // a b c d\n"
      "            // e f g h",
      format("#define XXX // a b c d e f g h", getLLVMStyleWithColumns(22)));
  EXPECT_EQ(
      "#define XXX // q w e r\n"
      "            // t y u i",
      format("#define XXX //q w e r t y u i", getLLVMStyleWithColumns(22)));
  EXPECT_EQ("{\n"
            "  //\n"
            "  //\\\n"
            "  // long 1 2 3 4 5\n"
            "}",
            format("{\n"
                   "  //\n"
                   "  //\\\n"
                   "  // long 1 2 3 4 5\n"
                   "}",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("{\n"
            "  //\n"
            "  //\\\n"
            "  // long 1 2 3 4 5\n"
            "  // 6\n"
            "}",
            format("{\n"
                   "  //\n"
                   "  //\\\n"
                   "  // long 1 2 3 4 5 6\n"
                   "}",
                   getLLVMStyleWithColumns(20)));

  EXPECT_EQ("//: A comment that\n"
            "//: doesn't fit on\n"
            "//: one line",
            format("//: A comment that doesn't fit on one line",
                   getLLVMStyleWithColumns(20)));

  verifyFormat(
      "//\t\t\t\tofMap(message.velocity, 0, 127, 0, ofGetWidth()\n"
      "//* 0.2)",
      "//\t\t\t\tofMap(message.velocity, 0, 127, 0, ofGetWidth() * 0.2)");
}

TEST_F(FormatTestComments, PreservesHangingIndentInCxxComments) {
  EXPECT_EQ("//     A comment\n"
            "//     that doesn't\n"
            "//     fit on one\n"
            "//     line",
            format("//     A comment that doesn't fit on one line",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("///     A comment\n"
            "///     that doesn't\n"
            "///     fit on one\n"
            "///     line",
            format("///     A comment that doesn't fit on one line",
                   getLLVMStyleWithColumns(20)));
}

TEST_F(FormatTestComments, DontSplitLineCommentsWithEscapedNewlines) {
  EXPECT_EQ("// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
            "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
            "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
            format("// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
                   "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
                   "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
  EXPECT_EQ("int a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
            "       // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
            "       // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
            format("int a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
                   "       // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
                   "       // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
                   getLLVMStyleWithColumns(50)));
  // FIXME: One day we might want to implement adjustment of leading whitespace
  // of the consecutive lines in this kind of comment:
  EXPECT_EQ("double\n"
            "    a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
            "          // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
            "          // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
            format("double a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
                   "          // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
                   "          // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
                   getLLVMStyleWithColumns(49)));
}

TEST_F(FormatTestComments, DontIntroduceMultilineComments) {
  // Avoid introducing a multiline comment by breaking after `\`.
  for (int ColumnLimit = 15; ColumnLimit <= 17; ++ColumnLimit) {
    EXPECT_EQ(
        "// aaaaaaaaaa\n"
        "// \\ bb",
        format("// aaaaaaaaaa \\ bb", getLLVMStyleWithColumns(ColumnLimit)));
    EXPECT_EQ(
        "// aaaaaaaaa\n"
        "// \\  bb",
        format("// aaaaaaaaa \\  bb", getLLVMStyleWithColumns(ColumnLimit)));
    EXPECT_EQ(
        "// aaaaaaaaa\n"
        "// \\  \\ bb",
        format("// aaaaaaaaa \\  \\ bb", getLLVMStyleWithColumns(ColumnLimit)));
  }
}

TEST_F(FormatTestComments, DontSplitLineCommentsWithPragmas) {
  FormatStyle Pragmas = getLLVMStyleWithColumns(30);
  Pragmas.CommentPragmas = "^ IWYU pragma:";
  EXPECT_EQ(
      "// IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb",
      format("// IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb", Pragmas));
  EXPECT_EQ(
      "/* IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb */",
      format("/* IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb */", Pragmas));
}

TEST_F(FormatTestComments, PriorityOfCommentBreaking) {
  EXPECT_EQ("if (xxx ==\n"
            "        yyy && // aaaaaaaaaaaa bbbbbbbbb\n"
            "    zzz)\n"
            "  q();",
            format("if (xxx == yyy && // aaaaaaaaaaaa bbbbbbbbb\n"
                   "    zzz) q();",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("if (xxxxxxxxxx ==\n"
            "        yyy && // aaaaaa bbbbbbbb cccc\n"
            "    zzz)\n"
            "  q();",
            format("if (xxxxxxxxxx == yyy && // aaaaaa bbbbbbbb cccc\n"
                   "    zzz) q();",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("if (xxxxxxxxxx &&\n"
            "        yyy || // aaaaaa bbbbbbbb cccc\n"
            "    zzz)\n"
            "  q();",
            format("if (xxxxxxxxxx && yyy || // aaaaaa bbbbbbbb cccc\n"
                   "    zzz) q();",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("fffffffff(\n"
            "    &xxx, // aaaaaaaaaaaa bbbbbbbbbbb\n"
            "    zzz);",
            format("fffffffff(&xxx, // aaaaaaaaaaaa bbbbbbbbbbb\n"
                   " zzz);",
                   getLLVMStyleWithColumns(40)));
}

TEST_F(FormatTestComments, MultiLineCommentsInDefines) {
  EXPECT_EQ("#define A(x) /* \\\n"
            "  a comment     \\\n"
            "  inside */     \\\n"
            "  f();",
            format("#define A(x) /* \\\n"
                   "  a comment     \\\n"
                   "  inside */     \\\n"
                   "  f();",
                   getLLVMStyleWithColumns(17)));
  EXPECT_EQ("#define A(      \\\n"
            "    x) /*       \\\n"
            "  a comment     \\\n"
            "  inside */     \\\n"
            "  f();",
            format("#define A(      \\\n"
                   "    x) /*       \\\n"
                   "  a comment     \\\n"
                   "  inside */     \\\n"
                   "  f();",
                   getLLVMStyleWithColumns(17)));
}

TEST_F(FormatTestComments, ParsesCommentsAdjacentToPPDirectives) {
  EXPECT_EQ("namespace {}\n// Test\n#define A",
            format("namespace {}\n   // Test\n#define A"));
  EXPECT_EQ("namespace {}\n/* Test */\n#define A",
            format("namespace {}\n   /* Test */\n#define A"));
  EXPECT_EQ("namespace {}\n/* Test */ #define A",
            format("namespace {}\n   /* Test */    #define A"));
}

TEST_F(FormatTestComments, KeepsLevelOfCommentBeforePPDirective) {
  // Keep the current level if the comment was originally not aligned with
  // the preprocessor directive.
  EXPECT_EQ("void f() {\n"
            "  int i;\n"
            "  /* comment */\n"
            "#ifdef A\n"
            "  int j;\n"
            "}",
            format("void f() {\n"
                   "  int i;\n"
                   "  /* comment */\n"
                   "#ifdef A\n"
                   "  int j;\n"
                   "}"));

  EXPECT_EQ("void f() {\n"
            "  int i;\n"
            "  /* comment */\n"
            "\n"
            "#ifdef A\n"
            "  int j;\n"
            "}",
            format("void f() {\n"
                   "  int i;\n"
                   "  /* comment */\n"
                   "\n"
                   "#ifdef A\n"
                   "  int j;\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    ++i;\n"
            "  }\n"
            "  // comment\n"
            "#ifdef A\n"
            "  int j;\n"
            "#endif\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    ++i;\n"
                   "  }\n"
                   "  // comment\n"
                   "#ifdef A\n"
                   "int j;\n"
                   "#endif\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    i++;\n"
            "  } else {\n"
            "    // comment in else\n"
            "#ifdef A\n"
            "    j++;\n"
            "#endif\n"
            "  }\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    i++;\n"
                   "  } else {\n"
                   "  // comment in else\n"
                   "#ifdef A\n"
                   "    j++;\n"
                   "#endif\n"
                   "  }\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    i++;\n"
            "  } else {\n"
            "    /* comment in else */\n"
            "#ifdef A\n"
            "    j++;\n"
            "#endif\n"
            "  }\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    i++;\n"
                   "  } else {\n"
                   "  /* comment in else */\n"
                   "#ifdef A\n"
                   "    j++;\n"
                   "#endif\n"
                   "  }\n"
                   "}"));

  // Keep the current level if there is an empty line between the comment and
  // the preprocessor directive.
  EXPECT_EQ("void f() {\n"
            "  int i;\n"
            "  /* comment */\n"
            "\n"
            "#ifdef A\n"
            "  int j;\n"
            "}",
            format("void f() {\n"
                   "  int i;\n"
                   "/* comment */\n"
                   "\n"
                   "#ifdef A\n"
                   "  int j;\n"
                   "}"));

  EXPECT_EQ("void f() {\n"
            "  int i;\n"
            "  return i;\n"
            "}\n"
            "// comment\n"
            "\n"
            "#ifdef A\n"
            "int i;\n"
            "#endif // A",
            format("void f() {\n"
                   "   int i;\n"
                   "  return i;\n"
                   "}\n"
                   "// comment\n"
                   "\n"
                   "#ifdef A\n"
                   "int i;\n"
                   "#endif // A"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    ++i;\n"
            "  }\n"
            "  // comment\n"
            "\n"
            "#ifdef A\n"
            "  int j;\n"
            "#endif\n"
            "}",
            format("int f(int i) {\n"
                   "   if (true) {\n"
                   "    ++i;\n"
                   "  }\n"
                   "  // comment\n"
                   "\n"
                   "#ifdef A\n"
                   "  int j;\n"
                   "#endif\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    i++;\n"
            "  } else {\n"
            "    // comment in else\n"
            "\n"
            "#ifdef A\n"
            "    j++;\n"
            "#endif\n"
            "  }\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    i++;\n"
                   "  } else {\n"
                   "// comment in else\n"
                   "\n"
                   "#ifdef A\n"
                   "    j++;\n"
                   "#endif\n"
                   "  }\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    i++;\n"
            "  } else {\n"
            "    /* comment in else */\n"
            "\n"
            "#ifdef A\n"
            "    j++;\n"
            "#endif\n"
            "  }\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    i++;\n"
                   "  } else {\n"
                   "/* comment in else */\n"
                   "\n"
                   "#ifdef A\n"
                   "    j++;\n"
                   "#endif\n"
                   "  }\n"
                   "}"));

  // Align with the preprocessor directive if the comment was originally aligned
  // with the preprocessor directive and there is no newline between the comment
  // and the preprocessor directive.
  EXPECT_EQ("void f() {\n"
            "  int i;\n"
            "/* comment */\n"
            "#ifdef A\n"
            "  int j;\n"
            "}",
            format("void f() {\n"
                   "  int i;\n"
                   "/* comment */\n"
                   "#ifdef A\n"
                   "  int j;\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    ++i;\n"
            "  }\n"
            "// comment\n"
            "#ifdef A\n"
            "  int j;\n"
            "#endif\n"
            "}",
            format("int f(int i) {\n"
                   "   if (true) {\n"
                   "    ++i;\n"
                   "  }\n"
                   "// comment\n"
                   "#ifdef A\n"
                   "  int j;\n"
                   "#endif\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    i++;\n"
            "  } else {\n"
            "// comment in else\n"
            "#ifdef A\n"
            "    j++;\n"
            "#endif\n"
            "  }\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    i++;\n"
                   "  } else {\n"
                   " // comment in else\n"
                   " #ifdef A\n"
                   "    j++;\n"
                   "#endif\n"
                   "  }\n"
                   "}"));

  EXPECT_EQ("int f(int i) {\n"
            "  if (true) {\n"
            "    i++;\n"
            "  } else {\n"
            "/* comment in else */\n"
            "#ifdef A\n"
            "    j++;\n"
            "#endif\n"
            "  }\n"
            "}",
            format("int f(int i) {\n"
                   "  if (true) {\n"
                   "    i++;\n"
                   "  } else {\n"
                   " /* comment in else */\n"
                   " #ifdef A\n"
                   "    j++;\n"
                   "#endif\n"
                   "  }\n"
                   "}"));

  const StringRef Code("void func() {\n"
                       "  // clang-format off\n"
                       "  #define KV(value) #value, value\n"
                       "  // clang-format on\n"
                       "}");
  verifyNoChange(Code);

  auto Style = getLLVMStyle();
  Style.IndentPPDirectives = FormatStyle::PPDIS_BeforeHash;
  verifyFormat("#ifdef FOO\n"
               "  // Foo\n"
               "  #define Foo foo\n"
               "#else\n"
               "  // Bar\n"
               "  #define Bar bar\n"
               "#endif",
               Style);
}

TEST_F(FormatTestComments, CommentsBetweenUnbracedBodyAndPPDirective) {
  verifyFormat("{\n"
               "  if (a)\n"
               "    f(); // comment\n"
               "#define A\n"
               "}");

  verifyFormat("{\n"
               "  while (a)\n"
               "    f();\n"
               "// comment\n"
               "#define A\n"
               "}");

  verifyNoChange("{\n"
                 "  if (a)\n"
                 "    f();\n"
                 "  // comment\n"
                 "#define A\n"
                 "}");

  verifyNoChange("{\n"
                 "  while (a)\n"
                 "    if (b)\n"
                 "      f();\n"
                 "  // comment\n"
                 "#define A\n"
                 "}");
}

TEST_F(FormatTestComments, SplitsLongLinesInComments) {
  // FIXME: Do we need to fix up the "  */" at the end?
  // It doesn't look like any of our current logic triggers this.
  EXPECT_EQ("/* This is a long\n"
            " * comment that\n"
            " * doesn't fit on\n"
            " * one line.  */",
            format("/* "
                   "This is a long                                         "
                   "comment that "
                   "doesn't                                    "
                   "fit on one line.  */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ(
      "/* a b c d\n"
      " * e f  g\n"
      " * h i j k\n"
      " */",
      format("/* a b c d e f  g h i j k */", getLLVMStyleWithColumns(10)));
  EXPECT_EQ(
      "/* a b c d\n"
      " * e f  g\n"
      " * h i j k\n"
      " */",
      format("\\\n/* a b c d e f  g h i j k */", getLLVMStyleWithColumns(10)));
  EXPECT_EQ("/*\n"
            "This is a long\n"
            "comment that doesn't\n"
            "fit on one line.\n"
            "*/",
            format("/*\n"
                   "This is a long                                         "
                   "comment that doesn't                                    "
                   "fit on one line.                                      \n"
                   "*/",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/*\n"
            " * This is a long\n"
            " * comment that\n"
            " * doesn't fit on\n"
            " * one line.\n"
            " */",
            format("/*      \n"
                   " * This is a long "
                   "   comment that     "
                   "   doesn't fit on   "
                   "   one line.                                            \n"
                   " */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/*\n"
            " * This_is_a_comment_with_words_that_dont_fit_on_one_line\n"
            " * so_it_should_be_broken\n"
            " * wherever_a_space_occurs\n"
            " */",
            format("/*\n"
                   " * This_is_a_comment_with_words_that_dont_fit_on_one_line "
                   "   so_it_should_be_broken "
                   "   wherever_a_space_occurs                             \n"
                   " */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/*\n"
            " *    This_comment_can_not_be_broken_into_lines\n"
            " */",
            format("/*\n"
                   " *    This_comment_can_not_be_broken_into_lines\n"
                   " */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("{\n"
            "  /*\n"
            "  This is another\n"
            "  long comment that\n"
            "  doesn't fit on one\n"
            "  line    1234567890\n"
            "  */\n"
            "}",
            format("{\n"
                   "/*\n"
                   "This is another     "
                   "  long comment that "
                   "  doesn't fit on one"
                   "  line    1234567890\n"
                   "*/\n"
                   "}",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("{\n"
            "  /*\n"
            "   * This        i s\n"
            "   * another comment\n"
            "   * t hat  doesn' t\n"
            "   * fit on one l i\n"
            "   * n e\n"
            "   */\n"
            "}",
            format("{\n"
                   "/*\n"
                   " * This        i s"
                   "   another comment"
                   "   t hat  doesn' t"
                   "   fit on one l i"
                   "   n e\n"
                   " */\n"
                   "}",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/*\n"
            " * This is a long\n"
            " * comment that\n"
            " * doesn't fit on\n"
            " * one line\n"
            " */",
            format("   /*\n"
                   "    * This is a long comment that doesn't fit on one line\n"
                   "    */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("{\n"
            "  if (something) /* This is a\n"
            "                    long\n"
            "                    comment */\n"
            "    ;\n"
            "}",
            format("{\n"
                   "  if (something) /* This is a long comment */\n"
                   "    ;\n"
                   "}",
                   getLLVMStyleWithColumns(30)));

  EXPECT_EQ("/* A comment before\n"
            " * a macro\n"
            " * definition */\n"
            "#define a b",
            format("/* A comment before a macro definition */\n"
                   "#define a b",
                   getLLVMStyleWithColumns(20)));

  EXPECT_EQ("/* some comment\n"
            " *   a comment that\n"
            " * we break another\n"
            " * comment we have\n"
            " * to break a left\n"
            " * comment\n"
            " */",
            format("  /* some comment\n"
                   "       *   a comment that we break\n"
                   "   * another comment we have to break\n"
                   "* a left comment\n"
                   "   */",
                   getLLVMStyleWithColumns(20)));

  EXPECT_EQ("/**\n"
            " * multiline block\n"
            " * comment\n"
            " *\n"
            " */",
            format("/**\n"
                   " * multiline block comment\n"
                   " *\n"
                   " */",
                   getLLVMStyleWithColumns(20)));

  // This reproduces a crashing bug where both adaptStartOfLine and
  // getCommentSplit were trying to wrap after the "/**".
  verifyFormat("/** multilineblockcommentwithnowrapopportunity */",
               getLLVMStyleWithColumns(20));

  EXPECT_EQ("/*\n"
            "\n"
            "\n"
            "    */",
            format("  /*       \n"
                   "      \n"
                   "               \n"
                   "      */"));

  EXPECT_EQ("/* a a */",
            format("/* a a            */", getLLVMStyleWithColumns(15)));
  EXPECT_EQ("/* a a bc  */",
            format("/* a a            bc  */", getLLVMStyleWithColumns(15)));
  EXPECT_EQ("/* aaa aaa\n"
            " * aaaaa */",
            format("/* aaa aaa aaaaa       */", getLLVMStyleWithColumns(15)));
  EXPECT_EQ("/* aaa aaa\n"
            " * aaaaa     */",
            format("/* aaa aaa aaaaa     */", getLLVMStyleWithColumns(15)));
}

TEST_F(FormatTestComments, SplitsLongLinesInCommentsInPreprocessor) {
  EXPECT_EQ("#define X          \\\n"
            "  /*               \\\n"
            "   Test            \\\n"
            "   Macro comment   \\\n"
            "   with a long     \\\n"
            "   line            \\\n"
            "   */              \\\n"
            "  A + B",
            format("#define X \\\n"
                   "  /*\n"
                   "   Test\n"
                   "   Macro comment with a long  line\n"
                   "   */ \\\n"
                   "  A + B",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("#define X          \\\n"
            "  /* Macro comment \\\n"
            "     with a long   \\\n"
            "     line */       \\\n"
            "  A + B",
            format("#define X \\\n"
                   "  /* Macro comment with a long\n"
                   "     line */ \\\n"
                   "  A + B",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("#define X          \\\n"
            "  /* Macro comment \\\n"
            "   * with a long   \\\n"
            "   * line */       \\\n"
            "  A + B",
            format("#define X \\\n"
                   "  /* Macro comment with a long  line */ \\\n"
                   "  A + B",
                   getLLVMStyleWithColumns(20)));
}

TEST_F(FormatTestComments, KeepsTrailingPPCommentsAndSectionCommentsSeparate) {
  verifyFormat("#ifdef A // line about A\n"
               "// section comment\n"
               "#endif",
               getLLVMStyleWithColumns(80));
  verifyFormat("#ifdef A // line 1 about A\n"
               "         // line 2 about A\n"
               "// section comment\n"
               "#endif",
               getLLVMStyleWithColumns(80));
  EXPECT_EQ("#ifdef A // line 1 about A\n"
            "         // line 2 about A\n"
            "// section comment\n"
            "#endif",
            format("#ifdef A // line 1 about A\n"
                   "          // line 2 about A\n"
                   "// section comment\n"
                   "#endif",
                   getLLVMStyleWithColumns(80)));
  verifyFormat("int f() {\n"
               "  int i;\n"
               "#ifdef A // comment about A\n"
               "  // section comment 1\n"
               "  // section comment 2\n"
               "  i = 2;\n"
               "#else // comment about #else\n"
               "  // section comment 3\n"
               "  i = 4;\n"
               "#endif\n"
               "}",
               getLLVMStyleWithColumns(80));
}

TEST_F(FormatTestComments, AlignsPPElseEndifComments) {
  verifyFormat("#if A\n"
               "#else  // A\n"
               "int iiii;\n"
               "#endif // B",
               getLLVMStyleWithColumns(20));
  verifyFormat("#if A\n"
               "#else  // A\n"
               "int iiii; // CC\n"
               "#endif // B",
               getLLVMStyleWithColumns(20));
  EXPECT_EQ("#if A\n"
            "#else  // A1\n"
            "       // A2\n"
            "int ii;\n"
            "#endif // B",
            format("#if A\n"
                   "#else  // A1\n"
                   "       // A2\n"
                   "int ii;\n"
                   "#endif // B",
                   getLLVMStyleWithColumns(20)));
}

TEST_F(FormatTestComments, CommentsInStaticInitializers) {
  EXPECT_EQ(
      "static SomeType type = {aaaaaaaaaaaaaaaaaaaa, /* comment */\n"
      "                        aaaaaaaaaaaaaaaaaaaa /* comment */,\n"
      "                        /* comment */ aaaaaaaaaaaaaaaaaaaa,\n"
      "                        aaaaaaaaaaaaaaaaaaaa, // comment\n"
      "                        aaaaaaaaaaaaaaaaaaaa};",
      format("static SomeType type = { aaaaaaaaaaaaaaaaaaaa  ,  /* comment */\n"
             "                   aaaaaaaaaaaaaaaaaaaa   /* comment */ ,\n"
             "                     /* comment */   aaaaaaaaaaaaaaaaaaaa ,\n"
             "              aaaaaaaaaaaaaaaaaaaa ,   // comment\n"
             "                  aaaaaaaaaaaaaaaaaaaa };"));
  verifyFormat("static SomeType type = {aaaaaaaaaaa, // comment for aa...\n"
               "                        bbbbbbbbbbb, ccccccccccc};");
  verifyFormat("static SomeType type = {aaaaaaaaaaa,\n"
               "                        // comment for bb....\n"
               "                        bbbbbbbbbbb, ccccccccccc};");
  verifyGoogleFormat(
      "static SomeType type = {aaaaaaaaaaa,  // comment for aa...\n"
      "                        bbbbbbbbbbb, ccccccccccc};");
  verifyGoogleFormat("static SomeType type = {aaaaaaaaaaa,\n"
                     "                        // comment for bb....\n"
                     "                        bbbbbbbbbbb, ccccccccccc};");

  verifyFormat("S s = {{a, b, c},  // Group #1\n"
               "       {d, e, f},  // Group #2\n"
               "       {g, h, i}}; // Group #3");
  verifyFormat("S s = {{// Group #1\n"
               "        a, b, c},\n"
               "       {// Group #2\n"
               "        d, e, f},\n"
               "       {// Group #3\n"
               "        g, h, i}};");

  EXPECT_EQ("S s = {\n"
            "    // Some comment\n"
            "    a,\n"
            "\n"
            "    // Comment after empty line\n"
            "    b}",
            format("S s =    {\n"
                   "      // Some comment\n"
                   "  a,\n"
                   "  \n"
                   "     // Comment after empty line\n"
                   "      b\n"
                   "}"));
  EXPECT_EQ("S s = {\n"
            "    /* Some comment */\n"
            "    a,\n"
            "\n"
            "    /* Comment after empty line */\n"
            "    b}",
            format("S s =    {\n"
                   "      /* Some comment */\n"
                   "  a,\n"
                   "  \n"
                   "     /* Comment after empty line */\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");
}

TEST_F(FormatTestComments, LineCommentsAfterRightBrace) {
  EXPECT_EQ("if (true) { // comment about branch\n"
            "  // comment about f\n"
            "  f();\n"
            "}",
            format("if (true) { // comment about branch\n"
                   "  // comment about f\n"
                   "  f();\n"
                   "}",
                   getLLVMStyleWithColumns(80)));
  EXPECT_EQ("if (1) { // if line 1\n"
            "         // if line 2\n"
            "         // if line 3\n"
            "  // f line 1\n"
            "  // f line 2\n"
            "  f();\n"
            "} else { // else line 1\n"
            "         // else line 2\n"
            "         // else line 3\n"
            "  // g line 1\n"
            "  g();\n"
            "}",
            format("if (1) { // if line 1\n"
                   "          // if line 2\n"
                   "        // if line 3\n"
                   "  // f line 1\n"
                   "    // f line 2\n"
                   "  f();\n"
                   "} else { // else line 1\n"
                   "        // else line 2\n"
                   "         // else line 3\n"
                   "  // g line 1\n"
                   "  g();\n"
                   "}"));
  EXPECT_EQ("do { // line 1\n"
            "     // line 2\n"
            "     // line 3\n"
            "  f();\n"
            "} while (true);",
            format("do { // line 1\n"
                   "     // line 2\n"
                   "   // line 3\n"
                   "  f();\n"
                   "} while (true);",
                   getLLVMStyleWithColumns(80)));
  EXPECT_EQ("while (a < b) { // line 1\n"
            "  // line 2\n"
            "  // line 3\n"
            "  f();\n"
            "}",
            format("while (a < b) {// line 1\n"
                   "  // line 2\n"
                   "  // line 3\n"
                   "  f();\n"
                   "}",
                   getLLVMStyleWithColumns(80)));
}

TEST_F(FormatTestComments, ReflowsComments) {
  // Break a long line and reflow with the full next line.
  EXPECT_EQ("// long long long\n"
            "// long long",
            format("// long long long long\n"
                   "// long",
                   getLLVMStyleWithColumns(20)));

  // Keep the trailing newline while reflowing.
  EXPECT_EQ("// long long long\n"
            "// long long",
            format("// long long long long\n"
                   "// long",
                   getLLVMStyleWithColumns(20)));

  // Break a long line and reflow with a part of the next line.
  EXPECT_EQ("// long long long\n"
            "// long long\n"
            "// long_long",
            format("// long long long long\n"
                   "// long long_long",
                   getLLVMStyleWithColumns(20)));

  // Break but do not reflow if the first word from the next line is too long.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// long_long_long",
            format("// long long long long\n"
                   "// long_long_long",
                   getLLVMStyleWithColumns(20)));

  // Don't break or reflow short lines.
  verifyFormat("// long\n"
               "// long long long lo\n"
               "// long long long lo\n"
               "// long",
               getLLVMStyleWithColumns(20));

  // Keep prefixes and decorations while reflowing.
  EXPECT_EQ("/// long long long\n"
            "/// long long",
            format("/// long long long long\n"
                   "/// long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//! long long long\n"
            "//! long long",
            format("//! long long long long\n"
                   "//! long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/* long long long\n"
            " * long long */",
            format("/* long long long long\n"
                   " * long */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("///< long long long\n"
            "///< long long",
            format("///< long long long long\n"
                   "///< long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//!< long long long\n"
            "//!< long long",
            format("//!< long long long long\n"
                   "//!< long",
                   getLLVMStyleWithColumns(20)));

  // Don't bring leading whitespace up while reflowing.
  EXPECT_EQ("/*  long long long\n"
            " * long long long\n"
            " */",
            format("/*  long long long long\n"
                   " *  long long\n"
                   " */",
                   getLLVMStyleWithColumns(20)));

  // Reflow the last line of a block comment with its trailing '*/'.
  EXPECT_EQ("/* long long long\n"
            "   long long */",
            format("/* long long long long\n"
                   "   long */",
                   getLLVMStyleWithColumns(20)));

  // Reflow two short lines; keep the postfix of the last one.
  EXPECT_EQ("/* long long long\n"
            " * long long long */",
            format("/* long long long long\n"
                   " * long\n"
                   " * long */",
                   getLLVMStyleWithColumns(20)));

  // Put the postfix of the last short reflow line on a newline if it doesn't
  // fit.
  EXPECT_EQ("/* long long long\n"
            " * long long longg\n"
            " */",
            format("/* long long long long\n"
                   " * long\n"
                   " * longg */",
                   getLLVMStyleWithColumns(20)));

  // Reflow lines with leading whitespace.
  EXPECT_EQ("{\n"
            "  /*\n"
            "   * long long long\n"
            "   * long long long\n"
            "   * long long long\n"
            "   */\n"
            "}",
            format("{\n"
                   "/*\n"
                   " * long long long long\n"
                   " *   long\n"
                   " * long long long long\n"
                   " */\n"
                   "}",
                   getLLVMStyleWithColumns(20)));

  // Break single line block comments that are first in the line with ' *'
  // decoration.
  EXPECT_EQ("/* long long long\n"
            " * long */",
            format("/* long long long long */", getLLVMStyleWithColumns(20)));

  // Break single line block comment that are not first in the line with '  '
  // decoration.
  EXPECT_EQ("int i; /* long long\n"
            "          long */",
            format("int i; /* long long long */", getLLVMStyleWithColumns(20)));

  // Reflow a line that goes just over the column limit.
  EXPECT_EQ("// long long long\n"
            "// lon long",
            format("// long long long lon\n"
                   "// long",
                   getLLVMStyleWithColumns(20)));

  // Stop reflowing if the next line has a different indentation than the
  // previous line.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "//  long long\n"
            "//  long",
            format("// long long long long\n"
                   "//  long long\n"
                   "//  long",
                   getLLVMStyleWithColumns(20)));

  // Reflow into the last part of a really long line that has been broken into
  // multiple lines.
  EXPECT_EQ("// long long long\n"
            "// long long long\n"
            "// long long long",
            format("// long long long long long long long long\n"
                   "// long",
                   getLLVMStyleWithColumns(20)));

  // Break the first line, then reflow the beginning of the second and third
  // line up.
  EXPECT_EQ("// long long long\n"
            "// lon1 lon2 lon2\n"
            "// lon2 lon3 lon3",
            format("// long long long lon1\n"
                   "// lon2 lon2 lon2\n"
                   "// lon3 lon3",
                   getLLVMStyleWithColumns(20)));

  // Reflow the beginning of the second line, then break the rest.
  EXPECT_EQ("// long long long\n"
            "// lon1 lon2 lon2\n"
            "// lon2 lon2 lon2\n"
            "// lon3",
            format("// long long long lon1\n"
                   "// lon2 lon2 lon2 lon2 lon2 lon3",
                   getLLVMStyleWithColumns(20)));

  // Shrink the first line, then reflow the second line up.
  EXPECT_EQ("// long long long", format("// long              long\n"
                                        "// long",
                                        getLLVMStyleWithColumns(20)));

  // Don't shrink leading whitespace.
  verifyNoChange("int i; ///           a", getLLVMStyleWithColumns(20));

  // Shrink trailing whitespace if there is no postfix and reflow.
  EXPECT_EQ("// long long long\n"
            "// long long",
            format("// long long long long    \n"
                   "// long",
                   getLLVMStyleWithColumns(20)));

  // Shrink trailing whitespace to a single one if there is postfix.
  EXPECT_EQ("/* long long long */",
            format("/* long long long     */", getLLVMStyleWithColumns(20)));

  // Break a block comment postfix if exceeding the line limit.
  EXPECT_EQ("/*               long\n"
            " */",
            format("/*               long */", getLLVMStyleWithColumns(20)));

  // Reflow indented comments.
  EXPECT_EQ("{\n"
            "  // long long long\n"
            "  // long long\n"
            "  int i; /* long lon\n"
            "            g long\n"
            "          */\n"
            "}",
            format("{\n"
                   "  // long long long long\n"
                   "  // long\n"
                   "  int i; /* long lon g\n"
                   "            long */\n"
                   "}",
                   getLLVMStyleWithColumns(20)));

  // Don't realign trailing comments after reflow has happened.
  EXPECT_EQ("// long long long\n"
            "// long long\n"
            "long i; // long",
            format("// long long long long\n"
                   "// long\n"
                   "long i; // long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// long long long\n"
            "// longng long long\n"
            "// long lo",
            format("// long long long longng\n"
                   "// long long long\n"
                   "// lo",
                   getLLVMStyleWithColumns(20)));

  // Reflow lines after a broken line.
  EXPECT_EQ("int a; // Trailing\n"
            "       // comment on\n"
            "       // 2 or 3\n"
            "       // lines.",
            format("int a; // Trailing comment\n"
                   "       // on 2\n"
                   "       // or 3\n"
                   "       // lines.",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/// This long line\n"
            "/// gets reflown.",
            format("/// This long line gets\n"
                   "/// reflown.",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//! This long line\n"
            "//! gets reflown.",
            format(" //! This long line gets\n"
                   " //! reflown.",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/* This long line\n"
            " * gets reflown.\n"
            " */",
            format("/* This long line gets\n"
                   " * reflown.\n"
                   " */",
                   getLLVMStyleWithColumns(20)));

  // Reflow after indentation makes a line too long.
  EXPECT_EQ("{\n"
            "  // long long long\n"
            "  // lo long\n"
            "}",
            format("{\n"
                   "// long long long lo\n"
                   "// long\n"
                   "}",
                   getLLVMStyleWithColumns(20)));

  // Break and reflow multiple lines.
  EXPECT_EQ("/*\n"
            " * Reflow the end of\n"
            " * line by 11 22 33\n"
            " * 4.\n"
            " */",
            format("/*\n"
                   " * Reflow the end of line\n"
                   " * by\n"
                   " * 11\n"
                   " * 22\n"
                   " * 33\n"
                   " * 4.\n"
                   " */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/// First line gets\n"
            "/// broken. Second\n"
            "/// line gets\n"
            "/// reflown and\n"
            "/// broken. Third\n"
            "/// gets reflown.",
            format("/// First line gets broken.\n"
                   "/// Second line gets reflown and broken.\n"
                   "/// Third gets reflown.",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("int i; // first long\n"
            "       // long snd\n"
            "       // long.",
            format("int i; // first long long\n"
                   "       // snd long.",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("{\n"
            "  // first long line\n"
            "  // line second\n"
            "  // long line line\n"
            "  // third long line\n"
            "  // line\n"
            "}",
            format("{\n"
                   "  // first long line line\n"
                   "  // second long line line\n"
                   "  // third long line line\n"
                   "}",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("int i; /* first line\n"
            "        * second\n"
            "        * line third\n"
            "        * line\n"
            "        */",
            format("int i; /* first line\n"
                   "        * second line\n"
                   "        * third line\n"
                   "        */",
                   getLLVMStyleWithColumns(20)));

  // Reflow the last two lines of a section that starts with a line having
  // different indentation.
  EXPECT_EQ("//     long\n"
            "// long long long\n"
            "// long long",
            format("//     long\n"
                   "// long long long long\n"
                   "// long",
                   getLLVMStyleWithColumns(20)));

  // Keep the block comment endling '*/' while reflowing.
  EXPECT_EQ("/* Long long long\n"
            " * line short */",
            format("/* Long long long line\n"
                   " * short */",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow between separate blocks of comments.
  EXPECT_EQ("/* First comment\n"
            " * block will */\n"
            "/* Snd\n"
            " */",
            format("/* First comment block\n"
                   " * will */\n"
                   "/* Snd\n"
                   " */",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow across blank comment lines.
  EXPECT_EQ("int i; // This long\n"
            "       // line gets\n"
            "       // broken.\n"
            "       //\n"
            "       // keep.",
            format("int i; // This long line gets broken.\n"
                   "       //  \n"
                   "       // keep.",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("{\n"
            "  /// long long long\n"
            "  /// long long\n"
            "  ///\n"
            "  /// long\n"
            "}",
            format("{\n"
                   "  /// long long long long\n"
                   "  /// long\n"
                   "  ///\n"
                   "  /// long\n"
                   "}",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//! long long long\n"
            "//! long\n"
            "\n"
            "//! long",
            format("//! long long long long\n"
                   "\n"
                   "//! long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/* long long long\n"
            "   long\n"
            "\n"
            "   long */",
            format("/* long long long long\n"
                   "\n"
                   "   long */",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/* long long long\n"
            " * long\n"
            " *\n"
            " * long */",
            format("/* long long long long\n"
                   " *\n"
                   " * long */",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines having content that is a single character.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// l",
            format("// long long long long\n"
                   "// l",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines starting with two punctuation characters.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// ... --- ...",
            format("// long long long long\n"
                   "// ... --- ...",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines starting with '@'.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// @param arg",
            format("// long long long long\n"
                   "// @param arg",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines starting with '\'.
  verifyFormat("// long long long\n"
               "// long\n"
               "// \\param arg",
               "// long long long long\n"
               "// \\param arg",
               getLLVMStyleWithColumns(20));

  // Don't reflow lines starting with 'TODO'.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// TODO: long",
            format("// long long long long\n"
                   "// TODO: long",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines starting with 'FIXME'.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// FIXME: long",
            format("// long long long long\n"
                   "// FIXME: long",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines starting with 'XXX'.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// XXX: long",
            format("// long long long long\n"
                   "// XXX: long",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow comment pragmas.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "// IWYU pragma:",
            format("// long long long long\n"
                   "// IWYU pragma:",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/* long long long\n"
            " * long\n"
            " * IWYU pragma:\n"
            " */",
            format("/* long long long long\n"
                   " * IWYU pragma:\n"
                   " */",
                   getLLVMStyleWithColumns(20)));

  // Reflow lines that have a non-punctuation character among their first 2
  // characters.
  EXPECT_EQ("// long long long\n"
            "// long 'long'",
            format("// long long long long\n"
                   "// 'long'",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow between separate blocks of comments.
  EXPECT_EQ("/* First comment\n"
            " * block will */\n"
            "/* Snd\n"
            " */",
            format("/* First comment block\n"
                   " * will */\n"
                   "/* Snd\n"
                   " */",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow lines having different indentation.
  EXPECT_EQ("// long long long\n"
            "// long\n"
            "//  long",
            format("// long long long long\n"
                   "//  long",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow separate bullets in list
  EXPECT_EQ("// - long long long\n"
            "// long\n"
            "// - long",
            format("// - long long long long\n"
                   "// - long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// * long long long\n"
            "// long\n"
            "// * long",
            format("// * long long long long\n"
                   "// * long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// + long long long\n"
            "// long\n"
            "// + long",
            format("// + long long long long\n"
                   "// + long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// 1. long long long\n"
            "// long\n"
            "// 2. long",
            format("// 1. long long long long\n"
                   "// 2. long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// -# long long long\n"
            "// long\n"
            "// -# long",
            format("// -# long long long long\n"
                   "// -# long",
                   getLLVMStyleWithColumns(20)));

  EXPECT_EQ("// - long long long\n"
            "// long long long\n"
            "// - long",
            format("// - long long long long\n"
                   "// long long\n"
                   "// - long",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("// - long long long\n"
            "// long long long\n"
            "// long\n"
            "// - long",
            format("// - long long long long\n"
                   "// long long long\n"
                   "// - long",
                   getLLVMStyleWithColumns(20)));

  // Large number (>2 digits) are not list items
  EXPECT_EQ("// long long long\n"
            "// long 1024. long.",
            format("// long long long long\n"
                   "// 1024. long.",
                   getLLVMStyleWithColumns(20)));

  // Do not break before number, to avoid introducing a non-reflowable doxygen
  // list item.
  EXPECT_EQ("// long long\n"
            "// long 10. long.",
            format("// long long long 10.\n"
                   "// long.",
                   getLLVMStyleWithColumns(20)));

  // Don't break or reflow after implicit string literals.
  verifyFormat("#include <t> // l l l\n"
               "             // l",
               getLLVMStyleWithColumns(20));

  // Don't break or reflow comments on import lines.
  EXPECT_EQ("#include \"t\" /* l l l\n"
            "                * l */",
            format("#include \"t\" /* l l l\n"
                   "                * l */",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow between different trailing comment sections.
  EXPECT_EQ("int i; // long long\n"
            "       // long\n"
            "int j; // long long\n"
            "       // long",
            format("int i; // long long long\n"
                   "int j; // long long long",
                   getLLVMStyleWithColumns(20)));

  // Don't reflow if the first word on the next line is longer than the
  // available space at current line.
  EXPECT_EQ("int i; // trigger\n"
            "       // reflow\n"
            "       // longsec",
            format("int i; // trigger reflow\n"
                   "       // longsec",
                   getLLVMStyleWithColumns(20)));

  // Simple case that correctly handles reflow in parameter lists.
  EXPECT_EQ("a = f(/* looooooooong\n"
            "       * long long\n"
            "       */\n"
            "      a);",
            format("a = f(/* looooooooong long\n* long\n*/ a);",
                   getLLVMStyleWithColumns(22)));
  // Tricky case that has fewer lines if we reflow the comment, ending up with
  // fewer lines.
  EXPECT_EQ("a = f(/* loooooong\n"
            "       * long long\n"
            "       */\n"
            "      a);",
            format("a = f(/* loooooong long\n* long\n*/ a);",
                   getLLVMStyleWithColumns(22)));

  // Keep empty comment lines.
  EXPECT_EQ("/**/", format(" /**/", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/* */", format(" /* */", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("/*  */", format(" /*  */", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("//", format(" //  ", getLLVMStyleWithColumns(20)));
  EXPECT_EQ("///", format(" ///  ", getLLVMStyleWithColumns(20)));
}

TEST_F(FormatTestComments, ReflowsCommentsPrecise) {
  // FIXME: This assumes we do not continue compressing whitespace once we are
  // in reflow mode. Consider compressing whitespace.

  // Test that we stop reflowing precisely at the column limit.
  // After reflowing, "// reflows into   foo" does not fit the column limit,
  // so we compress the whitespace.
  EXPECT_EQ("// some text that\n"
            "// reflows into foo",
            format("// some text that reflows\n"
                   "// into   foo",
                   getLLVMStyleWithColumns(20)));
  // Given one more column, "// reflows into   foo" does fit the limit, so we
  // do not compress the whitespace.
  EXPECT_EQ("// some text that\n"
            "// reflows into   foo",
            format("// some text that reflows\n"
                   "// into   foo",
                   getLLVMStyleWithColumns(21)));

  // Make sure that we correctly account for the space added in the reflow case
  // when making the reflowing decision.
  // First, when the next line ends precisely one column over the limit, do not
  // reflow.
  EXPECT_EQ("// some text that\n"
            "// reflows\n"
            "// into1234567",
            format("// some text that reflows\n"
                   "// into1234567",
                   getLLVMStyleWithColumns(21)));
  // Secondly, when the next line ends later, but the first word in that line
  // is precisely one column over the limit, do not reflow.
  EXPECT_EQ("// some text that\n"
            "// reflows\n"
            "// into1234567 f",
            format("// some text that reflows\n"
                   "// into1234567 f",
                   getLLVMStyleWithColumns(21)));
}

TEST_F(FormatTestComments, ReflowsCommentsWithExtraWhitespace) {
  // Baseline.
  EXPECT_EQ("// some text\n"
            "// that re flows",
            format("// some text that\n"
                   "// re flows",
                   getLLVMStyleWithColumns(16)));
  EXPECT_EQ("// some text\n"
            "// that re flows",
            format("// some text that\n"
                   "// re    flows",
                   getLLVMStyleWithColumns(16)));
  EXPECT_EQ("/* some text\n"
            " * that re flows\n"
            " */",
            format("/* some text that\n"
                   "*      re       flows\n"
                   "*/",
                   getLLVMStyleWithColumns(16)));
  // FIXME: We do not reflow if the indent of two subsequent lines differs;
  // given that this is different behavior from block comments, do we want
  // to keep this?
  EXPECT_EQ("// some text\n"
            "// that\n"
            "//     re flows",
            format("// some text that\n"
                   "//     re       flows",
                   getLLVMStyleWithColumns(16)));
  // Space within parts of a line that fit.
  // FIXME: Use the earliest possible split while reflowing to compress the
  // whitespace within the line.
  EXPECT_EQ("// some text that\n"
            "// does re   flow\n"
            "// more  here",
            format("// some text that does\n"
                   "// re   flow  more  here",
                   getLLVMStyleWithColumns(21)));
}

TEST_F(FormatTestComments, IgnoresIf0Contents) {
  EXPECT_EQ("#if 0\n"
            "}{)(&*(^%%#%@! fsadj f;ldjs ,:;| <<<>>>][)(][\n"
            "#endif\n"
            "void f() {}",
            format("#if 0\n"
                   "}{)(&*(^%%#%@! fsadj f;ldjs ,:;| <<<>>>][)(][\n"
                   "#endif\n"
                   "void f(  ) {  }"));
  EXPECT_EQ("#if false\n"
            "void f(  ) {  }\n"
            "#endif\n"
            "void g() {}",
            format("#if false\n"
                   "void f(  ) {  }\n"
                   "#endif\n"
                   "void g(  ) {  }"));
  EXPECT_EQ("enum E {\n"
            "  One,\n"
            "  Two,\n"
            "#if 0\n"
            "Three,\n"
            "      Four,\n"
            "#endif\n"
            "  Five\n"
            "};",
            format("enum E {\n"
                   "  One,Two,\n"
                   "#if 0\n"
                   "Three,\n"
                   "      Four,\n"
                   "#endif\n"
                   "  Five};"));
  EXPECT_EQ("enum F {\n"
            "  One,\n"
            "#if 1\n"
            "  Two,\n"
            "#if 0\n"
            "Three,\n"
            "      Four,\n"
            "#endif\n"
            "  Five\n"
            "#endif\n"
            "};",
            format("enum F {\n"
                   "One,\n"
                   "#if 1\n"
                   "Two,\n"
                   "#if 0\n"
                   "Three,\n"
                   "      Four,\n"
                   "#endif\n"
                   "Five\n"
                   "#endif\n"
                   "};"));
  EXPECT_EQ("enum G {\n"
            "  One,\n"
            "#if 0\n"
            "Two,\n"
            "#else\n"
            "  Three,\n"
            "#endif\n"
            "  Four\n"
            "};",
            format("enum G {\n"
                   "One,\n"
                   "#if 0\n"
                   "Two,\n"
                   "#else\n"
                   "Three,\n"
                   "#endif\n"
                   "Four\n"
                   "};"));
  EXPECT_EQ("enum H {\n"
            "  One,\n"
            "#if 0\n"
            "#ifdef Q\n"
            "Two,\n"
            "#else\n"
            "Three,\n"
            "#endif\n"
            "#endif\n"
            "  Four\n"
            "};",
            format("enum H {\n"
                   "One,\n"
                   "#if 0\n"
                   "#ifdef Q\n"
                   "Two,\n"
                   "#else\n"
                   "Three,\n"
                   "#endif\n"
                   "#endif\n"
                   "Four\n"
                   "};"));
  EXPECT_EQ("enum I {\n"
            "  One,\n"
            "#if /* test */ 0 || 1\n"
            "Two,\n"
            "Three,\n"
            "#endif\n"
            "  Four\n"
            "};",
            format("enum I {\n"
                   "One,\n"
                   "#if /* test */ 0 || 1\n"
                   "Two,\n"
                   "Three,\n"
                   "#endif\n"
                   "Four\n"
                   "};"));
  EXPECT_EQ("enum J {\n"
            "  One,\n"
            "#if 0\n"
            "#if 0\n"
            "Two,\n"
            "#else\n"
            "Three,\n"
            "#endif\n"
            "Four,\n"
            "#endif\n"
            "  Five\n"
            "};",
            format("enum J {\n"
                   "One,\n"
                   "#if 0\n"
                   "#if 0\n"
                   "Two,\n"
                   "#else\n"
                   "Three,\n"
                   "#endif\n"
                   "Four,\n"
                   "#endif\n"
                   "Five\n"
                   "};"));

  // Ignore stuff in SWIG-blocks.
  EXPECT_EQ("#ifdef SWIG\n"
            "}{)(&*(^%%#%@! fsadj f;ldjs ,:;| <<<>>>][)(][\n"
            "#endif\n"
            "void f() {}",
            format("#ifdef SWIG\n"
                   "}{)(&*(^%%#%@! fsadj f;ldjs ,:;| <<<>>>][)(][\n"
                   "#endif\n"
                   "void f(  ) {  }"));
  EXPECT_EQ("#ifndef SWIG\n"
            "void f() {}\n"
            "#endif",
            format("#ifndef SWIG\n"
                   "void f(      ) {       }\n"
                   "#endif"));
}

TEST_F(FormatTestComments, DontCrashOnBlockComments) {
  EXPECT_EQ(
      "int xxxxxxxxx; /* "
      "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\n"
      "zzzzzz\n"
      "0*/",
      format("int xxxxxxxxx;                          /* "
             "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy zzzzzz\n"
             "0*/"));
}

TEST_F(FormatTestComments, BlockCommentsInControlLoops) {
  verifyFormat("if (0) /* a comment in a strange place */ {\n"
               "  f();\n"
               "}");
  verifyFormat("if (0) /* a comment in a strange place */ {\n"
               "  f();\n"
               "} /* another comment */ else /* comment #3 */ {\n"
               "  g();\n"
               "}");
  verifyFormat("while (0) /* a comment in a strange place */ {\n"
               "  f();\n"
               "}");
  verifyFormat("for (;;) /* a comment in a strange place */ {\n"
               "  f();\n"
               "}");
  verifyFormat("do /* a comment in a strange place */ {\n"
               "  f();\n"
               "} /* another comment */ while (0);");
}

TEST_F(FormatTestComments, BlockComments) {
  EXPECT_EQ("/* */ /* */ /* */\n/* */ /* */ /* */",
            format("/* *//* */  /* */\n/* *//* */  /* */"));
  EXPECT_EQ("/* */ a /* */ b;", format("  /* */  a/* */  b;"));
  EXPECT_EQ("#define A /*123*/ \\\n"
            "  b\n"
            "/* */\n"
            "someCall(\n"
            "    parameter);",
            format("#define A /*123*/ b\n"
                   "/* */\n"
                   "someCall(parameter);",
                   getLLVMStyleWithColumns(15)));

  EXPECT_EQ("#define A\n"
            "/* */ someCall(\n"
            "    parameter);",
            format("#define A\n"
                   "/* */someCall(parameter);",
                   getLLVMStyleWithColumns(15)));
  verifyNoChange("/*\n**\n*/");
  EXPECT_EQ("/*\n"
            " *\n"
            " * aaaaaa\n"
            " * aaaaaa\n"
            " */",
            format("/*\n"
                   "*\n"
                   " * aaaaaa aaaaaa\n"
                   "*/",
                   getLLVMStyleWithColumns(10)));
  EXPECT_EQ("/*\n"
            "**\n"
            "* aaaaaa\n"
            "* aaaaaa\n"
            "*/",
            format("/*\n"
                   "**\n"
                   "* aaaaaa aaaaaa\n"
                   "*/",
                   getLLVMStyleWithColumns(10)));
  EXPECT_EQ("int aaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
            "    /* line 1\n"
            "       bbbbbbbbbbbb */\n"
            "    bbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
            format("int aaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
                   "    /* line 1\n"
                   "       bbbbbbbbbbbb */ bbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
                   getLLVMStyleWithColumns(50)));

  FormatStyle NoBinPacking = getLLVMStyle();
  NoBinPacking.BinPackParameters = FormatStyle::BPPS_OnePerLine;
  EXPECT_EQ("someFunction(1, /* comment 1 */\n"
            "             2, /* comment 2 */\n"
            "             3, /* comment 3 */\n"
            "             aaaa,\n"
            "             bbbb);",
            format("someFunction (1,   /* comment 1 */\n"
                   "                2, /* comment 2 */  \n"
                   "               3,   /* comment 3 */\n"
                   "aaaa, bbbb );",
                   NoBinPacking));
  verifyFormat(
      "bool aaaaaaaaaaaaa = /* comment: */ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
      "                     aaaaaaaaaaaaaaaaaaaaaaaaaaaa;");
  EXPECT_EQ(
      "bool aaaaaaaaaaaaa = /* trailing comment */\n"
      "    aaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
      "    aaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaa;",
      format(
          "bool       aaaaaaaaaaaaa =       /* trailing comment */\n"
          "    aaaaaaaaaaaaaaaaaaaaaaaaaaa||aaaaaaaaaaaaaaaaaaaaaaaaa    ||\n"
          "    aaaaaaaaaaaaaaaaaaaaaaaaaaaa   || aaaaaaaaaaaaaaaaaaaaaaaaaa;"));
  EXPECT_EQ(
      "int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; /* comment */\n"
      "int bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;   /* comment */\n"
      "int cccccccccccccccccccccccccccccc;       /* comment */",
      format("int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; /* comment */\n"
             "int      bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; /* comment */\n"
             "int    cccccccccccccccccccccccccccccc;  /* comment */"));

  verifyFormat("void f(int * /* unused */) {}");

  EXPECT_EQ("/*\n"
            " **\n"
            " */",
            format("/*\n"
                   " **\n"
                   " */"));
  EXPECT_EQ("/*\n"
            " *q\n"
            " */",
            format("/*\n"
                   " *q\n"
                   " */"));
  EXPECT_EQ("/*\n"
            " * q\n"
            " */",
            format("/*\n"
                   " * q\n"
                   " */"));
  EXPECT_EQ("/*\n"
            " **/",
            format("/*\n"
                   " **/"));
  EXPECT_EQ("/*\n"
            " ***/",
            format("/*\n"
                   " ***/"));
}

TEST_F(FormatTestComments, BlockCommentsInMacros) {
  EXPECT_EQ("#define A          \\\n"
            "  {                \\\n"
            "    /* one line */ \\\n"
            "    someCall();",
            format("#define A {        \\\n"
                   "  /* one line */   \\\n"
                   "  someCall();",
                   getLLVMStyleWithColumns(20)));
  EXPECT_EQ("#define A          \\\n"
            "  {                \\\n"
            "    /* previous */ \\\n"
            "    /* one line */ \\\n"
            "    someCall();",
            format("#define A {        \\\n"
                   "  /* previous */   \\\n"
                   "  /* one line */   \\\n"
                   "  someCall();",
                   getLLVMStyleWithColumns(20)));
}

TEST_F(FormatTestComments, BlockCommentsAtEndOfLine) {
  EXPECT_EQ("a = {\n"
            "    1111 /*    */\n"
            "};",
            format("a = {1111 /*    */\n"
                   "};",
                   getLLVMStyleWithColumns(15)));
  EXPECT_EQ("a = {\n"
            "    1111 /*      */\n"
            "};",
            format("a = {1111 /*      */\n"
                   "};",
                   getLLVMStyleWithColumns(15)));
  EXPECT_EQ("a = {\n"
            "    1111 /*      a\n"
            "          */\n"
            "};",
            format("a = {1111 /*      a */\n"
                   "};",
                   getLLVMStyleWithColumns(15)));
}

TEST_F(FormatTestComments, BreaksAfterMultilineBlockCommentsInParamLists) {
  EXPECT_EQ("a = f(/* long\n"
            "         long */\n"
            "      a);",
            format("a = f(/* long long */ a);", getLLVMStyleWithColumns(16)));
  EXPECT_EQ("a = f(\n"
            "    /* long\n"
            "       long */\n"
            "    a);",
            format("a = f(/* long long */ a);", getLLVMStyleWithColumns(15)));

  EXPECT_EQ("a = f(/* long\n"
            "         long\n"
            "       */\n"
            "      a);",
            format("a = f(/* long\n"
                   "         long\n"
                   "       */a);",
                   getLLVMStyleWithColumns(16)));

  EXPECT_EQ("a = f(/* long\n"
            "         long\n"
            "       */\n"
            "      a);",
            format("a = f(/* long\n"
                   "         long\n"
                   "       */ a);",
                   getLLVMStyleWithColumns(16)));

  EXPECT_EQ("a = f(/* long\n"
            "         long\n"
            "       */\n"
            "      (1 + 1));",
            format("a = f(/* long\n"
                   "         long\n"
                   "       */ (1 + 1));",
                   getLLVMStyleWithColumns(16)));

  EXPECT_EQ(
      "a = f(a,\n"
      "      /* long\n"
      "         long */\n"
      "      b);",
      format("a = f(a, /* long long */ b);", getLLVMStyleWithColumns(16)));

  EXPECT_EQ(
      "a = f(\n"
      "    a,\n"
      "    /* long\n"
      "       long */\n"
      "    b);",
      format("a = f(a, /* long long */ b);", getLLVMStyleWithColumns(15)));

  EXPECT_EQ("a = f(a,\n"
            "      /* long\n"
            "         long */\n"
            "      (1 + 1));",
            format("a = f(a, /* long long */ (1 + 1));",
                   getLLVMStyleWithColumns(16)));
  EXPECT_EQ("a = f(\n"
            "    a,\n"
            "    /* long\n"
            "       long */\n"
            "    (1 + 1));",
            format("a = f(a, /* long long */ (1 + 1));",
                   getLLVMStyleWithColumns(15)));
}

TEST_F(FormatTestComments, IndentLineCommentsInStartOfBlockAtEndOfFile) {
  verifyFormat("{\n"
               "  // a\n"
               "  // b");
}

TEST_F(FormatTestComments, AlignTrailingComments) {
  EXPECT_EQ("#define MACRO(V)                       \\\n"
            "  V(Rt2) /* one more char */           \\\n"
            "  V(Rs)  /* than here  */              \\\n"
            "/* comment 3 */\n",
            format("#define MACRO(V)\\\n"
                   "V(Rt2)  /* one more char */ \\\n"
                   "V(Rs) /* than here  */    \\\n"
                   "/* comment 3 */\n",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("int i = f(abc, // line 1\n"
            "          d,   // line 2\n"
            "               // line 3\n"
            "          b);",
            format("int i = f(abc, // line 1\n"
                   "          d, // line 2\n"
                   "             // line 3\n"
                   "          b);",
                   getLLVMStyleWithColumns(40)));

  // Align newly broken trailing comments.
  EXPECT_EQ("int ab; // line\n"
            "int a;  // long\n"
            "        // long",
            format("int ab; // line\n"
                   "int a; // long long",
                   getLLVMStyleWithColumns(15)));
  EXPECT_EQ("int ab; // line\n"
            "int a;  // long\n"
            "        // long\n"
            "        // long",
            format("int ab; // line\n"
                   "int a; // long long\n"
                   "       // long",
                   getLLVMStyleWithColumns(15)));
  EXPECT_EQ("int ab; // line\n"
            "int a;  // long\n"
            "        // long\n"
            "pt c;   // long",
            format("int ab; // line\n"
                   "int a; // long long\n"
                   "pt c; // long",
                   getLLVMStyleWithColumns(15)));
  EXPECT_EQ("int ab; // line\n"
            "int a;  // long\n"
            "        // long\n"
            "\n"
            "// long",
            format("int ab; // line\n"
                   "int a; // long long\n"
                   "\n"
                   "// long",
                   getLLVMStyleWithColumns(15)));

  // Don't align newly broken trailing comments if that would put them over the
  // column limit.
  EXPECT_EQ("int i, j; // line 1\n"
            "int k; // line longg\n"
            "       // long",
            format("int i, j; // line 1\n"
                   "int k; // line longg long",
                   getLLVMStyleWithColumns(20)));

  // Always align if ColumnLimit = 0
  EXPECT_EQ("int i, j; // line 1\n"
            "int k;    // line longg long",
            format("int i, j; // line 1\n"
                   "int k; // line longg long",
                   getLLVMStyleWithColumns(0)));

  // Align comment line sections aligned with the next token with the next
  // token.
  EXPECT_EQ("class A {\n"
            "public: // public comment\n"
            "  // comment about a\n"
            "  int a;\n"
            "};",
            format("class A {\n"
                   "public: // public comment\n"
                   "  // comment about a\n"
                   "  int a;\n"
                   "};",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("class A {\n"
            "public: // public comment 1\n"
            "        // public comment 2\n"
            "  // comment 1 about a\n"
            "  // comment 2 about a\n"
            "  int a;\n"
            "};",
            format("class A {\n"
                   "public: // public comment 1\n"
                   "   // public comment 2\n"
                   "  // comment 1 about a\n"
                   "  // comment 2 about a\n"
                   "  int a;\n"
                   "};",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("int f(int n) { // comment line 1 on f\n"
            "               // comment line 2 on f\n"
            "  // comment line 1 before return\n"
            "  // comment line 2 before return\n"
            "  return n; // comment line 1 on return\n"
            "            // comment line 2 on return\n"
            "  // comment line 1 after return\n"
            "}",
            format("int f(int n) { // comment line 1 on f\n"
                   "   // comment line 2 on f\n"
                   "  // comment line 1 before return\n"
                   "  // comment line 2 before return\n"
                   "  return n; // comment line 1 on return\n"
                   "   // comment line 2 on return\n"
                   "  // comment line 1 after return\n"
                   "}",
                   getLLVMStyleWithColumns(40)));
  EXPECT_EQ("int f(int n) {\n"
            "  switch (n) { // comment line 1 on switch\n"
            "               // comment line 2 on switch\n"
            "  // comment line 1 before case 1\n"
            "  // comment line 2 before case 1\n"
            "  case 1: // comment line 1 on case 1\n"
            "          // comment line 2 on case 1\n"
            "    // comment line 1 before return 1\n"
            "    // comment line 2 before return 1\n"
            "    return 1; // comment line 1 on return 1\n"
            "              // comment line 2 on return 1\n"
            "  // comment line 1 before default\n"
            "  // comment line 2 before default\n"
            "  default: // comment line 1 on default\n"
            "           // comment line 2 on default\n"
            "    // comment line 1 before return 2\n"
            "    return 2 * f(n - 1); // comment line 1 on return 2\n"
            "                         // comment line 2 on return 2\n"
            "    // comment line 1 after return\n"
            "    // comment line 2 after return\n"
            "  }\n"
            "}",
            format("int f(int n) {\n"
                   "  switch (n) { // comment line 1 on switch\n"
                   "              // comment line 2 on switch\n"
                   "    // comment line 1 before case 1\n"
                   "    // comment line 2 before case 1\n"
                   "    case 1: // comment line 1 on case 1\n"
                   "              // comment line 2 on case 1\n"
                   "    // comment line 1 before return 1\n"
                   "    // comment line 2 before return 1\n"
                   "    return 1;  // comment line 1 on return 1\n"
                   "             // comment line 2 on return 1\n"
                   "    // comment line 1 before default\n"
                   "    // comment line 2 before default\n"
                   "    default:   // comment line 1 on default\n"
                   "                // comment line 2 on default\n"
                   "    // comment line 1 before return 2\n"
                   "    return 2 * f(n - 1); // comment line 1 on return 2\n"
                   "                        // comment line 2 on return 2\n"
                   "    // comment line 1 after return\n"
                   "     // comment line 2 after return\n"
                   "  }\n"
                   "}",
                   getLLVMStyleWithColumns(80)));

  // If all the lines in a sequence of line comments are aligned with the next
  // token, the first line belongs to the previous token and the other lines
  // belong to the next token.
  EXPECT_EQ("int a; // line about a\n"
            "long b;",
            format("int a; // line about a\n"
                   "       long b;",
                   getLLVMStyleWithColumns(80)));
  EXPECT_EQ("int a; // line about a\n"
            "// line about b\n"
            "long b;",
            format("int a; // line about a\n"
                   "       // line about b\n"
                   "       long b;",
                   getLLVMStyleWithColumns(80)));
  EXPECT_EQ("int a; // line about a\n"
            "// line 1 about b\n"
            "// line 2 about b\n"
            "long b;",
            format("int a; // line about a\n"
                   "       // line 1 about b\n"
                   "       // line 2 about b\n"
                   "       long b;",
                   getLLVMStyleWithColumns(80)));

  // Checks an edge case in preprocessor handling.
  // These comments should *not* be aligned
  EXPECT_EQ(
      "#if FOO\n"
      "#else\n"
      "long a; // Line about a\n"
      "#endif\n"
      "#if BAR\n"
      "#else\n"
      "long b_long_name; // Line about b\n"
      "#endif",
      format("#if FOO\n"
             "#else\n"
             "long a;           // Line about a\n" // Previous (bad) behavior
             "#endif\n"
             "#if BAR\n"
             "#else\n"
             "long b_long_name; // Line about b\n"
             "#endif",
             getLLVMStyleWithColumns(80)));

  // bug 47589
  EXPECT_EQ(
      "namespace m {\n\n"
      "#define FOO_GLOBAL 0      // Global scope.\n"
      "#define FOO_LINKLOCAL 1   // Link-local scope.\n"
      "#define FOO_SITELOCAL 2   // Site-local scope (deprecated).\n"
      "#define FOO_UNIQUELOCAL 3 // Unique local\n"
      "#define FOO_NODELOCAL 4   // Loopback\n\n"
      "} // namespace m",
      format("namespace m {\n\n"
             "#define FOO_GLOBAL 0   // Global scope.\n"
             "#define FOO_LINKLOCAL 1  // Link-local scope.\n"
             "#define FOO_SITELOCAL 2  // Site-local scope (deprecated).\n"
             "#define FOO_UNIQUELOCAL 3 // Unique local\n"
             "#define FOO_NODELOCAL 4  // Loopback\n\n"
             "} // namespace m",
             getLLVMStyleWithColumns(80)));

  // https://llvm.org/PR53441
  verifyFormat("/* */  //\n"
               "int a; //");
  verifyFormat("/**/   //\n"
               "int a; //");
}

TEST_F(FormatTestComments, AlignTrailingCommentsAcrossEmptyLines) {
  FormatStyle Style = getLLVMStyle();
  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Always;
  Style.AlignTrailingComments.OverEmptyLines = 1;
  verifyFormat("#include \"a.h\"  // simple\n"
               "\n"
               "#include \"aa.h\" // example case",
               Style);

  verifyFormat("#include \"a.h\"   // align across\n"
               "\n"
               "#include \"aa.h\"  // two empty lines\n"
               "\n"
               "#include \"aaa.h\" // in a row",
               Style);

  verifyFormat("#include \"a.h\"      // align\n"
               "#include \"aa.h\"     // comment\n"
               "#include \"aaa.h\"    // blocks\n"
               "\n"
               "#include \"aaaa.h\"   // across\n"
               "#include \"aaaaa.h\"  // one\n"
               "#include \"aaaaaa.h\" // empty line",
               Style);

  verifyFormat("#include \"a.h\"  // align trailing comments\n"
               "#include \"a.h\"\n"
               "#include \"aa.h\" // across a line without comment",
               Style);

  verifyFormat("#include \"a.h\"   // align across\n"
               "#include \"a.h\"\n"
               "#include \"aa.h\"  // two lines without comment\n"
               "#include \"a.h\"\n"
               "#include \"aaa.h\" // in a row",
               Style);

  verifyFormat("#include \"a.h\"      // align\n"
               "#include \"aa.h\"     // comment\n"
               "#include \"aaa.h\"    // blocks\n"
               "#include \"a.h\"\n"
               "#include \"aaaa.h\"   // across\n"
               "#include \"aaaaa.h\"  // a line without\n"
               "#include \"aaaaaa.h\" // comment",
               Style);

  // Start of testing OverEmptyLines
  Style.MaxEmptyLinesToKeep = 3;
  Style.AlignTrailingComments.OverEmptyLines = 2;
  // Cannot use verifyFormat here
  // test::messUp removes all new lines which changes the logic
  EXPECT_EQ("#include \"a.h\" // comment\n"
            "\n"
            "\n"
            "\n"
            "#include \"ab.h\"      // comment\n"
            "\n"
            "\n"
            "#include \"abcdefg.h\" // comment",
            format("#include \"a.h\" // comment\n"
                   "\n"
                   "\n"
                   "\n"
                   "#include \"ab.h\" // comment\n"
                   "\n"
                   "\n"
                   "#include \"abcdefg.h\" // comment",
                   Style));

  Style.MaxEmptyLinesToKeep = 1;
  Style.AlignTrailingComments.OverEmptyLines = 1;
  // End of testing OverEmptyLines

  Style.ColumnLimit = 15;
  EXPECT_EQ("int ab; // line\n"
            "int a;  // long\n"
            "        // long\n"
            "\n"
            "        // long",
            format("int ab; // line\n"
                   "int a; // long long\n"
                   "\n"
                   "// long",
                   Style));

  Style.ColumnLimit = 15;
  EXPECT_EQ("int ab; // line\n"
            "\n"
            "int a;  // long\n"
            "        // long",
            format("int ab; // line\n"
                   "\n"
                   "int a; // long long",
                   Style));

  Style.ColumnLimit = 30;
  EXPECT_EQ("int foo = 12345; // comment\n"
            "int bar =\n"
            "    1234;  // This is a very\n"
            "           // long comment\n"
            "           // which is wrapped\n"
            "           // arround.\n"
            "\n"
            "int x = 2; // Is this still\n"
            "           // aligned?",
            format("int foo = 12345; // comment\n"
                   "int bar = 1234; // This is a very long comment\n"
                   "                // which is wrapped arround.\n"
                   "\n"
                   "int x = 2; // Is this still aligned?",
                   Style));

  Style.ColumnLimit = 35;
  EXPECT_EQ("int foo = 12345; // comment\n"
            "int bar =\n"
            "    1234; // This is a very long\n"
            "          // comment which is\n"
            "          // wrapped arround.\n"
            "\n"
            "int x =\n"
            "    2; // Is this still aligned?",
            format("int foo = 12345; // comment\n"
                   "int bar = 1234; // This is a very long comment\n"
                   "                // which is wrapped arround.\n"
                   "\n"
                   "int x = 2; // Is this still aligned?",
                   Style));

  Style.ColumnLimit = 40;
  EXPECT_EQ("int foo = 12345; // comment\n"
            "int bar =\n"
            "    1234; // This is a very long comment\n"
            "          // which is wrapped arround.\n"
            "\n"
            "int x = 2; // Is this still aligned?",
            format("int foo = 12345; // comment\n"
                   "int bar = 1234; // This is a very long comment\n"
                   "                // which is wrapped arround.\n"
                   "\n"
                   "int x = 2; // Is this still aligned?",
                   Style));

  Style.ColumnLimit = 45;
  EXPECT_EQ("int foo = 12345; // comment\n"
            "int bar =\n"
            "    1234;  // This is a very long comment\n"
            "           // which is wrapped arround.\n"
            "\n"
            "int x = 2; // Is this still aligned?",
            format("int foo = 12345; // comment\n"
                   "int bar = 1234; // This is a very long comment\n"
                   "                // which is wrapped arround.\n"
                   "\n"
                   "int x = 2; // Is this still aligned?",
                   Style));

  Style.ColumnLimit = 80;
  EXPECT_EQ("int a; // line about a\n"
            "\n"
            "// line about b\n"
            "long b;",
            format("int a; // line about a\n"
                   "\n"
                   "       // line about b\n"
                   "       long b;",
                   Style));

  Style.ColumnLimit = 80;
  EXPECT_EQ("int a; // line about a\n"
            "\n"
            "// line 1 about b\n"
            "// line 2 about b\n"
            "long b;",
            format("int a; // line about a\n"
                   "\n"
                   "       // line 1 about b\n"
                   "       // line 2 about b\n"
                   "       long b;",
                   Style));
}

TEST_F(FormatTestComments, AlignTrailingCommentsLeave) {
  FormatStyle Style = getLLVMStyle();
  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Leave;

  EXPECT_EQ("int a;// do not touch\n"
            "int b; // any comments\n"
            "int c;  // comment\n"
            "int d;   // comment",
            format("int a;// do not touch\n"
                   "int b; // any comments\n"
                   "int c;  // comment\n"
                   "int d;   // comment",
                   Style));

  EXPECT_EQ("int a;   // do not touch\n"
            "int b;  // any comments\n"
            "int c; // comment\n"
            "int d;// comment",
            format("int a;   // do not touch\n"
                   "int b;  // any comments\n"
                   "int c; // comment\n"
                   "int d;// comment",
                   Style));

  EXPECT_EQ("// do not touch\n"
            "int a;  // any comments\n"
            "\n"
            "   // comment\n"
            "// comment\n"
            "\n"
            "// comment",
            format("// do not touch\n"
                   "int a;  // any comments\n"
                   "\n"
                   "   // comment\n"
                   "// comment\n"
                   "\n"
                   "// comment",
                   Style));

  EXPECT_EQ("// do not touch\n"
            "int a;  // any comments\n"
            "\n"
            "   // comment\n"
            "// comment\n"
            "\n"
            "// comment",
            format("// do not touch\n"
                   "int a;  // any comments\n"
                   "\n"
                   "\n"
                   "   // comment\n"
                   "// comment\n"
                   "\n"
                   "\n"
                   "// comment",
                   Style));

  verifyFormat("namespace ns {\n"
               "int i;\n"
               "int j;\n"
               "} // namespace ns",
               "namespace ns {\n"
               "int i;\n"
               "int j;\n"
               "}",
               Style);

  Style.AlignEscapedNewlines = FormatStyle::ENAS_Left;
  verifyNoChange("#define FOO    \\\n"
                 "  /* foo(); */ \\\n"
                 "  bar();",
                 Style);

  // Allow to keep 2 empty lines
  Style.MaxEmptyLinesToKeep = 2;
  EXPECT_EQ("// do not touch\n"
            "int a;  // any comments\n"
            "\n"
            "\n"
            "   // comment\n"
            "// comment\n"
            "\n"
            "// comment",
            format("// do not touch\n"
                   "int a;  // any comments\n"
                   "\n"
                   "\n"
                   "   // comment\n"
                   "// comment\n"
                   "\n"
                   "// comment",
                   Style));
  Style.MaxEmptyLinesToKeep = 1;

  // Just format comments normally when leaving exceeds the column limit
  Style.ColumnLimit = 35;
  EXPECT_EQ("int foo = 12345; // comment\n"
            "int bar =\n"
            "    1234; // This is a very long\n"
            "          // comment which is\n"
            "          // wrapped arround.",
            format("int foo = 12345; // comment\n"
                   "int bar = 1234;       // This is a very long comment\n"
                   "          // which is wrapped arround.",
                   Style));

  Style = getLLVMStyle();
  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Leave;
  Style.TabWidth = 2;
  Style.UseTab = FormatStyle::UT_ForIndentation;
  verifyNoChange("{\n"
                 "\t// f\n"
                 "\tf();\n"
                 "\n"
                 "\t// g\n"
                 "\tg();\n"
                 "\t{\n"
                 "\t\t// h();  // h\n"
                 "\t\tfoo();  // foo\n"
                 "\t}\n"
                 "}",
                 Style);
}

TEST_F(FormatTestComments, DontAlignNamespaceComments) {
  FormatStyle Style = getLLVMStyle();
  Style.NamespaceIndentation = FormatStyle::NI_All;
  Style.NamespaceMacros.push_back("TESTSUITE");
  Style.ShortNamespaceLines = 0;

  StringRef Input = "namespace A {\n"
                    "  TESTSUITE(B) {\n"
                    "    namespace C {\n"
                    "      namespace D { //\n"
                    "      } // namespace D\n"
                    "      std::string Foo = Bar; // Comment\n"
                    "      std::string BazString = Baz;   // C2\n"
                    "    }          // namespace C\n"
                    "  }\n"
                    "} // NaMeSpAcE A";

  EXPECT_TRUE(Style.FixNamespaceComments);
  EXPECT_EQ(Style.AlignTrailingComments.Kind, FormatStyle::TCAS_Always);
  verifyFormat("namespace A {\n"
               "  TESTSUITE(B) {\n"
               "    namespace C {\n"
               "      namespace D { //\n"
               "      } // namespace D\n"
               "      std::string Foo = Bar;       // Comment\n"
               "      std::string BazString = Baz; // C2\n"
               "    } // namespace C\n"
               "  } // TESTSUITE(B)\n"
               "} // NaMeSpAcE A",
               Input, Style);

  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Never;
  verifyFormat("namespace A {\n"
               "  TESTSUITE(B) {\n"
               "    namespace C {\n"
               "      namespace D { //\n"
               "      } // namespace D\n"
               "      std::string Foo = Bar; // Comment\n"
               "      std::string BazString = Baz; // C2\n"
               "    } // namespace C\n"
               "  } // TESTSUITE(B)\n"
               "} // NaMeSpAcE A",
               Input, Style);

  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Leave;
  verifyFormat("namespace A {\n"
               "  TESTSUITE(B) {\n"
               "    namespace C {\n"
               "      namespace D { //\n"
               "      } // namespace D\n"
               "      std::string Foo = Bar; // Comment\n"
               "      std::string BazString = Baz;   // C2\n"
               "    }          // namespace C\n"
               "  } // TESTSUITE(B)\n"
               "} // NaMeSpAcE A",
               Input, Style);

  Style.FixNamespaceComments = false;
  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Always;
  verifyFormat("namespace A {\n"
               "  TESTSUITE(B) {\n"
               "    namespace C {\n"
               "      namespace D { //\n"
               "      } // namespace D\n"
               "      std::string Foo = Bar;       // Comment\n"
               "      std::string BazString = Baz; // C2\n"
               "    } // namespace C\n"
               "  }\n"
               "} // NaMeSpAcE A",
               Input, Style);

  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Never;
  verifyFormat("namespace A {\n"
               "  TESTSUITE(B) {\n"
               "    namespace C {\n"
               "      namespace D { //\n"
               "      } // namespace D\n"
               "      std::string Foo = Bar; // Comment\n"
               "      std::string BazString = Baz; // C2\n"
               "    } // namespace C\n"
               "  }\n"
               "} // NaMeSpAcE A",
               Input, Style);

  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Leave;
  verifyFormat("namespace A {\n"
               "  TESTSUITE(B) {\n"
               "    namespace C {\n"
               "      namespace D { //\n"
               "      } // namespace D\n"
               "      std::string Foo = Bar; // Comment\n"
               "      std::string BazString = Baz;   // C2\n"
               "    }          // namespace C\n"
               "  }\n"
               "} // NaMeSpAcE A",
               Input, Style);

  Style.AlignTrailingComments.Kind = FormatStyle::TCAS_Always;
  Style.FixNamespaceComments = true;
  Input = "namespace A {\n"
          "  int Foo;\n"
          "  int Bar;\n"
          "}\n"
          "// Comment";

  verifyFormat("namespace A {\n"
               "  int Foo;\n"
               "  int Bar;\n"
               "} // namespace A\n"
               "// Comment",
               Input, Style);

  Style.FixNamespaceComments = false;
  verifyFormat(Input, Style);
}

TEST_F(FormatTestComments, DontAlignOverScope) {
  verifyFormat("if (foo) {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("if (foo) {\n"
               "  // something\n"
               "} else {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("if (foo) {\n"
               "  // something\n"
               "} else if (foo) {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("while (foo) {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("for (;;) {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("do {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} while (foo); // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("do\n"
               "  int aLongVariable; // with comment\n"
               "while (foo); // not aigned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("do\n"
               "  int aLongVariable; // with comment\n"
               "/**/ while (foo); // not aigned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("switch (foo) {\n"
               "case 7: {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // case not aligned\n"
               "} // switch also not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("switch (foo) {\n"
               "default: {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} // case not aligned\n"
               "} // switch also not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("class C {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "}; // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("struct S {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "}; // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("union U {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "}; // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("enum E {\n"
               "  aLongVariable, // with comment\n"
               "  f              // aligned\n"
               "}; // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");

  verifyFormat("void foo() {\n"
               "  {\n"
               "    int aLongVariable; // with comment\n"
               "    int f;             // aligned\n"
               "  } // not aligned\n"
               "  int bar;    // new align\n"
               "  int foobar; // group\n"
               "}");

  verifyFormat("auto longLambda = [] { // comment\n"
               "  int aLongVariable;   // with comment\n"
               "  int f;               // aligned\n"
               "}; // not aligned\n"
               "int bar;                             // new align\n"
               "int foobar;                          // group\n"
               "auto shortLambda = [] { return 5; }; // aligned");

  verifyFormat("auto longLambdaResult = [] { // comment\n"
               "  int aLongVariable;         // with comment\n"
               "  int f;                     // aligned\n"
               "}(); // not aligned\n"
               "int bar;                               // new align\n"
               "int foobar;                            // group\n"
               "auto shortLambda = [] { return 5; }(); // aligned");

  verifyFormat(
      "auto longLambdaResult = [](auto I, auto J) { // comment\n"
      "  int aLongVariable;                         // with comment\n"
      "  int f;                                     // aligned\n"
      "}(\"Input\", 5); // not aligned\n"
      "int bar;                                                 // new align\n"
      "int foobar;                                              // group\n"
      "auto shortL = [](auto I, auto J) { return 5; }(\"In\", 5); // aligned");

  verifyFormat("enum E1 { V1, V2 };                    // Aligned\n"
               "enum E2 { LongerNames, InThis, Enum }; // Comments");

  verifyFormat("class C {\n"
               "  int aLongVariable; // with comment\n"
               "  int f;             // aligned\n"
               "} /* middle comment */; // not aligned\n"
               "int bar;    // new align\n"
               "int foobar; // group");
}

TEST_F(FormatTestComments, AlignsBlockCommentDecorations) {
  EXPECT_EQ("/*\n"
            " */",
            format("/*\n"
                   "*/"));
  EXPECT_EQ("/*\n"
            " */",
            format("/*\n"
                   " */"));
  EXPECT_EQ("/*\n"
            " */",
            format("/*\n"
                   "  */"));

  // Align a single line.
  EXPECT_EQ("/*\n"
            " * line */",
            format("/*\n"
                   "* line */"));
  EXPECT_EQ("/*\n"
            " * line */",
            format("/*\n"
                   " * line */"));
  EXPECT_EQ("/*\n"
            " * line */",
            format("/*\n"
                   "  * line */"));
  EXPECT_EQ("/*\n"
            " * line */",
            format("/*\n"
                   "   * line */"));
  EXPECT_EQ("/**\n"
            " * line */",
            format("/**\n"
                   "* line */"));
  EXPECT_EQ("/**\n"
            " * line */",
            format("/**\n"
                   " * line */"));
  EXPECT_EQ("/**\n"
            " * line */",
            format("/**\n"
                   "  * line */"));
  EXPECT_EQ("/**\n"
            " * line */",
            format("/**\n"
                   "   * line */"));
  EXPECT_EQ("/**\n"
            " * line */",
            format("/**\n"
                   "    * line */"));

  // Align the end '*/' after a line.
  EXPECT_EQ("/*\n"
            " * line\n"
            " */",
            format("/*\n"
                   "* line\n"
                   "*/"));
  EXPECT_EQ("/*\n"
            " * line\n"
            " */",
            format("/*\n"
                   "   * line\n"
                   "  */"));
  EXPECT_EQ("/*\n"
            " * line\n"
            " */",
            format("/*\n"
                   "  * line\n"
                   "  */"));

  // Align two lines.
  EXPECT_EQ("/* line 1\n"
            " * line 2 */",
            format("/* line 1\n"
                   " * line 2 */"));
  EXPECT_EQ("/* line 1\n"
            " * line 2 */",
            format("/* line 1\n"
                   "* line 2 */"));
  EXPECT_EQ("/* line 1\n"
            " * line 2 */",
            format("/* line 1\n"
                   "  * line 2 */"));
  EXPECT_EQ("/* line 1\n"
            " * line 2 */",
            format("/* line 1\n"
                   "   * line 2 */"));
  EXPECT_EQ("/* line 1\n"
            " * line 2 */",
            format("/* line 1\n"
                   "    * line 2 */"));
  EXPECT_EQ("int i; /* line 1\n"
            "        * line 2 */",
            format("int i; /* line 1\n"
                   "* line 2 */"));
  EXPECT_EQ("int i; /* line 1\n"
            "        * line 2 */",
            format("int i; /* line 1\n"
                   "        * line 2 */"));
  EXPECT_EQ("int i; /* line 1\n"
            "        * line 2 */",
            format("int i; /* line 1\n"
                   "             * line 2 */"));

  // Align several lines.
  EXPECT_EQ("/* line 1\n"
            " * line 2\n"
            " * line 3 */",
            format("/* line 1\n"
                   " * line 2\n"
                   "* line 3 */"));
  EXPECT_EQ("/* line 1\n"
            " * line 2\n"
            " * line 3 */",
            format("/* line 1\n"
                   "  * line 2\n"
                   "* line 3 */"));
  EXPECT_EQ("/*\n"
            "** line 1\n"
            "** line 2\n"
            "*/",
            format("/*\n"
                   "** line 1\n"
                   " ** line 2\n"
                   "*/"));

  // Align with different indent after the decorations.
  EXPECT_EQ("/*\n"
            " * line 1\n"
            " *  line 2\n"
            " * line 3\n"
            " *   line 4\n"
            " */",
            format("/*\n"
                   "* line 1\n"
                   "  *  line 2\n"
                   "   * line 3\n"
                   "*   line 4\n"
                   "*/"));

  // Align empty or blank lines.
  EXPECT_EQ("/**\n"
            " *\n"
            " *\n"
            " *\n"
            " */",
            format("/**\n"
                   "*  \n"
                   " * \n"
                   "  *\n"
                   "*/"));

  // Align while breaking and reflowing.
  EXPECT_EQ("/*\n"
            " * long long long\n"
            " * long long\n"
            " *\n"
            " * long */",
            format("/*\n"
                   " * long long long long\n"
                   " * long\n"
                   "  *\n"
                   "* long */",
                   getLLVMStyleWithColumns(20)));
}

TEST_F(FormatTestComments, NoCrash_Bug34236) {
  // This is a test case from a crasher reported in:
  // https://bugs.llvm.org/show_bug.cgi?id=34236
  // Temporarily disable formatting for readability.
  // clang-format off
  EXPECT_EQ(
"/*                                                                */ /*\n"
"                                                                      *       a\n"
"                                                                      * b c d*/",
      format(
"/*                                                                */ /*\n"
" *       a b\n"
" *       c     d*/",
          getLLVMStyleWithColumns(80)));
  // clang-format on
}

TEST_F(FormatTestComments, NonTrailingBlockComments) {
  verifyFormat("const /** comment comment */ A = B;",
               getLLVMStyleWithColumns(40));

  verifyFormat("const /** comment comment comment */ A =\n"
               "    B;",
               getLLVMStyleWithColumns(40));

  EXPECT_EQ("const /** comment comment comment\n"
            "         comment */\n"
            "    A = B;",
            format("const /** comment comment comment comment */\n"
                   "    A = B;",
                   getLLVMStyleWithColumns(40)));
}

TEST_F(FormatTestComments, PythonStyleComments) {
  // Keeps a space after '#'.
  EXPECT_EQ("# comment\n"
            "key: value",
            format("#comment\n"
                   "key:value",
                   getTextProtoStyleWithColumns(20)));
  EXPECT_EQ("# comment\n"
            "key: value",
            format("# comment\n"
                   "key:value",
                   getTextProtoStyleWithColumns(20)));
  // Breaks long comment.
  EXPECT_EQ("# comment comment\n"
            "# comment\n"
            "key: value",
            format("# comment comment comment\n"
                   "key:value",
                   getTextProtoStyleWithColumns(20)));
  // Indents comments.
  EXPECT_EQ("data {\n"
            "  # comment comment\n"
            "  # comment\n"
            "  key: value\n"
            "}",
            format("data {\n"
                   "# comment comment comment\n"
                   "key: value}",
                   getTextProtoStyleWithColumns(20)));
  EXPECT_EQ("data {\n"
            "  # comment comment\n"
            "  # comment\n"
            "  key: value\n"
            "}",
            format("data {# comment comment comment\n"
                   "key: value}",
                   getTextProtoStyleWithColumns(20)));
  // Reflows long comments.
  EXPECT_EQ("# comment comment\n"
            "# comment comment\n"
            "key: value",
            format("# comment comment comment\n"
                   "# comment\n"
                   "key:value",
                   getTextProtoStyleWithColumns(20)));
  // Breaks trailing comments.
  EXPECT_EQ("k: val  # comment\n"
            "        # comment\n"
            "a: 1",
            format("k:val#comment comment\n"
                   "a:1",
                   getTextProtoStyleWithColumns(20)));
  EXPECT_EQ("id {\n"
            "  k: val  # comment\n"
            "          # comment\n"
            "  # line line\n"
            "  a: 1\n"
            "}",
            format("id {k:val#comment comment\n"
                   "# line line\n"
                   "a:1}",
                   getTextProtoStyleWithColumns(20)));
  // Aligns trailing comments.
  EXPECT_EQ("k: val  # commen1\n"
            "        # commen2\n"
            "        # commen3\n"
            "# commen4\n"
            "a: 1  # commen5\n"
            "      # commen6\n"
            "      # commen7",
            format("k:val#commen1 commen2\n"
                   " #commen3\n"
                   "# commen4\n"
                   "a:1#commen5 commen6\n"
                   " #commen7",
                   getTextProtoStyleWithColumns(20)));
}

TEST_F(FormatTestComments, BreaksBeforeTrailingUnbreakableSequence) {
  // The end of /* trail */ is exactly at 80 columns, but the unbreakable
  // trailing sequence ); after it exceeds the column limit. Make sure we
  // correctly break the line in that case.
  verifyFormat("int a =\n"
               "    foo(/* trail */);",
               getLLVMStyleWithColumns(23));
}

TEST_F(FormatTestComments, ReflowBackslashCrash) {
  // clang-format off
  EXPECT_EQ(
"// How to run:\n"
"// bbbbb run \\\n"
"// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr\n"
"// \\ <log_file> -- --output_directory=\"<output_directory>\"",
  format(
"// How to run:\n"
"// bbbbb run \\\n"
"// rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr \\\n"
"// <log_file> -- --output_directory=\"<output_directory>\""));
  // clang-format on
}

TEST_F(FormatTestComments, IndentsLongJavadocAnnotatedLines) {
  FormatStyle Style = getGoogleStyle(FormatStyle::LK_Java);
  Style.ColumnLimit = 60;
  FormatStyle Style20 = getGoogleStyle(FormatStyle::LK_Java);
  Style20.ColumnLimit = 20;
  EXPECT_EQ(
      "/**\n"
      " * @param x long long long long long long long long long\n"
      " *     long\n"
      " */",
      format("/**\n"
             " * @param x long long long long long long long long long long\n"
             " */",
             Style));
  EXPECT_EQ("/**\n"
            " * @param x long long long long long long long long long\n"
            " *     long long long long long long long long long long\n"
            " */",
            format("/**\n"
                   " * @param x long long long long long long long long long "
                   "long long long long long long long long long long\n"
                   " */",
                   Style));
  EXPECT_EQ("/**\n"
            " * @param x long long long long long long long long long\n"
            " *     long long long long long long long long long long\n"
            " *     long\n"
            " */",
            format("/**\n"
                   " * @param x long long long long long long long long long "
                   "long long long long long long long long long long long\n"
                   " */",
                   Style));
  EXPECT_EQ("/**\n"
            " * Sentence that\n"
            " * should be broken.\n"
            " * @param short\n"
            " * keep indentation\n"
            " */",
            format("/**\n"
                   " * Sentence that should be broken.\n"
                   " * @param short\n"
                   " * keep indentation\n"
                   " */",
                   Style20));

  EXPECT_EQ("/**\n"
            " * @param l1 long1\n"
            " *     to break\n"
            " * @param l2 long2\n"
            " *     to break\n"
            " */",
            format("/**\n"
                   " * @param l1 long1 to break\n"
                   " * @param l2 long2 to break\n"
                   " */",
                   Style20));

  EXPECT_EQ("/**\n"
            " * @param xx to\n"
            " *     break\n"
            " * no reflow\n"
            " */",
            format("/**\n"
                   " * @param xx to break\n"
                   " * no reflow\n"
                   " */",
                   Style20));

  EXPECT_EQ("/**\n"
            " * @param xx to\n"
            " *     break yes\n"
            " *     reflow\n"
            " */",
            format("/**\n"
                   " * @param xx to break\n"
                   " *     yes reflow\n"
                   " */",
                   Style20));

  FormatStyle JSStyle20 = getGoogleStyle(FormatStyle::LK_JavaScript);
  JSStyle20.ColumnLimit = 20;
  EXPECT_EQ("/**\n"
            " * @param l1 long1\n"
            " *     to break\n"
            " */",
            format("/**\n"
                   " * @param l1 long1 to break\n"
                   " */",
                   JSStyle20));
  EXPECT_EQ("/**\n"
            " * @param {l1 long1\n"
            " *     to break}\n"
            " */",
            format("/**\n"
                   " * @param {l1 long1 to break}\n"
                   " */",
                   JSStyle20));
}

TEST_F(FormatTestComments, SpaceAtLineCommentBegin) {
  FormatStyle Style = getLLVMStyle();
  StringRef NoTextInComment = " //       \n"
                              "\n"
                              "void foo() {// \n"
                              "// \n"
                              "}";

  EXPECT_EQ("//\n"
            "\n"
            "void foo() { //\n"
            "  //\n"
            "}",
            format(NoTextInComment, Style));

  Style.SpacesInLineCommentPrefix.Minimum = 0;
  verifyFormat("//#comment", Style);
  EXPECT_EQ("//\n"
            "\n"
            "void foo() { //\n"
            "  //\n"
            "}",
            format(NoTextInComment, Style));

  Style.SpacesInLineCommentPrefix.Minimum = 5;
  EXPECT_EQ("//     #comment", format("//#comment", Style));
  EXPECT_EQ("//\n"
            "\n"
            "void foo() { //\n"
            "  //\n"
            "}",
            format(NoTextInComment, Style));

  Style = getLLVMStyle();
  StringRef Code =
      "//Free comment without space\n"
      "\n"
      "//   Free comment with 3 spaces\n"
      "\n"
      "///Free Doxygen without space\n"
      "\n"
      "///   Free Doxygen with 3 spaces\n"
      "\n"
      "//🐉 A nice dragon\n"
      "\n"
      "//\t abccba\n"
      "\n"
      "//\\t deffed\n"
      "\n"
      "//   🐉 Another nice dragon\n"
      "\n"
      "//   \t Three leading spaces following tab\n"
      "\n"
      "//   \\t Three leading spaces following backslash\n"
      "\n"
      "/// A Doxygen Comment with a nested list:\n"
      "/// - Foo\n"
      "/// - Bar\n"
      "///   - Baz\n"
      "///   - End\n"
      "///     of the inner list\n"
      "///   .\n"
      "/// .\n"
      "\n"
      "namespace Foo {\n"
      "bool bar(bool b) {\n"
      "  bool ret1 = true; ///<Doxygenstyle without space\n"
      "  bool ret2 = true; ///<   Doxygenstyle with 3 spaces\n"
      "  if (b) {\n"
      "    //Foo\n"
      "\n"
      "    //   In function comment\n"
      "    ret2 = false;\n"
      "  } // End of if\n"
      "\n"
      "//  if (ret1) {\n" // Commented out at the beginning of the line
      "//    return ret2;\n"
      "//  }\n"
      "\n"
      "  //if (ret1) {\n" // Commtented out at the beginning of the content
      "  //  return ret2;\n"
      "  //}\n"
      "\n"
      "  return ret1 && ret2;\n"
      "}\n"
      "}\n"
      "\n"
      "namespace Bar {\n"
      "int foo();\n"
      "} //  namespace Bar\n"
      "//@Nothing added because of the non ascii char\n"
      "\n"
      "//@      Nothing removed because of the non ascii char\n"
      "\n"
      "//  Comment to move to the left\n"
      "//But not this?\n"
      "//  @but this\n"
      "\n"
      "//Comment to move to the right\n"
      "//@ this stays\n"
      "\n"
      "//} will not move\n"
      "\n"
      "//vv will only move\n"
      "//} if the line above does";

  EXPECT_EQ("// Free comment without space\n"
            "\n"
            "//   Free comment with 3 spaces\n"
            "\n"
            "/// Free Doxygen without space\n"
            "\n"
            "///   Free Doxygen with 3 spaces\n"
            "\n"
            "// 🐉 A nice dragon\n"
            "\n"
            "//\t abccba\n"
            "\n"
            "//\\t deffed\n"
            "\n"
            "//   🐉 Another nice dragon\n"
            "\n"
            "//   \t Three leading spaces following tab\n"
            "\n"
            "//   \\t Three leading spaces following backslash\n"
            "\n"
            "/// A Doxygen Comment with a nested list:\n"
            "/// - Foo\n"
            "/// - Bar\n"
            "///   - Baz\n"
            "///   - End\n"
            "///     of the inner list\n"
            "///   .\n"
            "/// .\n"
            "\n"
            "namespace Foo {\n"
            "bool bar(bool b) {\n"
            "  bool ret1 = true; ///< Doxygenstyle without space\n"
            "  bool ret2 = true; ///<   Doxygenstyle with 3 spaces\n"
            "  if (b) {\n"
            "    // Foo\n"
            "\n"
            "    //   In function comment\n"
            "    ret2 = false;\n"
            "  } // End of if\n"
            "\n"
            "  //  if (ret1) {\n"
            "  //    return ret2;\n"
            "  //  }\n"
            "\n"
            "  // if (ret1) {\n"
            "  //   return ret2;\n"
            "  // }\n"
            "\n"
            "  return ret1 && ret2;\n"
            "}\n"
            "} // namespace Foo\n"
            "\n"
            "namespace Bar {\n"
            "int foo();\n"
            "} //  namespace Bar\n"
            "//@Nothing added because of the non ascii char\n"
            "\n"
            "//@      Nothing removed because of the non ascii char\n"
            "\n"
            "//  Comment to move to the left\n"
            "// But not this?\n"
            "//  @but this\n"
            "\n"
            "// Comment to move to the right\n"
            "//@ this stays\n"
            "\n"
            "//} will not move\n"
            "\n"
            "// vv will only move\n"
            "// } if the line above does",
            format(Code, Style));

  Style.SpacesInLineCommentPrefix = {0, 0};
  EXPECT_EQ("//#comment", format("//   #comment", Style));
  EXPECT_EQ("//Free comment without space\n"
            "\n"
            "//Free comment with 3 spaces\n"
            "\n"
            "///Free Doxygen without space\n"
            "\n"
            "///Free Doxygen with 3 spaces\n"
            "\n"
            "//🐉 A nice dragon\n"
            "\n"
            "//\t abccba\n"
            "\n"
            "//\\t deffed\n"
            "\n"
            "//🐉 Another nice dragon\n"
            "\n"
            "//\t Three leading spaces following tab\n"
            "\n"
            "//\\t Three leading spaces following backslash\n"
            "\n"
            "///A Doxygen Comment with a nested list:\n"
            "///- Foo\n"
            "///- Bar\n"
            "///  - Baz\n" // Here we keep the relative indentation
            "///  - End\n"
            "///    of the inner list\n"
            "///  .\n"
            "///.\n"
            "\n"
            "namespace Foo {\n"
            "bool bar(bool b) {\n"
            "  bool ret1 = true; ///<Doxygenstyle without space\n"
            "  bool ret2 = true; ///<Doxygenstyle with 3 spaces\n"
            "  if (b) {\n"
            "    //Foo\n"
            "\n"
            "    //In function comment\n"
            "    ret2 = false;\n"
            "  } //End of if\n"
            "\n"
            "  //if (ret1) {\n"
            "  //  return ret2;\n"
            "  //}\n"
            "\n"
            "  //if (ret1) {\n"
            "  //  return ret2;\n"
            "  //}\n"
            "\n"
            "  return ret1 && ret2;\n"
            "}\n"
            "} //namespace Foo\n"
            "\n"
            "namespace Bar {\n"
            "int foo();\n"
            "} //namespace Bar\n"
            "//@Nothing added because of the non ascii char\n"
            "\n"
            "//@      Nothing removed because of the non ascii char\n"
            "\n"
            "//Comment to move to the left\n"
            "//But not this?\n"
            "//@but this\n"
            "\n"
            "//Comment to move to the right\n"
            "//@ this stays\n"
            "\n"
            "//} will not move\n"
            "\n"
            "//vv will only move\n"
            "//} if the line above does",
            format(Code, Style));

  Style.SpacesInLineCommentPrefix = {2, -1u};
  EXPECT_EQ("//  Free comment without space\n"
            "\n"
            "//   Free comment with 3 spaces\n"
            "\n"
            "///  Free Doxygen without space\n"
            "\n"
            "///   Free Doxygen with 3 spaces\n"
            "\n"
            "//  🐉 A nice dragon\n"
            "\n"
            "//\t abccba\n"
            "\n"
            "//\\t deffed\n"
            "\n"
            "//   🐉 Another nice dragon\n"
            "\n"
            "//   \t Three leading spaces following tab\n"
            "\n"
            "//   \\t Three leading spaces following backslash\n"
            "\n"
            "///  A Doxygen Comment with a nested list:\n"
            "///  - Foo\n"
            "///  - Bar\n"
            "///    - Baz\n"
            "///    - End\n"
            "///      of the inner list\n"
            "///    .\n"
            "///  .\n"
            "\n"
            "namespace Foo {\n"
            "bool bar(bool b) {\n"
            "  bool ret1 = true; ///<  Doxygenstyle without space\n"
            "  bool ret2 = true; ///<   Doxygenstyle with 3 spaces\n"
            "  if (b) {\n"
            "    //  Foo\n"
            "\n"
            "    //   In function comment\n"
            "    ret2 = false;\n"
            "  } //  End of if\n"
            "\n"
            "  //  if (ret1) {\n"
            "  //    return ret2;\n"
            "  //  }\n"
            "\n"
            "  //  if (ret1) {\n"
            "  //    return ret2;\n"
            "  //  }\n"
            "\n"
            "  return ret1 && ret2;\n"
            "}\n"
            "} //  namespace Foo\n"
            "\n"
            "namespace Bar {\n"
            "int foo();\n"
            "} //  namespace Bar\n"
            "//@Nothing added because of the non ascii char\n"
            "\n"
            "//@      Nothing removed because of the non ascii char\n"
            "\n"
            "//  Comment to move to the left\n"
            "//  But not this?\n"
            "//  @but this\n"
            "\n"
            "//  Comment to move to the right\n"
            "//@ this stays\n"
            "\n"
            "//} will not move\n"
            "\n"
            "//  vv will only move\n"
            "//  } if the line above does",
            format(Code, Style));

  Style = getLLVMStyleWithColumns(20);
  StringRef WrapCode = "//Lorem ipsum dolor sit amet\n"
                       "\n"
                       "//  Lorem   ipsum   dolor   sit   amet\n"
                       "\n"
                       "void f() {//Hello World\n"
                       "}";

  EXPECT_EQ("// Lorem ipsum dolor\n"
            "// sit amet\n"
            "\n"
            "//  Lorem   ipsum\n"
            "//  dolor   sit amet\n"
            "\n"
            "void f() { // Hello\n"
            "           // World\n"
            "}",
            format(WrapCode, Style));

  Style.SpacesInLineCommentPrefix = {0, 0};
  EXPECT_EQ("//Lorem ipsum dolor\n"
            "//sit amet\n"
            "\n"
            "//Lorem   ipsum\n"
            "//dolor   sit   amet\n"
            "\n"
            "void f() { //Hello\n"
            "           //World\n"
            "}",
            format(WrapCode, Style));

  Style.SpacesInLineCommentPrefix = {1, 1};
  EXPECT_EQ("// Lorem ipsum dolor\n"
            "// sit amet\n"
            "\n"
            "// Lorem   ipsum\n"
            "// dolor   sit amet\n"
            "\n"
            "void f() { // Hello\n"
            "           // World\n"
            "}",
            format(WrapCode, Style));
  EXPECT_EQ("// x\n"
            "// y",
            format("//   x\n"
                   "// y",
                   Style));
  EXPECT_EQ(
      "// loooooooooooooooooooooooooooooong\n"
      "// commentcomments\n"
      "// normal comments",
      format("//            loooooooooooooooooooooooooooooong commentcomments\n"
             "// normal comments",
             Style));

  Style.SpacesInLineCommentPrefix = {3, 3};
  EXPECT_EQ("//   Lorem ipsum\n"
            "//   dolor sit amet\n"
            "\n"
            "//   Lorem   ipsum\n"
            "//   dolor   sit\n"
            "//   amet\n"
            "\n"
            "void f() { //   Hello\n"
            "           //   World\n"
            "}",
            format(WrapCode, Style));

  Style = getLLVMStyleWithColumns(20);
  StringRef LotsOfSpaces = "//                      This are more spaces "
                           "than the ColumnLimit, what now?\n"
                           "\n"
                           "//   Comment\n"
                           "\n"
                           "// This is a text to split in multiple "
                           "lines, please. Thank you very much!\n"
                           "\n"
                           "// A comment with\n"
                           "//   some indentation that has to be split.\n"
                           "// And now without";
  EXPECT_EQ("//                      This are more spaces "
            "than the ColumnLimit, what now?\n"
            "\n"
            "//   Comment\n"
            "\n"
            "// This is a text to\n"
            "// split in multiple\n"
            "// lines, please.\n"
            "// Thank you very\n"
            "// much!\n"
            "\n"
            "// A comment with\n"
            "//   some\n"
            "//   indentation\n"
            "//   that has to be\n"
            "//   split.\n"
            "// And now without",
            format(LotsOfSpaces, Style));

  Style.SpacesInLineCommentPrefix = {0, 0};
  EXPECT_EQ("//This are more\n"
            "//spaces than the\n"
            "//ColumnLimit, what\n"
            "//now?\n"
            "\n"
            "//Comment\n"
            "\n"
            "//This is a text to\n"
            "//split in multiple\n"
            "//lines, please.\n"
            "//Thank you very\n"
            "//much!\n"
            "\n"
            "//A comment with\n"
            "//  some indentation\n"
            "//  that has to be\n"
            "//  split.\n"
            "//And now without",
            format(LotsOfSpaces, Style));

  Style.SpacesInLineCommentPrefix = {3, 3};
  EXPECT_EQ("//   This are more\n"
            "//   spaces than the\n"
            "//   ColumnLimit,\n"
            "//   what now?\n"
            "\n"
            "//   Comment\n"
            "\n"
            "//   This is a text\n"
            "//   to split in\n"
            "//   multiple lines,\n"
            "//   please. Thank\n"
            "//   you very much!\n"
            "\n"
            "//   A comment with\n"
            "//     some\n"
            "//     indentation\n"
            "//     that has to\n"
            "//     be split.\n"
            "//   And now without",
            format(LotsOfSpaces, Style));

  Style.SpacesInLineCommentPrefix = {30, -1u};
  EXPECT_EQ("//                              This are more spaces than the "
            "ColumnLimit, what now?\n"
            "\n"
            "//                              Comment\n"
            "\n"
            "//                              This is a text to split in "
            "multiple lines, please. Thank you very much!\n"
            "\n"
            "//                              A comment with\n"
            "//                                some indentation that has to be "
            "split.\n"
            "//                              And now without",
            format(LotsOfSpaces, Style));

  Style.SpacesInLineCommentPrefix = {2, 4};
  EXPECT_EQ("//  A Comment to be\n"
            "//  moved\n"
            "//   with indent\n"
            "\n"
            "//  A Comment to be\n"
            "//  moved\n"
            "//   with indent\n"
            "\n"
            "//  A Comment to be\n"
            "//  moved\n"
            "//   with indent\n"
            "\n"
            "//   A Comment to be\n"
            "//   moved\n"
            "//    with indent\n"
            "\n"
            "//    A Comment to\n"
            "//    be moved\n"
            "//     with indent\n"
            "\n"
            "//    A Comment to\n"
            "//    be moved\n"
            "//     with indent\n"
            "\n"
            "//    A Comment to\n"
            "//    be moved\n"
            "//     with indent",
            format("//A Comment to be moved\n"
                   "// with indent\n"
                   "\n"
                   "// A Comment to be moved\n"
                   "//  with indent\n"
                   "\n"
                   "//  A Comment to be moved\n"
                   "//   with indent\n"
                   "\n"
                   "//   A Comment to be moved\n"
                   "//    with indent\n"
                   "\n"
                   "//    A Comment to be moved\n"
                   "//     with indent\n"
                   "\n"
                   "//     A Comment to be moved\n"
                   "//      with indent\n"
                   "\n"
                   "//      A Comment to be moved\n"
                   "//       with indent",
                   Style));

  Style.ColumnLimit = 30;
  EXPECT_EQ("int i; //  A Comment to be\n"
            "       //  moved\n"
            "       //   with indent\n"
            "\n"
            "int i; //  A Comment to be\n"
            "       //  moved\n"
            "       //   with indent\n"
            "\n"
            "int i; //  A Comment to be\n"
            "       //  moved\n"
            "       //   with indent\n"
            "\n"
            "int i; //   A Comment to be\n"
            "       //   moved\n"
            "       //    with indent\n"
            "\n"
            "int i; //    A Comment to be\n"
            "       //    moved\n"
            "       //     with indent\n"
            "\n"
            "int i; //    A Comment to be\n"
            "       //    moved\n"
            "       //     with indent\n"
            "\n"
            "int i; //    A Comment to be\n"
            "       //    moved\n"
            "       //     with indent",
            format("int i;//A Comment to be moved\n"
                   "      // with indent\n"
                   "\n"
                   "int i;// A Comment to be moved\n"
                   "      //  with indent\n"
                   "\n"
                   "int i;//  A Comment to be moved\n"
                   "      //   with indent\n"
                   "\n"
                   "int i;//   A Comment to be moved\n"
                   "      //    with indent\n"
                   "\n"
                   "int i;//    A Comment to be moved\n"
                   "      //     with indent\n"
                   "\n"
                   "int i;//     A Comment to be moved\n"
                   "      //      with indent\n"
                   "\n"
                   "int i;//      A Comment to be moved\n"
                   "      //       with indent",
                   Style));

  Style = getLLVMStyleWithColumns(0);
  EXPECT_EQ("// Free comment without space\n"
            "\n"
            "//   Free comment with 3 spaces\n"
            "\n"
            "/// Free Doxygen without space\n"
            "\n"
            "///   Free Doxygen with 3 spaces\n"
            "\n"
            "// 🐉 A nice dragon\n"
            "\n"
            "//\t abccba\n"
            "\n"
            "//\\t deffed\n"
            "\n"
            "//   🐉 Another nice dragon\n"
            "\n"
            "//   \t Three leading spaces following tab\n"
            "\n"
            "//   \\t Three leading spaces following backslash\n"
            "\n"
            "/// A Doxygen Comment with a nested list:\n"
            "/// - Foo\n"
            "/// - Bar\n"
            "///   - Baz\n"
            "///   - End\n"
            "///     of the inner list\n"
            "///   .\n"
            "/// .\n"
            "\n"
            "namespace Foo {\n"
            "bool bar(bool b) {\n"
            "  bool ret1 = true; ///< Doxygenstyle without space\n"
            "  bool ret2 = true; ///<   Doxygenstyle with 3 spaces\n"
            "  if (b) {\n"
            "    // Foo\n"
            "\n"
            "    //   In function comment\n"
            "    ret2 = false;\n"
            "  } // End of if\n"
            "\n"
            "  //  if (ret1) {\n"
            "  //    return ret2;\n"
            "  //  }\n"
            "\n"
            "  // if (ret1) {\n"
            "  //   return ret2;\n"
            "  // }\n"
            "\n"
            "  return ret1 && ret2;\n"
            "}\n"
            "} // namespace Foo\n"
            "\n"
            "namespace Bar {\n"
            "int foo();\n"
            "} //  namespace Bar\n"
            "//@Nothing added because of the non ascii char\n"
            "\n"
            "//@      Nothing removed because of the non ascii char\n"
            "\n"
            "//  Comment to move to the left\n"
            "// But not this?\n"
            "//  @but this\n"
            "\n"
            "// Comment to move to the right\n"
            "//@ this stays\n"
            "\n"
            "//} will not move\n"
            "\n"
            "// vv will only move\n"
            "// } if the line above does",
            format(Code, Style));

  Style.SpacesInLineCommentPrefix = {0, 0};
  EXPECT_EQ("//Free comment without space\n"
            "\n"
            "//Free comment with 3 spaces\n"
            "\n"
            "///Free Doxygen without space\n"
            "\n"
            "///Free Doxygen with 3 spaces\n"
            "\n"
            "//🐉 A nice dragon\n"
            "\n"
            "//\t abccba\n"
            "\n"
            "//\\t deffed\n"
            "\n"
            "//🐉 Another nice dragon\n"
            "\n"
            "//\t Three leading spaces following tab\n"
            "\n"
            "//\\t Three leading spaces following backslash\n"
            "\n"
            "///A Doxygen Comment with a nested list:\n"
            "///- Foo\n"
            "///- Bar\n"
            "///  - Baz\n" // Here we keep the relative indentation
            "///  - End\n"
            "///    of the inner list\n"
            "///  .\n"
            "///.\n"
            "\n"
            "namespace Foo {\n"
            "bool bar(bool b) {\n"
            "  bool ret1 = true; ///<Doxygenstyle without space\n"
            "  bool ret2 = true; ///<Doxygenstyle with 3 spaces\n"
            "  if (b) {\n"
            "    //Foo\n"
            "\n"
            "    //In function comment\n"
            "    ret2 = false;\n"
            "  } //End of if\n"
            "\n"
            "  //if (ret1) {\n"
            "  //  return ret2;\n"
            "  //}\n"
            "\n"
            "  //if (ret1) {\n"
            "  //  return ret2;\n"
            "  //}\n"
            "\n"
            "  return ret1 && ret2;\n"
            "}\n"
            "} //namespace Foo\n"
            "\n"
            "namespace Bar {\n"
            "int foo();\n"
            "} //namespace Bar\n"
            "//@Nothing added because of the non ascii char\n"
            "\n"
            "//@      Nothing removed because of the non ascii char\n"
            "\n"
            "//Comment to move to the left\n"
            "//But not this?\n"
            "//@but this\n"
            "\n"
            "//Comment to move to the right\n"
            "//@ this stays\n"
            "\n"
            "//} will not move\n"
            "\n"
            "//vv will only move\n"
            "//} if the line above does",
            format(Code, Style));

  Style.SpacesInLineCommentPrefix = {2, -1u};
  EXPECT_EQ("//  Free comment without space\n"
            "\n"
            "//   Free comment with 3 spaces\n"
            "\n"
            "///  Free Doxygen without space\n"
            "\n"
            "///   Free Doxygen with 3 spaces\n"
            "\n"
            "//  🐉 A nice dragon\n"
            "\n"
            "//\t abccba\n"
            "\n"
            "//\\t deffed\n"
            "\n"
            "//   🐉 Another nice dragon\n"
            "\n"
            "//   \t Three leading spaces following tab\n"
            "\n"
            "//   \\t Three leading spaces following backslash\n"
            "\n"
            "///  A Doxygen Comment with a nested list:\n"
            "///  - Foo\n"
            "///  - Bar\n"
            "///    - Baz\n"
            "///    - End\n"
            "///      of the inner list\n"
            "///    .\n"
            "///  .\n"
            "\n"
            "namespace Foo {\n"
            "bool bar(bool b) {\n"
            "  bool ret1 = true; ///<  Doxygenstyle without space\n"
            "  bool ret2 = true; ///<   Doxygenstyle with 3 spaces\n"
            "  if (b) {\n"
            "    //  Foo\n"
            "\n"
            "    //   In function comment\n"
            "    ret2 = false;\n"
            "  } //  End of if\n"
            "\n"
            "  //  if (ret1) {\n"
            "  //    return ret2;\n"
            "  //  }\n"
            "\n"
            "  //  if (ret1) {\n"
            "  //    return ret2;\n"
            "  //  }\n"
            "\n"
            "  return ret1 && ret2;\n"
            "}\n"
            "} //  namespace Foo\n"
            "\n"
            "namespace Bar {\n"
            "int foo();\n"
            "} //  namespace Bar\n"
            "//@Nothing added because of the non ascii char\n"
            "\n"
            "//@      Nothing removed because of the non ascii char\n"
            "\n"
            "//  Comment to move to the left\n"
            "//  But not this?\n"
            "//  @but this\n"
            "\n"
            "//  Comment to move to the right\n"
            "//@ this stays\n"
            "\n"
            "//} will not move\n"
            "\n"
            "//  vv will only move\n"
            "//  } if the line above does",
            format(Code, Style));
}

TEST_F(FormatTestComments, SplitCommentIntroducers) {
  EXPECT_EQ(R"(//
/\
/
)",
            format(R"(//
/\
/ 
  )",
                   getLLVMStyleWithColumns(10)));
}

} // end namespace
} // namespace test
} // end namespace format
} // end namespace clang
