FormatTestComments.cpp 83 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357
  1. //===- unittest/Format/FormatTestComments.cpp - Formatting unit tests -----===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "clang/Format/Format.h"
  10. #include "../Tooling/ReplacementTest.h"
  11. #include "FormatTestUtils.h"
  12. #include "clang/Frontend/TextDiagnosticPrinter.h"
  13. #include "llvm/Support/Debug.h"
  14. #include "llvm/Support/MemoryBuffer.h"
  15. #include "gtest/gtest.h"
  16. #define DEBUG_TYPE "format-test"
  17. using clang::tooling::ReplacementTest;
  18. namespace clang {
  19. namespace format {
  20. namespace {
  21. FormatStyle getGoogleStyle() { return getGoogleStyle(FormatStyle::LK_Cpp); }
  22. class FormatTestComments : public ::testing::Test {
  23. protected:
  24. enum IncompleteCheck {
  25. IC_ExpectComplete,
  26. IC_ExpectIncomplete,
  27. IC_DoNotCheck
  28. };
  29. std::string format(llvm::StringRef Code,
  30. const FormatStyle &Style = getLLVMStyle(),
  31. IncompleteCheck CheckIncomplete = IC_ExpectComplete) {
  32. DEBUG(llvm::errs() << "---\n");
  33. DEBUG(llvm::errs() << Code << "\n\n");
  34. std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size()));
  35. bool IncompleteFormat = false;
  36. tooling::Replacements Replaces =
  37. reformat(Style, Code, Ranges, "<stdin>", &IncompleteFormat);
  38. if (CheckIncomplete != IC_DoNotCheck) {
  39. bool ExpectedIncompleteFormat = CheckIncomplete == IC_ExpectIncomplete;
  40. EXPECT_EQ(ExpectedIncompleteFormat, IncompleteFormat) << Code << "\n\n";
  41. }
  42. ReplacementCount = Replaces.size();
  43. auto Result = applyAllReplacements(Code, Replaces);
  44. EXPECT_TRUE(static_cast<bool>(Result));
  45. DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
  46. return *Result;
  47. }
  48. FormatStyle getLLVMStyleWithColumns(unsigned ColumnLimit) {
  49. FormatStyle Style = getLLVMStyle();
  50. Style.ColumnLimit = ColumnLimit;
  51. return Style;
  52. }
  53. void verifyFormat(llvm::StringRef Code,
  54. const FormatStyle &Style = getLLVMStyle()) {
  55. EXPECT_EQ(Code.str(), format(test::messUp(Code), Style));
  56. }
  57. void verifyGoogleFormat(llvm::StringRef Code) {
  58. verifyFormat(Code, getGoogleStyle());
  59. }
  60. /// \brief Verify that clang-format does not crash on the given input.
  61. void verifyNoCrash(llvm::StringRef Code,
  62. const FormatStyle &Style = getLLVMStyle()) {
  63. format(Code, Style, IC_DoNotCheck);
  64. }
  65. int ReplacementCount;
  66. };
  67. //===----------------------------------------------------------------------===//
  68. // Tests for comments.
  69. //===----------------------------------------------------------------------===//
  70. TEST_F(FormatTestComments, UnderstandsSingleLineComments) {
  71. verifyFormat("//* */");
  72. verifyFormat("// line 1\n"
  73. "// line 2\n"
  74. "void f() {}\n");
  75. verifyFormat("void f() {\n"
  76. " // Doesn't do anything\n"
  77. "}");
  78. verifyFormat("SomeObject\n"
  79. " // Calling someFunction on SomeObject\n"
  80. " .someFunction();");
  81. verifyFormat("auto result = SomeObject\n"
  82. " // Calling someFunction on SomeObject\n"
  83. " .someFunction();");
  84. verifyFormat("void f(int i, // some comment (probably for i)\n"
  85. " int j, // some comment (probably for j)\n"
  86. " int k); // some comment (probably for k)");
  87. verifyFormat("void f(int i,\n"
  88. " // some comment (probably for j)\n"
  89. " int j,\n"
  90. " // some comment (probably for k)\n"
  91. " int k);");
  92. verifyFormat("int i // This is a fancy variable\n"
  93. " = 5; // with nicely aligned comment.");
  94. verifyFormat("// Leading comment.\n"
  95. "int a; // Trailing comment.");
  96. verifyFormat("int a; // Trailing comment\n"
  97. " // on 2\n"
  98. " // or 3 lines.\n"
  99. "int b;");
  100. verifyFormat("int a; // Trailing comment\n"
  101. "\n"
  102. "// Leading comment.\n"
  103. "int b;");
  104. verifyFormat("int a; // Comment.\n"
  105. " // More details.\n"
  106. "int bbbb; // Another comment.");
  107. verifyFormat(
  108. "int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; // comment\n"
  109. "int bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; // comment\n"
  110. "int cccccccccccccccccccccccccccccc; // comment\n"
  111. "int ddd; // looooooooooooooooooooooooong comment\n"
  112. "int aaaaaaaaaaaaaaaaaaaaaaa; // comment\n"
  113. "int bbbbbbbbbbbbbbbbbbbbb; // comment\n"
  114. "int ccccccccccccccccccc; // comment");
  115. verifyFormat("#include \"a\" // comment\n"
  116. "#include \"a/b/c\" // comment");
  117. verifyFormat("#include <a> // comment\n"
  118. "#include <a/b/c> // comment");
  119. EXPECT_EQ("#include \"a\" // comment\n"
  120. "#include \"a/b/c\" // comment",
  121. format("#include \\\n"
  122. " \"a\" // comment\n"
  123. "#include \"a/b/c\" // comment"));
  124. verifyFormat("enum E {\n"
  125. " // comment\n"
  126. " VAL_A, // comment\n"
  127. " VAL_B\n"
  128. "};");
  129. EXPECT_EQ("enum A {\n"
  130. " // line a\n"
  131. " a,\n"
  132. " b, // line b\n"
  133. "\n"
  134. " // line c\n"
  135. " c\n"
  136. "};",
  137. format("enum A {\n"
  138. " // line a\n"
  139. " a,\n"
  140. " b, // line b\n"
  141. "\n"
  142. " // line c\n"
  143. " c\n"
  144. "};",
  145. getLLVMStyleWithColumns(20)));
  146. EXPECT_EQ("enum A {\n"
  147. " a, // line 1\n"
  148. " // line 2\n"
  149. "};",
  150. format("enum A {\n"
  151. " a, // line 1\n"
  152. " // line 2\n"
  153. "};",
  154. getLLVMStyleWithColumns(20)));
  155. EXPECT_EQ("enum A {\n"
  156. " a, // line 1\n"
  157. " // line 2\n"
  158. "};",
  159. format("enum A {\n"
  160. " a, // line 1\n"
  161. " // line 2\n"
  162. "};",
  163. getLLVMStyleWithColumns(20)));
  164. EXPECT_EQ("enum A {\n"
  165. " a, // line 1\n"
  166. " // line 2\n"
  167. " b\n"
  168. "};",
  169. format("enum A {\n"
  170. " a, // line 1\n"
  171. " // line 2\n"
  172. " b\n"
  173. "};",
  174. getLLVMStyleWithColumns(20)));
  175. EXPECT_EQ("enum A {\n"
  176. " a, // line 1\n"
  177. " // line 2\n"
  178. " b\n"
  179. "};",
  180. format("enum A {\n"
  181. " a, // line 1\n"
  182. " // line 2\n"
  183. " b\n"
  184. "};",
  185. getLLVMStyleWithColumns(20)));
  186. verifyFormat(
  187. "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
  188. " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; // Trailing comment");
  189. verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
  190. " // Comment inside a statement.\n"
  191. " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb;");
  192. verifyFormat("SomeFunction(a,\n"
  193. " // comment\n"
  194. " b + x);");
  195. verifyFormat("SomeFunction(a, a,\n"
  196. " // comment\n"
  197. " b + x);");
  198. verifyFormat(
  199. "bool aaaaaaaaaaaaa = // comment\n"
  200. " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
  201. " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaaaaa;");
  202. verifyFormat("int aaaa; // aaaaa\n"
  203. "int aa; // aaaaaaa",
  204. getLLVMStyleWithColumns(20));
  205. EXPECT_EQ("void f() { // This does something ..\n"
  206. "}\n"
  207. "int a; // This is unrelated",
  208. format("void f() { // This does something ..\n"
  209. " }\n"
  210. "int a; // This is unrelated"));
  211. EXPECT_EQ("class C {\n"
  212. " void f() { // This does something ..\n"
  213. " } // awesome..\n"
  214. "\n"
  215. " int a; // This is unrelated\n"
  216. "};",
  217. format("class C{void f() { // This does something ..\n"
  218. " } // awesome..\n"
  219. " \n"
  220. "int a; // This is unrelated\n"
  221. "};"));
  222. EXPECT_EQ("int i; // single line trailing comment",
  223. format("int i;\\\n// single line trailing comment"));
  224. verifyGoogleFormat("int a; // Trailing comment.");
  225. verifyFormat("someFunction(anotherFunction( // Force break.\n"
  226. " parameter));");
  227. verifyGoogleFormat("#endif // HEADER_GUARD");
  228. verifyFormat("const char *test[] = {\n"
  229. " // A\n"
  230. " \"aaaa\",\n"
  231. " // B\n"
  232. " \"aaaaa\"};");
  233. verifyGoogleFormat(
  234. "aaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
  235. " aaaaaaaaaaaaaaaaaaaaaa); // 81_cols_with_this_comment");
  236. EXPECT_EQ("D(a, {\n"
  237. " // test\n"
  238. " int a;\n"
  239. "});",
  240. format("D(a, {\n"
  241. "// test\n"
  242. "int a;\n"
  243. "});"));
  244. EXPECT_EQ("lineWith(); // comment\n"
  245. "// at start\n"
  246. "otherLine();",
  247. format("lineWith(); // comment\n"
  248. "// at start\n"
  249. "otherLine();"));
  250. EXPECT_EQ("lineWith(); // comment\n"
  251. "/*\n"
  252. " * at start */\n"
  253. "otherLine();",
  254. format("lineWith(); // comment\n"
  255. "/*\n"
  256. " * at start */\n"
  257. "otherLine();"));
  258. EXPECT_EQ("lineWith(); // comment\n"
  259. " // at start\n"
  260. "otherLine();",
  261. format("lineWith(); // comment\n"
  262. " // at start\n"
  263. "otherLine();"));
  264. EXPECT_EQ("lineWith(); // comment\n"
  265. "// at start\n"
  266. "otherLine(); // comment",
  267. format("lineWith(); // comment\n"
  268. "// at start\n"
  269. "otherLine(); // comment"));
  270. EXPECT_EQ("lineWith();\n"
  271. "// at start\n"
  272. "otherLine(); // comment",
  273. format("lineWith();\n"
  274. " // at start\n"
  275. "otherLine(); // comment"));
  276. EXPECT_EQ("// first\n"
  277. "// at start\n"
  278. "otherLine(); // comment",
  279. format("// first\n"
  280. " // at start\n"
  281. "otherLine(); // comment"));
  282. EXPECT_EQ("f();\n"
  283. "// first\n"
  284. "// at start\n"
  285. "otherLine(); // comment",
  286. format("f();\n"
  287. "// first\n"
  288. " // at start\n"
  289. "otherLine(); // comment"));
  290. verifyFormat("f(); // comment\n"
  291. "// first\n"
  292. "// at start\n"
  293. "otherLine();");
  294. EXPECT_EQ("f(); // comment\n"
  295. "// first\n"
  296. "// at start\n"
  297. "otherLine();",
  298. format("f(); // comment\n"
  299. "// first\n"
  300. " // at start\n"
  301. "otherLine();"));
  302. EXPECT_EQ("f(); // comment\n"
  303. " // first\n"
  304. "// at start\n"
  305. "otherLine();",
  306. format("f(); // comment\n"
  307. " // first\n"
  308. "// at start\n"
  309. "otherLine();"));
  310. EXPECT_EQ("void f() {\n"
  311. " lineWith(); // comment\n"
  312. " // at start\n"
  313. "}",
  314. format("void f() {\n"
  315. " lineWith(); // comment\n"
  316. " // at start\n"
  317. "}"));
  318. EXPECT_EQ("int xy; // a\n"
  319. "int z; // b",
  320. format("int xy; // a\n"
  321. "int z; //b"));
  322. EXPECT_EQ("int xy; // a\n"
  323. "int z; // bb",
  324. format("int xy; // a\n"
  325. "int z; //bb",
  326. getLLVMStyleWithColumns(12)));
  327. verifyFormat("#define A \\\n"
  328. " int i; /* iiiiiiiiiiiiiiiiiiiii */ \\\n"
  329. " int jjjjjjjjjjjjjjjjjjjjjjjj; /* */",
  330. getLLVMStyleWithColumns(60));
  331. verifyFormat(
  332. "#define A \\\n"
  333. " int i; /* iiiiiiiiiiiiiiiiiiiii */ \\\n"
  334. " int jjjjjjjjjjjjjjjjjjjjjjjj; /* */",
  335. getLLVMStyleWithColumns(61));
  336. verifyFormat("if ( // This is some comment\n"
  337. " x + 3) {\n"
  338. "}");
  339. EXPECT_EQ("if ( // This is some comment\n"
  340. " // spanning two lines\n"
  341. " x + 3) {\n"
  342. "}",
  343. format("if( // This is some comment\n"
  344. " // spanning two lines\n"
  345. " x + 3) {\n"
  346. "}"));
  347. verifyNoCrash("/\\\n/");
  348. verifyNoCrash("/\\\n* */");
  349. // The 0-character somehow makes the lexer return a proper comment.
  350. verifyNoCrash(StringRef("/*\\\0\n/", 6));
  351. }
  352. TEST_F(FormatTestComments, KeepsParameterWithTrailingCommentsOnTheirOwnLine) {
  353. EXPECT_EQ("SomeFunction(a,\n"
  354. " b, // comment\n"
  355. " c);",
  356. format("SomeFunction(a,\n"
  357. " b, // comment\n"
  358. " c);"));
  359. EXPECT_EQ("SomeFunction(a, b,\n"
  360. " // comment\n"
  361. " c);",
  362. format("SomeFunction(a,\n"
  363. " b,\n"
  364. " // comment\n"
  365. " c);"));
  366. EXPECT_EQ("SomeFunction(a, b, // comment (unclear relation)\n"
  367. " c);",
  368. format("SomeFunction(a, b, // comment (unclear relation)\n"
  369. " c);"));
  370. EXPECT_EQ("SomeFunction(a, // comment\n"
  371. " b,\n"
  372. " c); // comment",
  373. format("SomeFunction(a, // comment\n"
  374. " b,\n"
  375. " c); // comment"));
  376. EXPECT_EQ("aaaaaaaaaa(aaaa(aaaa,\n"
  377. " aaaa), //\n"
  378. " aaaa, bbbbb);",
  379. format("aaaaaaaaaa(aaaa(aaaa,\n"
  380. "aaaa), //\n"
  381. "aaaa, bbbbb);"));
  382. }
  383. TEST_F(FormatTestComments, RemovesTrailingWhitespaceOfComments) {
  384. EXPECT_EQ("// comment", format("// comment "));
  385. EXPECT_EQ("int aaaaaaa, bbbbbbb; // comment",
  386. format("int aaaaaaa, bbbbbbb; // comment ",
  387. getLLVMStyleWithColumns(33)));
  388. EXPECT_EQ("// comment\\\n", format("// comment\\\n \t \v \f "));
  389. EXPECT_EQ("// comment \\\n", format("// comment \\\n \t \v \f "));
  390. }
  391. TEST_F(FormatTestComments, UnderstandsBlockComments) {
  392. verifyFormat("f(/*noSpaceAfterParameterNamingComment=*/true);");
  393. verifyFormat("void f() { g(/*aaa=*/x, /*bbb=*/!y, /*c=*/::c); }");
  394. EXPECT_EQ("f(aaaaaaaaaaaaaaaaaaaaaaaaa, /* Trailing comment for aa... */\n"
  395. " bbbbbbbbbbbbbbbbbbbbbbbbb);",
  396. format("f(aaaaaaaaaaaaaaaaaaaaaaaaa , \\\n"
  397. "/* Trailing comment for aa... */\n"
  398. " bbbbbbbbbbbbbbbbbbbbbbbbb);"));
  399. EXPECT_EQ(
  400. "f(aaaaaaaaaaaaaaaaaaaaaaaaa,\n"
  401. " /* Leading comment for bb... */ bbbbbbbbbbbbbbbbbbbbbbbbb);",
  402. format("f(aaaaaaaaaaaaaaaaaaaaaaaaa , \n"
  403. "/* Leading comment for bb... */ bbbbbbbbbbbbbbbbbbbbbbbbb);"));
  404. EXPECT_EQ(
  405. "void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
  406. " aaaaaaaaaaaaaaaaaa,\n"
  407. " aaaaaaaaaaaaaaaaaa) { /*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/\n"
  408. "}",
  409. format("void aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n"
  410. " aaaaaaaaaaaaaaaaaa ,\n"
  411. " aaaaaaaaaaaaaaaaaa) { /*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/\n"
  412. "}"));
  413. verifyFormat("f(/* aaaaaaaaaaaaaaaaaa = */\n"
  414. " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);");
  415. FormatStyle NoBinPacking = getLLVMStyle();
  416. NoBinPacking.BinPackParameters = false;
  417. verifyFormat("aaaaaaaa(/* parameter 1 */ aaaaaa,\n"
  418. " /* parameter 2 */ aaaaaa,\n"
  419. " /* parameter 3 */ aaaaaa,\n"
  420. " /* parameter 4 */ aaaaaa);",
  421. NoBinPacking);
  422. // Aligning block comments in macros.
  423. verifyGoogleFormat("#define A \\\n"
  424. " int i; /*a*/ \\\n"
  425. " int jjj; /*b*/");
  426. }
  427. TEST_F(FormatTestComments, AlignsBlockComments) {
  428. EXPECT_EQ("/*\n"
  429. " * Really multi-line\n"
  430. " * comment.\n"
  431. " */\n"
  432. "void f() {}",
  433. format(" /*\n"
  434. " * Really multi-line\n"
  435. " * comment.\n"
  436. " */\n"
  437. " void f() {}"));
  438. EXPECT_EQ("class C {\n"
  439. " /*\n"
  440. " * Another multi-line\n"
  441. " * comment.\n"
  442. " */\n"
  443. " void f() {}\n"
  444. "};",
  445. format("class C {\n"
  446. "/*\n"
  447. " * Another multi-line\n"
  448. " * comment.\n"
  449. " */\n"
  450. "void f() {}\n"
  451. "};"));
  452. EXPECT_EQ("/*\n"
  453. " 1. This is a comment with non-trivial formatting.\n"
  454. " 1.1. We have to indent/outdent all lines equally\n"
  455. " 1.1.1. to keep the formatting.\n"
  456. " */",
  457. format(" /*\n"
  458. " 1. This is a comment with non-trivial formatting.\n"
  459. " 1.1. We have to indent/outdent all lines equally\n"
  460. " 1.1.1. to keep the formatting.\n"
  461. " */"));
  462. EXPECT_EQ("/*\n"
  463. "Don't try to outdent if there's not enough indentation.\n"
  464. "*/",
  465. format(" /*\n"
  466. " Don't try to outdent if there's not enough indentation.\n"
  467. " */"));
  468. EXPECT_EQ("int i; /* Comment with empty...\n"
  469. " *\n"
  470. " * line. */",
  471. format("int i; /* Comment with empty...\n"
  472. " *\n"
  473. " * line. */"));
  474. EXPECT_EQ("int foobar = 0; /* comment */\n"
  475. "int bar = 0; /* multiline\n"
  476. " comment 1 */\n"
  477. "int baz = 0; /* multiline\n"
  478. " comment 2 */\n"
  479. "int bzz = 0; /* multiline\n"
  480. " comment 3 */",
  481. format("int foobar = 0; /* comment */\n"
  482. "int bar = 0; /* multiline\n"
  483. " comment 1 */\n"
  484. "int baz = 0; /* multiline\n"
  485. " comment 2 */\n"
  486. "int bzz = 0; /* multiline\n"
  487. " comment 3 */"));
  488. EXPECT_EQ("int foobar = 0; /* comment */\n"
  489. "int bar = 0; /* multiline\n"
  490. " comment */\n"
  491. "int baz = 0; /* multiline\n"
  492. "comment */",
  493. format("int foobar = 0; /* comment */\n"
  494. "int bar = 0; /* multiline\n"
  495. "comment */\n"
  496. "int baz = 0; /* multiline\n"
  497. "comment */"));
  498. }
  499. TEST_F(FormatTestComments, CommentReflowingCanBeTurnedOff) {
  500. FormatStyle Style = getLLVMStyleWithColumns(20);
  501. Style.ReflowComments = false;
  502. verifyFormat("// aaaaaaaaa aaaaaaaaaa aaaaaaaaaa", Style);
  503. verifyFormat("/* aaaaaaaaa aaaaaaaaaa aaaaaaaaaa */", Style);
  504. }
  505. TEST_F(FormatTestComments, CorrectlyHandlesLengthOfBlockComments) {
  506. EXPECT_EQ("double *x; /* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
  507. " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */",
  508. format("double *x; /* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
  509. " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */"));
  510. EXPECT_EQ(
  511. "void ffffffffffff(\n"
  512. " int aaaaaaaa, int bbbbbbbb,\n"
  513. " int cccccccccccc) { /*\n"
  514. " aaaaaaaaaa\n"
  515. " aaaaaaaaaaaaa\n"
  516. " bbbbbbbbbbbbbb\n"
  517. " bbbbbbbbbb\n"
  518. " */\n"
  519. "}",
  520. format("void ffffffffffff(int aaaaaaaa, int bbbbbbbb, int cccccccccccc)\n"
  521. "{ /*\n"
  522. " aaaaaaaaaa aaaaaaaaaaaaa\n"
  523. " bbbbbbbbbbbbbb bbbbbbbbbb\n"
  524. " */\n"
  525. "}",
  526. getLLVMStyleWithColumns(40)));
  527. }
  528. TEST_F(FormatTestComments, DontBreakNonTrailingBlockComments) {
  529. EXPECT_EQ("void ffffffffff(\n"
  530. " int aaaaa /* test */);",
  531. format("void ffffffffff(int aaaaa /* test */);",
  532. getLLVMStyleWithColumns(35)));
  533. }
  534. TEST_F(FormatTestComments, SplitsLongCxxComments) {
  535. EXPECT_EQ("// A comment that\n"
  536. "// doesn't fit on\n"
  537. "// one line",
  538. format("// A comment that doesn't fit on one line",
  539. getLLVMStyleWithColumns(20)));
  540. EXPECT_EQ("/// A comment that\n"
  541. "/// doesn't fit on\n"
  542. "/// one line",
  543. format("/// A comment that doesn't fit on one line",
  544. getLLVMStyleWithColumns(20)));
  545. EXPECT_EQ("//! A comment that\n"
  546. "//! doesn't fit on\n"
  547. "//! one line",
  548. format("//! A comment that doesn't fit on one line",
  549. getLLVMStyleWithColumns(20)));
  550. EXPECT_EQ("// a b c d\n"
  551. "// e f g\n"
  552. "// h i j k",
  553. format("// a b c d e f g h i j k", getLLVMStyleWithColumns(10)));
  554. EXPECT_EQ(
  555. "// a b c d\n"
  556. "// e f g\n"
  557. "// h i j k",
  558. format("\\\n// a b c d e f g h i j k", getLLVMStyleWithColumns(10)));
  559. EXPECT_EQ("if (true) // A comment that\n"
  560. " // doesn't fit on\n"
  561. " // one line",
  562. format("if (true) // A comment that doesn't fit on one line ",
  563. getLLVMStyleWithColumns(30)));
  564. EXPECT_EQ("// Don't_touch_leading_whitespace",
  565. format("// Don't_touch_leading_whitespace",
  566. getLLVMStyleWithColumns(20)));
  567. EXPECT_EQ("// Add leading\n"
  568. "// whitespace",
  569. format("//Add leading whitespace", getLLVMStyleWithColumns(20)));
  570. EXPECT_EQ("/// Add leading\n"
  571. "/// whitespace",
  572. format("///Add leading whitespace", getLLVMStyleWithColumns(20)));
  573. EXPECT_EQ("//! Add leading\n"
  574. "//! whitespace",
  575. format("//!Add leading whitespace", getLLVMStyleWithColumns(20)));
  576. EXPECT_EQ("// whitespace", format("//whitespace", getLLVMStyle()));
  577. EXPECT_EQ("// Even if it makes the line exceed the column\n"
  578. "// limit",
  579. format("//Even if it makes the line exceed the column limit",
  580. getLLVMStyleWithColumns(51)));
  581. EXPECT_EQ("//--But not here", format("//--But not here", getLLVMStyle()));
  582. EXPECT_EQ("/// line 1\n"
  583. "// add leading whitespace",
  584. format("/// line 1\n"
  585. "//add leading whitespace",
  586. getLLVMStyleWithColumns(30)));
  587. EXPECT_EQ("/// line 1\n"
  588. "/// line 2\n"
  589. "//! line 3\n"
  590. "//! line 4\n"
  591. "//! line 5\n"
  592. "// line 6\n"
  593. "// line 7",
  594. format("///line 1\n"
  595. "///line 2\n"
  596. "//! line 3\n"
  597. "//!line 4\n"
  598. "//!line 5\n"
  599. "// line 6\n"
  600. "//line 7", getLLVMStyleWithColumns(20)));
  601. EXPECT_EQ("// aa bb cc dd",
  602. format("// aa bb cc dd ",
  603. getLLVMStyleWithColumns(15)));
  604. EXPECT_EQ("// A comment before\n"
  605. "// a macro\n"
  606. "// definition\n"
  607. "#define a b",
  608. format("// A comment before a macro definition\n"
  609. "#define a b",
  610. getLLVMStyleWithColumns(20)));
  611. EXPECT_EQ("void ffffff(\n"
  612. " int aaaaaaaaa, // wwww\n"
  613. " int bbbbbbbbbb, // xxxxxxx\n"
  614. " // yyyyyyyyyy\n"
  615. " int c, int d, int e) {}",
  616. format("void ffffff(\n"
  617. " int aaaaaaaaa, // wwww\n"
  618. " int bbbbbbbbbb, // xxxxxxx yyyyyyyyyy\n"
  619. " int c, int d, int e) {}",
  620. getLLVMStyleWithColumns(40)));
  621. EXPECT_EQ("//\t aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  622. format("//\t aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  623. getLLVMStyleWithColumns(20)));
  624. EXPECT_EQ(
  625. "#define XXX // a b c d\n"
  626. " // e f g h",
  627. format("#define XXX // a b c d e f g h", getLLVMStyleWithColumns(22)));
  628. EXPECT_EQ(
  629. "#define XXX // q w e r\n"
  630. " // t y u i",
  631. format("#define XXX //q w e r t y u i", getLLVMStyleWithColumns(22)));
  632. EXPECT_EQ("{\n"
  633. " //\n"
  634. " //\\\n"
  635. " // long 1 2 3 4\n"
  636. " // 5\n"
  637. "}",
  638. format("{\n"
  639. " //\n"
  640. " //\\\n"
  641. " // long 1 2 3 4 5\n"
  642. "}",
  643. getLLVMStyleWithColumns(20)));
  644. }
  645. TEST_F(FormatTestComments, PreservesHangingIndentInCxxComments) {
  646. EXPECT_EQ("// A comment\n"
  647. "// that doesn't\n"
  648. "// fit on one\n"
  649. "// line",
  650. format("// A comment that doesn't fit on one line",
  651. getLLVMStyleWithColumns(20)));
  652. EXPECT_EQ("/// A comment\n"
  653. "/// that doesn't\n"
  654. "/// fit on one\n"
  655. "/// line",
  656. format("/// A comment that doesn't fit on one line",
  657. getLLVMStyleWithColumns(20)));
  658. }
  659. TEST_F(FormatTestComments, DontSplitLineCommentsWithEscapedNewlines) {
  660. EXPECT_EQ("// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
  661. "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
  662. "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  663. format("// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
  664. "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\\n"
  665. "// aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
  666. EXPECT_EQ("int a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  667. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  668. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  669. format("int a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  670. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  671. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  672. getLLVMStyleWithColumns(50)));
  673. // FIXME: One day we might want to implement adjustment of leading whitespace
  674. // of the consecutive lines in this kind of comment:
  675. EXPECT_EQ("double\n"
  676. " a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  677. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  678. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  679. format("double a; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  680. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\n"
  681. " // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
  682. getLLVMStyleWithColumns(49)));
  683. }
  684. TEST_F(FormatTestComments, DontSplitLineCommentsWithPragmas) {
  685. FormatStyle Pragmas = getLLVMStyleWithColumns(30);
  686. Pragmas.CommentPragmas = "^ IWYU pragma:";
  687. EXPECT_EQ(
  688. "// IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb",
  689. format("// IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb", Pragmas));
  690. EXPECT_EQ(
  691. "/* IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb */",
  692. format("/* IWYU pragma: aaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbb */", Pragmas));
  693. }
  694. TEST_F(FormatTestComments, PriorityOfCommentBreaking) {
  695. EXPECT_EQ("if (xxx ==\n"
  696. " yyy && // aaaaaaaaaaaa bbbbbbbbb\n"
  697. " zzz)\n"
  698. " q();",
  699. format("if (xxx == yyy && // aaaaaaaaaaaa bbbbbbbbb\n"
  700. " zzz) q();",
  701. getLLVMStyleWithColumns(40)));
  702. EXPECT_EQ("if (xxxxxxxxxx ==\n"
  703. " yyy && // aaaaaa bbbbbbbb cccc\n"
  704. " zzz)\n"
  705. " q();",
  706. format("if (xxxxxxxxxx == yyy && // aaaaaa bbbbbbbb cccc\n"
  707. " zzz) q();",
  708. getLLVMStyleWithColumns(40)));
  709. EXPECT_EQ("if (xxxxxxxxxx &&\n"
  710. " yyy || // aaaaaa bbbbbbbb cccc\n"
  711. " zzz)\n"
  712. " q();",
  713. format("if (xxxxxxxxxx && yyy || // aaaaaa bbbbbbbb cccc\n"
  714. " zzz) q();",
  715. getLLVMStyleWithColumns(40)));
  716. EXPECT_EQ("fffffffff(\n"
  717. " &xxx, // aaaaaaaaaaaa bbbbbbbbbbb\n"
  718. " zzz);",
  719. format("fffffffff(&xxx, // aaaaaaaaaaaa bbbbbbbbbbb\n"
  720. " zzz);",
  721. getLLVMStyleWithColumns(40)));
  722. }
  723. TEST_F(FormatTestComments, MultiLineCommentsInDefines) {
  724. EXPECT_EQ("#define A(x) /* \\\n"
  725. " a comment \\\n"
  726. " inside */ \\\n"
  727. " f();",
  728. format("#define A(x) /* \\\n"
  729. " a comment \\\n"
  730. " inside */ \\\n"
  731. " f();",
  732. getLLVMStyleWithColumns(17)));
  733. EXPECT_EQ("#define A( \\\n"
  734. " x) /* \\\n"
  735. " a comment \\\n"
  736. " inside */ \\\n"
  737. " f();",
  738. format("#define A( \\\n"
  739. " x) /* \\\n"
  740. " a comment \\\n"
  741. " inside */ \\\n"
  742. " f();",
  743. getLLVMStyleWithColumns(17)));
  744. }
  745. TEST_F(FormatTestComments, ParsesCommentsAdjacentToPPDirectives) {
  746. EXPECT_EQ("namespace {}\n// Test\n#define A",
  747. format("namespace {}\n // Test\n#define A"));
  748. EXPECT_EQ("namespace {}\n/* Test */\n#define A",
  749. format("namespace {}\n /* Test */\n#define A"));
  750. EXPECT_EQ("namespace {}\n/* Test */ #define A",
  751. format("namespace {}\n /* Test */ #define A"));
  752. }
  753. TEST_F(FormatTestComments, SplitsLongLinesInComments) {
  754. EXPECT_EQ("/* This is a long\n"
  755. " * comment that\n"
  756. " * doesn't\n"
  757. " * fit on one line.\n"
  758. " */",
  759. format("/* "
  760. "This is a long "
  761. "comment that "
  762. "doesn't "
  763. "fit on one line. */",
  764. getLLVMStyleWithColumns(20)));
  765. EXPECT_EQ(
  766. "/* a b c d\n"
  767. " * e f g\n"
  768. " * h i j k\n"
  769. " */",
  770. format("/* a b c d e f g h i j k */", getLLVMStyleWithColumns(10)));
  771. EXPECT_EQ(
  772. "/* a b c d\n"
  773. " * e f g\n"
  774. " * h i j k\n"
  775. " */",
  776. format("\\\n/* a b c d e f g h i j k */", getLLVMStyleWithColumns(10)));
  777. EXPECT_EQ("/*\n"
  778. "This is a long\n"
  779. "comment that doesn't\n"
  780. "fit on one line.\n"
  781. "*/",
  782. format("/*\n"
  783. "This is a long "
  784. "comment that doesn't "
  785. "fit on one line. \n"
  786. "*/",
  787. getLLVMStyleWithColumns(20)));
  788. EXPECT_EQ("/*\n"
  789. " * This is a long\n"
  790. " * comment that\n"
  791. " * doesn't fit on\n"
  792. " * one line.\n"
  793. " */",
  794. format("/* \n"
  795. " * This is a long "
  796. " comment that "
  797. " doesn't fit on "
  798. " one line. \n"
  799. " */",
  800. getLLVMStyleWithColumns(20)));
  801. EXPECT_EQ("/*\n"
  802. " * This_is_a_comment_with_words_that_dont_fit_on_one_line\n"
  803. " * so_it_should_be_broken\n"
  804. " * wherever_a_space_occurs\n"
  805. " */",
  806. format("/*\n"
  807. " * This_is_a_comment_with_words_that_dont_fit_on_one_line "
  808. " so_it_should_be_broken "
  809. " wherever_a_space_occurs \n"
  810. " */",
  811. getLLVMStyleWithColumns(20)));
  812. EXPECT_EQ("/*\n"
  813. " * This_comment_can_not_be_broken_into_lines\n"
  814. " */",
  815. format("/*\n"
  816. " * This_comment_can_not_be_broken_into_lines\n"
  817. " */",
  818. getLLVMStyleWithColumns(20)));
  819. EXPECT_EQ("{\n"
  820. " /*\n"
  821. " This is another\n"
  822. " long comment that\n"
  823. " doesn't fit on one\n"
  824. " line 1234567890\n"
  825. " */\n"
  826. "}",
  827. format("{\n"
  828. "/*\n"
  829. "This is another "
  830. " long comment that "
  831. " doesn't fit on one"
  832. " line 1234567890\n"
  833. "*/\n"
  834. "}",
  835. getLLVMStyleWithColumns(20)));
  836. EXPECT_EQ("{\n"
  837. " /*\n"
  838. " * This i s\n"
  839. " * another comment\n"
  840. " * t hat doesn' t\n"
  841. " * fit on one l i\n"
  842. " * n e\n"
  843. " */\n"
  844. "}",
  845. format("{\n"
  846. "/*\n"
  847. " * This i s"
  848. " another comment"
  849. " t hat doesn' t"
  850. " fit on one l i"
  851. " n e\n"
  852. " */\n"
  853. "}",
  854. getLLVMStyleWithColumns(20)));
  855. EXPECT_EQ("/*\n"
  856. " * This is a long\n"
  857. " * comment that\n"
  858. " * doesn't fit on\n"
  859. " * one line\n"
  860. " */",
  861. format(" /*\n"
  862. " * This is a long comment that doesn't fit on one line\n"
  863. " */",
  864. getLLVMStyleWithColumns(20)));
  865. EXPECT_EQ("{\n"
  866. " if (something) /* This is a\n"
  867. " long\n"
  868. " comment */\n"
  869. " ;\n"
  870. "}",
  871. format("{\n"
  872. " if (something) /* This is a long comment */\n"
  873. " ;\n"
  874. "}",
  875. getLLVMStyleWithColumns(30)));
  876. EXPECT_EQ("/* A comment before\n"
  877. " * a macro\n"
  878. " * definition */\n"
  879. "#define a b",
  880. format("/* A comment before a macro definition */\n"
  881. "#define a b",
  882. getLLVMStyleWithColumns(20)));
  883. EXPECT_EQ("/* some comment\n"
  884. " * a comment that\n"
  885. " * we break another\n"
  886. " * comment we have\n"
  887. " * to break a left\n"
  888. " * comment\n"
  889. " */",
  890. format(" /* some comment\n"
  891. " * a comment that we break\n"
  892. " * another comment we have to break\n"
  893. "* a left comment\n"
  894. " */",
  895. getLLVMStyleWithColumns(20)));
  896. EXPECT_EQ("/**\n"
  897. " * multiline block\n"
  898. " * comment\n"
  899. " *\n"
  900. " */",
  901. format("/**\n"
  902. " * multiline block comment\n"
  903. " *\n"
  904. " */",
  905. getLLVMStyleWithColumns(20)));
  906. EXPECT_EQ("/*\n"
  907. "\n"
  908. "\n"
  909. " */\n",
  910. format(" /* \n"
  911. " \n"
  912. " \n"
  913. " */\n"));
  914. EXPECT_EQ("/* a a */",
  915. format("/* a a */", getLLVMStyleWithColumns(15)));
  916. EXPECT_EQ("/* a a bc */",
  917. format("/* a a bc */", getLLVMStyleWithColumns(15)));
  918. EXPECT_EQ("/* aaa aaa\n"
  919. " * aaaaa */",
  920. format("/* aaa aaa aaaaa */", getLLVMStyleWithColumns(15)));
  921. EXPECT_EQ("/* aaa aaa\n"
  922. " * aaaaa */",
  923. format("/* aaa aaa aaaaa */", getLLVMStyleWithColumns(15)));
  924. }
  925. TEST_F(FormatTestComments, SplitsLongLinesInCommentsInPreprocessor) {
  926. EXPECT_EQ("#define X \\\n"
  927. " /* \\\n"
  928. " Test \\\n"
  929. " Macro comment \\\n"
  930. " with a long \\\n"
  931. " line \\\n"
  932. " */ \\\n"
  933. " A + B",
  934. format("#define X \\\n"
  935. " /*\n"
  936. " Test\n"
  937. " Macro comment with a long line\n"
  938. " */ \\\n"
  939. " A + B",
  940. getLLVMStyleWithColumns(20)));
  941. EXPECT_EQ("#define X \\\n"
  942. " /* Macro comment \\\n"
  943. " with a long \\\n"
  944. " line */ \\\n"
  945. " A + B",
  946. format("#define X \\\n"
  947. " /* Macro comment with a long\n"
  948. " line */ \\\n"
  949. " A + B",
  950. getLLVMStyleWithColumns(20)));
  951. EXPECT_EQ("#define X \\\n"
  952. " /* Macro comment \\\n"
  953. " * with a long \\\n"
  954. " * line */ \\\n"
  955. " A + B",
  956. format("#define X \\\n"
  957. " /* Macro comment with a long line */ \\\n"
  958. " A + B",
  959. getLLVMStyleWithColumns(20)));
  960. }
  961. TEST_F(FormatTestComments, CommentsInStaticInitializers) {
  962. EXPECT_EQ(
  963. "static SomeType type = {aaaaaaaaaaaaaaaaaaaa, /* comment */\n"
  964. " aaaaaaaaaaaaaaaaaaaa /* comment */,\n"
  965. " /* comment */ aaaaaaaaaaaaaaaaaaaa,\n"
  966. " aaaaaaaaaaaaaaaaaaaa, // comment\n"
  967. " aaaaaaaaaaaaaaaaaaaa};",
  968. format("static SomeType type = { aaaaaaaaaaaaaaaaaaaa , /* comment */\n"
  969. " aaaaaaaaaaaaaaaaaaaa /* comment */ ,\n"
  970. " /* comment */ aaaaaaaaaaaaaaaaaaaa ,\n"
  971. " aaaaaaaaaaaaaaaaaaaa , // comment\n"
  972. " aaaaaaaaaaaaaaaaaaaa };"));
  973. verifyFormat("static SomeType type = {aaaaaaaaaaa, // comment for aa...\n"
  974. " bbbbbbbbbbb, ccccccccccc};");
  975. verifyFormat("static SomeType type = {aaaaaaaaaaa,\n"
  976. " // comment for bb....\n"
  977. " bbbbbbbbbbb, ccccccccccc};");
  978. verifyGoogleFormat(
  979. "static SomeType type = {aaaaaaaaaaa, // comment for aa...\n"
  980. " bbbbbbbbbbb, ccccccccccc};");
  981. verifyGoogleFormat("static SomeType type = {aaaaaaaaaaa,\n"
  982. " // comment for bb....\n"
  983. " bbbbbbbbbbb, ccccccccccc};");
  984. verifyFormat("S s = {{a, b, c}, // Group #1\n"
  985. " {d, e, f}, // Group #2\n"
  986. " {g, h, i}}; // Group #3");
  987. verifyFormat("S s = {{// Group #1\n"
  988. " a, b, c},\n"
  989. " {// Group #2\n"
  990. " d, e, f},\n"
  991. " {// Group #3\n"
  992. " g, h, i}};");
  993. EXPECT_EQ("S s = {\n"
  994. " // Some comment\n"
  995. " a,\n"
  996. "\n"
  997. " // Comment after empty line\n"
  998. " b}",
  999. format("S s = {\n"
  1000. " // Some comment\n"
  1001. " a,\n"
  1002. " \n"
  1003. " // Comment after empty line\n"
  1004. " b\n"
  1005. "}"));
  1006. EXPECT_EQ("S s = {\n"
  1007. " /* Some comment */\n"
  1008. " a,\n"
  1009. "\n"
  1010. " /* Comment after empty line */\n"
  1011. " b}",
  1012. format("S s = {\n"
  1013. " /* Some comment */\n"
  1014. " a,\n"
  1015. " \n"
  1016. " /* Comment after empty line */\n"
  1017. " b\n"
  1018. "}"));
  1019. verifyFormat("const uint8_t aaaaaaaaaaaaaaaaaaaaaa[0] = {\n"
  1020. " 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // comment\n"
  1021. " 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // comment\n"
  1022. " 0x00, 0x00, 0x00, 0x00}; // comment\n");
  1023. }
  1024. TEST_F(FormatTestComments, LineCommentsAfterRightBrace) {
  1025. EXPECT_EQ("if (true) { // comment about branch\n"
  1026. " // comment about f\n"
  1027. " f();\n"
  1028. "}",
  1029. format("if (true) { // comment about branch\n"
  1030. " // comment about f\n"
  1031. " f();\n"
  1032. "}",
  1033. getLLVMStyleWithColumns(80)));
  1034. EXPECT_EQ("if (1) { // if line 1\n"
  1035. " // if line 2\n"
  1036. " // if line 3\n"
  1037. " // f line 1\n"
  1038. " // f line 2\n"
  1039. " f();\n"
  1040. "} else { // else line 1\n"
  1041. " // else line 2\n"
  1042. " // else line 3\n"
  1043. " // g line 1\n"
  1044. " g();\n"
  1045. "}",
  1046. format("if (1) { // if line 1\n"
  1047. " // if line 2\n"
  1048. " // if line 3\n"
  1049. " // f line 1\n"
  1050. " // f line 2\n"
  1051. " f();\n"
  1052. "} else { // else line 1\n"
  1053. " // else line 2\n"
  1054. " // else line 3\n"
  1055. " // g line 1\n"
  1056. " g();\n"
  1057. "}"));
  1058. EXPECT_EQ("do { // line 1\n"
  1059. " // line 2\n"
  1060. " // line 3\n"
  1061. " f();\n"
  1062. "} while (true);",
  1063. format("do { // line 1\n"
  1064. " // line 2\n"
  1065. " // line 3\n"
  1066. " f();\n"
  1067. "} while (true);",
  1068. getLLVMStyleWithColumns(80)));
  1069. EXPECT_EQ("while (a < b) { // line 1\n"
  1070. " // line 2\n"
  1071. " // line 3\n"
  1072. " f();\n"
  1073. "}",
  1074. format("while (a < b) {// line 1\n"
  1075. " // line 2\n"
  1076. " // line 3\n"
  1077. " f();\n"
  1078. "}",
  1079. getLLVMStyleWithColumns(80)));
  1080. }
  1081. TEST_F(FormatTestComments, ReflowsComments) {
  1082. // Break a long line and reflow with the full next line.
  1083. EXPECT_EQ("// long long long\n"
  1084. "// long long",
  1085. format("// long long long long\n"
  1086. "// long",
  1087. getLLVMStyleWithColumns(20)));
  1088. // Keep the trailing newline while reflowing.
  1089. EXPECT_EQ("// long long long\n"
  1090. "// long long\n",
  1091. format("// long long long long\n"
  1092. "// long\n",
  1093. getLLVMStyleWithColumns(20)));
  1094. // Break a long line and reflow with a part of the next line.
  1095. EXPECT_EQ("// long long long\n"
  1096. "// long long\n"
  1097. "// long_long",
  1098. format("// long long long long\n"
  1099. "// long long_long",
  1100. getLLVMStyleWithColumns(20)));
  1101. // Break but do not reflow if the first word from the next line is too long.
  1102. EXPECT_EQ("// long long long\n"
  1103. "// long\n"
  1104. "// long_long_long\n",
  1105. format("// long long long long\n"
  1106. "// long_long_long\n",
  1107. getLLVMStyleWithColumns(20)));
  1108. // Don't break or reflow short lines.
  1109. verifyFormat("// long\n"
  1110. "// long long long lo\n"
  1111. "// long long long lo\n"
  1112. "// long",
  1113. getLLVMStyleWithColumns(20));
  1114. // Keep prefixes and decorations while reflowing.
  1115. EXPECT_EQ("/// long long long\n"
  1116. "/// long long\n",
  1117. format("/// long long long long\n"
  1118. "/// long\n",
  1119. getLLVMStyleWithColumns(20)));
  1120. EXPECT_EQ("//! long long long\n"
  1121. "//! long long\n",
  1122. format("//! long long long long\n"
  1123. "//! long\n",
  1124. getLLVMStyleWithColumns(20)));
  1125. EXPECT_EQ("/* long long long\n"
  1126. " * long long */",
  1127. format("/* long long long long\n"
  1128. " * long */",
  1129. getLLVMStyleWithColumns(20)));
  1130. // Don't bring leading whitespace up while reflowing.
  1131. EXPECT_EQ("/* long long long\n"
  1132. " * long long long\n"
  1133. " */",
  1134. format("/* long long long long\n"
  1135. " * long long\n"
  1136. " */",
  1137. getLLVMStyleWithColumns(20)));
  1138. // Reflow the last line of a block comment with its trailing '*/'.
  1139. EXPECT_EQ("/* long long long\n"
  1140. " long long */",
  1141. format("/* long long long long\n"
  1142. " long */",
  1143. getLLVMStyleWithColumns(20)));
  1144. // Reflow two short lines; keep the postfix of the last one.
  1145. EXPECT_EQ("/* long long long\n"
  1146. " * long long long */",
  1147. format("/* long long long long\n"
  1148. " * long\n"
  1149. " * long */",
  1150. getLLVMStyleWithColumns(20)));
  1151. // Put the postfix of the last short reflow line on a newline if it doesn't
  1152. // fit.
  1153. EXPECT_EQ("/* long long long\n"
  1154. " * long long longg\n"
  1155. " */",
  1156. format("/* long long long long\n"
  1157. " * long\n"
  1158. " * longg */",
  1159. getLLVMStyleWithColumns(20)));
  1160. // Reflow lines with leading whitespace.
  1161. EXPECT_EQ("{\n"
  1162. " /*\n"
  1163. " * long long long\n"
  1164. " * long long long\n"
  1165. " * long long long\n"
  1166. " */\n"
  1167. "}",
  1168. format("{\n"
  1169. "/*\n"
  1170. " * long long long long\n"
  1171. " * long\n"
  1172. " * long long long long\n"
  1173. " */\n"
  1174. "}",
  1175. getLLVMStyleWithColumns(20)));
  1176. // Break single line block comments that are first in the line with ' *'
  1177. // decoration.
  1178. EXPECT_EQ("/* long long long\n"
  1179. " * long */",
  1180. format("/* long long long long */", getLLVMStyleWithColumns(20)));
  1181. // Break single line block comment that are not first in the line with ' '
  1182. // decoration.
  1183. EXPECT_EQ("int i; /* long long\n"
  1184. " long */",
  1185. format("int i; /* long long long */", getLLVMStyleWithColumns(20)));
  1186. // Reflow a line that goes just over the column limit.
  1187. EXPECT_EQ("// long long long\n"
  1188. "// lon long",
  1189. format("// long long long lon\n"
  1190. "// long",
  1191. getLLVMStyleWithColumns(20)));
  1192. // Stop reflowing if the next line has a different indentation than the
  1193. // previous line.
  1194. EXPECT_EQ("// long long long\n"
  1195. "// long\n"
  1196. "// long long\n"
  1197. "// long",
  1198. format("// long long long long\n"
  1199. "// long long\n"
  1200. "// long",
  1201. getLLVMStyleWithColumns(20)));
  1202. // Reflow into the last part of a really long line that has been broken into
  1203. // multiple lines.
  1204. EXPECT_EQ("// long long long\n"
  1205. "// long long long\n"
  1206. "// long long long\n",
  1207. format("// long long long long long long long long\n"
  1208. "// long\n",
  1209. getLLVMStyleWithColumns(20)));
  1210. // Break the first line, then reflow the beginning of the second and third
  1211. // line up.
  1212. EXPECT_EQ("// long long long\n"
  1213. "// lon1 lon2 lon2\n"
  1214. "// lon2 lon3 lon3",
  1215. format("// long long long lon1\n"
  1216. "// lon2 lon2 lon2\n"
  1217. "// lon3 lon3",
  1218. getLLVMStyleWithColumns(20)));
  1219. // Reflow the beginning of the second line, then break the rest.
  1220. EXPECT_EQ("// long long long\n"
  1221. "// lon1 lon2 lon2\n"
  1222. "// lon2 lon2 lon2\n"
  1223. "// lon3",
  1224. format("// long long long lon1\n"
  1225. "// lon2 lon2 lon2 lon2 lon2 lon3",
  1226. getLLVMStyleWithColumns(20)));
  1227. // Shrink the first line, then reflow the second line up.
  1228. EXPECT_EQ("// long long long", format("// long long\n"
  1229. "// long",
  1230. getLLVMStyleWithColumns(20)));
  1231. // Don't shrink leading whitespace.
  1232. EXPECT_EQ("int i; /// a",
  1233. format("int i; /// a", getLLVMStyleWithColumns(20)));
  1234. // Shrink trailing whitespace if there is no postfix and reflow.
  1235. EXPECT_EQ("// long long long\n"
  1236. "// long long",
  1237. format("// long long long long \n"
  1238. "// long",
  1239. getLLVMStyleWithColumns(20)));
  1240. // Shrink trailing whitespace to a single one if there is postfix.
  1241. EXPECT_EQ("/* long long long */",
  1242. format("/* long long long */", getLLVMStyleWithColumns(20)));
  1243. // Break a block comment postfix if exceeding the line limit.
  1244. EXPECT_EQ("/* long\n"
  1245. " */",
  1246. format("/* long */", getLLVMStyleWithColumns(20)));
  1247. // Reflow indented comments.
  1248. EXPECT_EQ("{\n"
  1249. " // long long long\n"
  1250. " // long long\n"
  1251. " int i; /* long lon\n"
  1252. " g long\n"
  1253. " */\n"
  1254. "}",
  1255. format("{\n"
  1256. " // long long long long\n"
  1257. " // long\n"
  1258. " int i; /* long lon g\n"
  1259. " long */\n"
  1260. "}",
  1261. getLLVMStyleWithColumns(20)));
  1262. // Don't realign trailing comments after reflow has happened.
  1263. EXPECT_EQ("// long long long\n"
  1264. "// long long\n"
  1265. "long i; // long",
  1266. format("// long long long long\n"
  1267. "// long\n"
  1268. "long i; // long",
  1269. getLLVMStyleWithColumns(20)));
  1270. EXPECT_EQ("// long long long\n"
  1271. "// longng long long\n"
  1272. "// long lo",
  1273. format("// long long long longng\n"
  1274. "// long long long\n"
  1275. "// lo",
  1276. getLLVMStyleWithColumns(20)));
  1277. // Reflow lines after a broken line.
  1278. EXPECT_EQ("int a; // Trailing\n"
  1279. " // comment on\n"
  1280. " // 2 or 3\n"
  1281. " // lines.\n",
  1282. format("int a; // Trailing comment\n"
  1283. " // on 2\n"
  1284. " // or 3\n"
  1285. " // lines.\n",
  1286. getLLVMStyleWithColumns(20)));
  1287. EXPECT_EQ("/// This long line\n"
  1288. "/// gets reflown.\n",
  1289. format("/// This long line gets\n"
  1290. "/// reflown.\n",
  1291. getLLVMStyleWithColumns(20)));
  1292. EXPECT_EQ("//! This long line\n"
  1293. "//! gets reflown.\n",
  1294. format(" //! This long line gets\n"
  1295. " //! reflown.\n",
  1296. getLLVMStyleWithColumns(20)));
  1297. EXPECT_EQ("/* This long line\n"
  1298. " * gets reflown.\n"
  1299. " */\n",
  1300. format("/* This long line gets\n"
  1301. " * reflown.\n"
  1302. " */\n",
  1303. getLLVMStyleWithColumns(20)));
  1304. // Reflow after indentation makes a line too long.
  1305. EXPECT_EQ("{\n"
  1306. " // long long long\n"
  1307. " // lo long\n"
  1308. "}\n",
  1309. format("{\n"
  1310. "// long long long lo\n"
  1311. "// long\n"
  1312. "}\n",
  1313. getLLVMStyleWithColumns(20)));
  1314. // Break and reflow multiple lines.
  1315. EXPECT_EQ("/*\n"
  1316. " * Reflow the end of\n"
  1317. " * line by 11 22 33\n"
  1318. " * 4.\n"
  1319. " */\n",
  1320. format("/*\n"
  1321. " * Reflow the end of line\n"
  1322. " * by\n"
  1323. " * 11\n"
  1324. " * 22\n"
  1325. " * 33\n"
  1326. " * 4.\n"
  1327. " */\n",
  1328. getLLVMStyleWithColumns(20)));
  1329. EXPECT_EQ("/// First line gets\n"
  1330. "/// broken. Second\n"
  1331. "/// line gets\n"
  1332. "/// reflown and\n"
  1333. "/// broken. Third\n"
  1334. "/// gets reflown.\n",
  1335. format("/// First line gets broken.\n"
  1336. "/// Second line gets reflown and broken.\n"
  1337. "/// Third gets reflown.\n",
  1338. getLLVMStyleWithColumns(20)));
  1339. EXPECT_EQ("int i; // first long\n"
  1340. " // long snd\n"
  1341. " // long.\n",
  1342. format("int i; // first long long\n"
  1343. " // snd long.\n",
  1344. getLLVMStyleWithColumns(20)));
  1345. EXPECT_EQ("{\n"
  1346. " // first long line\n"
  1347. " // line second\n"
  1348. " // long line line\n"
  1349. " // third long line\n"
  1350. " // line\n"
  1351. "}\n",
  1352. format("{\n"
  1353. " // first long line line\n"
  1354. " // second long line line\n"
  1355. " // third long line line\n"
  1356. "}\n",
  1357. getLLVMStyleWithColumns(20)));
  1358. EXPECT_EQ("int i; /* first line\n"
  1359. " * second\n"
  1360. " * line third\n"
  1361. " * line\n"
  1362. " */",
  1363. format("int i; /* first line\n"
  1364. " * second line\n"
  1365. " * third line\n"
  1366. " */",
  1367. getLLVMStyleWithColumns(20)));
  1368. // Reflow the last two lines of a section that starts with a line having
  1369. // different indentation.
  1370. EXPECT_EQ(
  1371. "// long\n"
  1372. "// long long long\n"
  1373. "// long long",
  1374. format("// long\n"
  1375. "// long long long long\n"
  1376. "// long",
  1377. getLLVMStyleWithColumns(20)));
  1378. // Keep the block comment endling '*/' while reflowing.
  1379. EXPECT_EQ("/* Long long long\n"
  1380. " * line short */\n",
  1381. format("/* Long long long line\n"
  1382. " * short */\n",
  1383. getLLVMStyleWithColumns(20)));
  1384. // Don't reflow between separate blocks of comments.
  1385. EXPECT_EQ("/* First comment\n"
  1386. " * block will */\n"
  1387. "/* Snd\n"
  1388. " */\n",
  1389. format("/* First comment block\n"
  1390. " * will */\n"
  1391. "/* Snd\n"
  1392. " */\n",
  1393. getLLVMStyleWithColumns(20)));
  1394. // Don't reflow across blank comment lines.
  1395. EXPECT_EQ("int i; // This long\n"
  1396. " // line gets\n"
  1397. " // broken.\n"
  1398. " //\n"
  1399. " // keep.\n",
  1400. format("int i; // This long line gets broken.\n"
  1401. " // \n"
  1402. " // keep.\n",
  1403. getLLVMStyleWithColumns(20)));
  1404. EXPECT_EQ("{\n"
  1405. " /// long long long\n"
  1406. " /// long long\n"
  1407. " ///\n"
  1408. " /// long\n"
  1409. "}",
  1410. format("{\n"
  1411. " /// long long long long\n"
  1412. " /// long\n"
  1413. " ///\n"
  1414. " /// long\n"
  1415. "}",
  1416. getLLVMStyleWithColumns(20)));
  1417. EXPECT_EQ("//! long long long\n"
  1418. "//! long\n"
  1419. "\n"
  1420. "//! long",
  1421. format("//! long long long long\n"
  1422. "\n"
  1423. "//! long",
  1424. getLLVMStyleWithColumns(20)));
  1425. EXPECT_EQ("/* long long long\n"
  1426. " long\n"
  1427. "\n"
  1428. " long */",
  1429. format("/* long long long long\n"
  1430. "\n"
  1431. " long */",
  1432. getLLVMStyleWithColumns(20)));
  1433. EXPECT_EQ("/* long long long\n"
  1434. " * long\n"
  1435. " *\n"
  1436. " * long */",
  1437. format("/* long long long long\n"
  1438. " *\n"
  1439. " * long */",
  1440. getLLVMStyleWithColumns(20)));
  1441. // Don't reflow lines having content that is a single character.
  1442. EXPECT_EQ("// long long long\n"
  1443. "// long\n"
  1444. "// l",
  1445. format("// long long long long\n"
  1446. "// l",
  1447. getLLVMStyleWithColumns(20)));
  1448. // Don't reflow lines starting with two punctuation characters.
  1449. EXPECT_EQ("// long long long\n"
  1450. "// long\n"
  1451. "// ... --- ...",
  1452. format(
  1453. "// long long long long\n"
  1454. "// ... --- ...",
  1455. getLLVMStyleWithColumns(20)));
  1456. // Don't reflow lines starting with '@'.
  1457. EXPECT_EQ("// long long long\n"
  1458. "// long\n"
  1459. "// @param arg",
  1460. format("// long long long long\n"
  1461. "// @param arg",
  1462. getLLVMStyleWithColumns(20)));
  1463. // Don't reflow lines starting with 'TODO'.
  1464. EXPECT_EQ("// long long long\n"
  1465. "// long\n"
  1466. "// TODO: long",
  1467. format("// long long long long\n"
  1468. "// TODO: long",
  1469. getLLVMStyleWithColumns(20)));
  1470. // Don't reflow lines starting with 'FIXME'.
  1471. EXPECT_EQ("// long long long\n"
  1472. "// long\n"
  1473. "// FIXME: long",
  1474. format("// long long long long\n"
  1475. "// FIXME: long",
  1476. getLLVMStyleWithColumns(20)));
  1477. // Don't reflow lines starting with 'XXX'.
  1478. EXPECT_EQ("// long long long\n"
  1479. "// long\n"
  1480. "// XXX: long",
  1481. format("// long long long long\n"
  1482. "// XXX: long",
  1483. getLLVMStyleWithColumns(20)));
  1484. // Don't reflow comment pragmas.
  1485. EXPECT_EQ("// long long long\n"
  1486. "// long\n"
  1487. "// IWYU pragma:",
  1488. format("// long long long long\n"
  1489. "// IWYU pragma:",
  1490. getLLVMStyleWithColumns(20)));
  1491. EXPECT_EQ("/* long long long\n"
  1492. " * long\n"
  1493. " * IWYU pragma:\n"
  1494. " */",
  1495. format("/* long long long long\n"
  1496. " * IWYU pragma:\n"
  1497. " */",
  1498. getLLVMStyleWithColumns(20)));
  1499. // Reflow lines that have a non-punctuation character among their first 2
  1500. // characters.
  1501. EXPECT_EQ("// long long long\n"
  1502. "// long 'long'",
  1503. format(
  1504. "// long long long long\n"
  1505. "// 'long'",
  1506. getLLVMStyleWithColumns(20)));
  1507. // Don't reflow between separate blocks of comments.
  1508. EXPECT_EQ("/* First comment\n"
  1509. " * block will */\n"
  1510. "/* Snd\n"
  1511. " */\n",
  1512. format("/* First comment block\n"
  1513. " * will */\n"
  1514. "/* Snd\n"
  1515. " */\n",
  1516. getLLVMStyleWithColumns(20)));
  1517. // Don't reflow lines having different indentation.
  1518. EXPECT_EQ("// long long long\n"
  1519. "// long\n"
  1520. "// long",
  1521. format("// long long long long\n"
  1522. "// long",
  1523. getLLVMStyleWithColumns(20)));
  1524. // Don't break or reflow after implicit string literals.
  1525. verifyFormat("#include <t> // l l l\n"
  1526. " // l",
  1527. getLLVMStyleWithColumns(20));
  1528. // Don't break or reflow comments on import lines.
  1529. EXPECT_EQ("#include \"t\" /* l l l\n"
  1530. " * l */",
  1531. format("#include \"t\" /* l l l\n"
  1532. " * l */",
  1533. getLLVMStyleWithColumns(20)));
  1534. // Don't reflow between different trailing comment sections.
  1535. EXPECT_EQ("int i; // long long\n"
  1536. " // long\n"
  1537. "int j; // long long\n"
  1538. " // long\n",
  1539. format("int i; // long long long\n"
  1540. "int j; // long long long\n",
  1541. getLLVMStyleWithColumns(20)));
  1542. // Don't reflow if the first word on the next line is longer than the
  1543. // available space at current line.
  1544. EXPECT_EQ("int i; // trigger\n"
  1545. " // reflow\n"
  1546. " // longsec\n",
  1547. format("int i; // trigger reflow\n"
  1548. " // longsec\n",
  1549. getLLVMStyleWithColumns(20)));
  1550. // Keep empty comment lines.
  1551. EXPECT_EQ("/**/", format(" /**/", getLLVMStyleWithColumns(20)));
  1552. EXPECT_EQ("/* */", format(" /* */", getLLVMStyleWithColumns(20)));
  1553. EXPECT_EQ("/* */", format(" /* */", getLLVMStyleWithColumns(20)));
  1554. EXPECT_EQ("//", format(" // ", getLLVMStyleWithColumns(20)));
  1555. EXPECT_EQ("///", format(" /// ", getLLVMStyleWithColumns(20)));
  1556. }
  1557. TEST_F(FormatTestComments, IgnoresIf0Contents) {
  1558. EXPECT_EQ("#if 0\n"
  1559. "}{)(&*(^%%#%@! fsadj f;ldjs ,:;| <<<>>>][)(][\n"
  1560. "#endif\n"
  1561. "void f() {}",
  1562. format("#if 0\n"
  1563. "}{)(&*(^%%#%@! fsadj f;ldjs ,:;| <<<>>>][)(][\n"
  1564. "#endif\n"
  1565. "void f( ) { }"));
  1566. EXPECT_EQ("#if false\n"
  1567. "void f( ) { }\n"
  1568. "#endif\n"
  1569. "void g() {}\n",
  1570. format("#if false\n"
  1571. "void f( ) { }\n"
  1572. "#endif\n"
  1573. "void g( ) { }\n"));
  1574. EXPECT_EQ("enum E {\n"
  1575. " One,\n"
  1576. " Two,\n"
  1577. "#if 0\n"
  1578. "Three,\n"
  1579. " Four,\n"
  1580. "#endif\n"
  1581. " Five\n"
  1582. "};",
  1583. format("enum E {\n"
  1584. " One,Two,\n"
  1585. "#if 0\n"
  1586. "Three,\n"
  1587. " Four,\n"
  1588. "#endif\n"
  1589. " Five};"));
  1590. EXPECT_EQ("enum F {\n"
  1591. " One,\n"
  1592. "#if 1\n"
  1593. " Two,\n"
  1594. "#if 0\n"
  1595. "Three,\n"
  1596. " Four,\n"
  1597. "#endif\n"
  1598. " Five\n"
  1599. "#endif\n"
  1600. "};",
  1601. format("enum F {\n"
  1602. "One,\n"
  1603. "#if 1\n"
  1604. "Two,\n"
  1605. "#if 0\n"
  1606. "Three,\n"
  1607. " Four,\n"
  1608. "#endif\n"
  1609. "Five\n"
  1610. "#endif\n"
  1611. "};"));
  1612. EXPECT_EQ("enum G {\n"
  1613. " One,\n"
  1614. "#if 0\n"
  1615. "Two,\n"
  1616. "#else\n"
  1617. " Three,\n"
  1618. "#endif\n"
  1619. " Four\n"
  1620. "};",
  1621. format("enum G {\n"
  1622. "One,\n"
  1623. "#if 0\n"
  1624. "Two,\n"
  1625. "#else\n"
  1626. "Three,\n"
  1627. "#endif\n"
  1628. "Four\n"
  1629. "};"));
  1630. EXPECT_EQ("enum H {\n"
  1631. " One,\n"
  1632. "#if 0\n"
  1633. "#ifdef Q\n"
  1634. "Two,\n"
  1635. "#else\n"
  1636. "Three,\n"
  1637. "#endif\n"
  1638. "#endif\n"
  1639. " Four\n"
  1640. "};",
  1641. format("enum H {\n"
  1642. "One,\n"
  1643. "#if 0\n"
  1644. "#ifdef Q\n"
  1645. "Two,\n"
  1646. "#else\n"
  1647. "Three,\n"
  1648. "#endif\n"
  1649. "#endif\n"
  1650. "Four\n"
  1651. "};"));
  1652. EXPECT_EQ("enum I {\n"
  1653. " One,\n"
  1654. "#if /* test */ 0 || 1\n"
  1655. "Two,\n"
  1656. "Three,\n"
  1657. "#endif\n"
  1658. " Four\n"
  1659. "};",
  1660. format("enum I {\n"
  1661. "One,\n"
  1662. "#if /* test */ 0 || 1\n"
  1663. "Two,\n"
  1664. "Three,\n"
  1665. "#endif\n"
  1666. "Four\n"
  1667. "};"));
  1668. EXPECT_EQ("enum J {\n"
  1669. " One,\n"
  1670. "#if 0\n"
  1671. "#if 0\n"
  1672. "Two,\n"
  1673. "#else\n"
  1674. "Three,\n"
  1675. "#endif\n"
  1676. "Four,\n"
  1677. "#endif\n"
  1678. " Five\n"
  1679. "};",
  1680. format("enum J {\n"
  1681. "One,\n"
  1682. "#if 0\n"
  1683. "#if 0\n"
  1684. "Two,\n"
  1685. "#else\n"
  1686. "Three,\n"
  1687. "#endif\n"
  1688. "Four,\n"
  1689. "#endif\n"
  1690. "Five\n"
  1691. "};"));
  1692. }
  1693. TEST_F(FormatTestComments, DontCrashOnBlockComments) {
  1694. EXPECT_EQ(
  1695. "int xxxxxxxxx; /* "
  1696. "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\n"
  1697. "zzzzzz\n"
  1698. "0*/",
  1699. format("int xxxxxxxxx; /* "
  1700. "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy zzzzzz\n"
  1701. "0*/"));
  1702. }
  1703. TEST_F(FormatTestComments, BlockCommentsInControlLoops) {
  1704. verifyFormat("if (0) /* a comment in a strange place */ {\n"
  1705. " f();\n"
  1706. "}");
  1707. verifyFormat("if (0) /* a comment in a strange place */ {\n"
  1708. " f();\n"
  1709. "} /* another comment */ else /* comment #3 */ {\n"
  1710. " g();\n"
  1711. "}");
  1712. verifyFormat("while (0) /* a comment in a strange place */ {\n"
  1713. " f();\n"
  1714. "}");
  1715. verifyFormat("for (;;) /* a comment in a strange place */ {\n"
  1716. " f();\n"
  1717. "}");
  1718. verifyFormat("do /* a comment in a strange place */ {\n"
  1719. " f();\n"
  1720. "} /* another comment */ while (0);");
  1721. }
  1722. TEST_F(FormatTestComments, BlockComments) {
  1723. EXPECT_EQ("/* */ /* */ /* */\n/* */ /* */ /* */",
  1724. format("/* *//* */ /* */\n/* *//* */ /* */"));
  1725. EXPECT_EQ("/* */ a /* */ b;", format(" /* */ a/* */ b;"));
  1726. EXPECT_EQ("#define A /*123*/ \\\n"
  1727. " b\n"
  1728. "/* */\n"
  1729. "someCall(\n"
  1730. " parameter);",
  1731. format("#define A /*123*/ b\n"
  1732. "/* */\n"
  1733. "someCall(parameter);",
  1734. getLLVMStyleWithColumns(15)));
  1735. EXPECT_EQ("#define A\n"
  1736. "/* */ someCall(\n"
  1737. " parameter);",
  1738. format("#define A\n"
  1739. "/* */someCall(parameter);",
  1740. getLLVMStyleWithColumns(15)));
  1741. EXPECT_EQ("/*\n**\n*/", format("/*\n**\n*/"));
  1742. EXPECT_EQ("/*\n"
  1743. " *\n"
  1744. " * aaaaaa\n"
  1745. " * aaaaaa\n"
  1746. " */",
  1747. format("/*\n"
  1748. "*\n"
  1749. " * aaaaaa aaaaaa\n"
  1750. "*/",
  1751. getLLVMStyleWithColumns(10)));
  1752. EXPECT_EQ("/*\n"
  1753. "**\n"
  1754. "* aaaaaa\n"
  1755. "*aaaaaa\n"
  1756. "*/",
  1757. format("/*\n"
  1758. "**\n"
  1759. "* aaaaaa aaaaaa\n"
  1760. "*/",
  1761. getLLVMStyleWithColumns(10)));
  1762. EXPECT_EQ("int aaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
  1763. " /* line 1\n"
  1764. " bbbbbbbbbbbb */\n"
  1765. " bbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
  1766. format("int aaaaaaaaaaaaaaaaaaaaaaaaaaaa =\n"
  1767. " /* line 1\n"
  1768. " bbbbbbbbbbbb */ bbbbbbbbbbbbbbbbbbbbbbbbbbbb;",
  1769. getLLVMStyleWithColumns(50)));
  1770. FormatStyle NoBinPacking = getLLVMStyle();
  1771. NoBinPacking.BinPackParameters = false;
  1772. EXPECT_EQ("someFunction(1, /* comment 1 */\n"
  1773. " 2, /* comment 2 */\n"
  1774. " 3, /* comment 3 */\n"
  1775. " aaaa,\n"
  1776. " bbbb);",
  1777. format("someFunction (1, /* comment 1 */\n"
  1778. " 2, /* comment 2 */ \n"
  1779. " 3, /* comment 3 */\n"
  1780. "aaaa, bbbb );",
  1781. NoBinPacking));
  1782. verifyFormat(
  1783. "bool aaaaaaaaaaaaa = /* comment: */ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
  1784. " aaaaaaaaaaaaaaaaaaaaaaaaaaaa;");
  1785. EXPECT_EQ(
  1786. "bool aaaaaaaaaaaaa = /* trailing comment */\n"
  1787. " aaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
  1788. " aaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaa;",
  1789. format(
  1790. "bool aaaaaaaaaaaaa = /* trailing comment */\n"
  1791. " aaaaaaaaaaaaaaaaaaaaaaaaaaa||aaaaaaaaaaaaaaaaaaaaaaaaa ||\n"
  1792. " aaaaaaaaaaaaaaaaaaaaaaaaaaaa || aaaaaaaaaaaaaaaaaaaaaaaaaa;"));
  1793. EXPECT_EQ(
  1794. "int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; /* comment */\n"
  1795. "int bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; /* comment */\n"
  1796. "int cccccccccccccccccccccccccccccc; /* comment */\n",
  1797. format("int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; /* comment */\n"
  1798. "int bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb; /* comment */\n"
  1799. "int cccccccccccccccccccccccccccccc; /* comment */\n"));
  1800. verifyFormat("void f(int * /* unused */) {}");
  1801. EXPECT_EQ("/*\n"
  1802. " **\n"
  1803. " */",
  1804. format("/*\n"
  1805. " **\n"
  1806. " */"));
  1807. EXPECT_EQ("/*\n"
  1808. " *q\n"
  1809. " */",
  1810. format("/*\n"
  1811. " *q\n"
  1812. " */"));
  1813. EXPECT_EQ("/*\n"
  1814. " * q\n"
  1815. " */",
  1816. format("/*\n"
  1817. " * q\n"
  1818. " */"));
  1819. EXPECT_EQ("/*\n"
  1820. " **/",
  1821. format("/*\n"
  1822. " **/"));
  1823. EXPECT_EQ("/*\n"
  1824. " ***/",
  1825. format("/*\n"
  1826. " ***/"));
  1827. }
  1828. TEST_F(FormatTestComments, BlockCommentsInMacros) {
  1829. EXPECT_EQ("#define A \\\n"
  1830. " { \\\n"
  1831. " /* one line */ \\\n"
  1832. " someCall();",
  1833. format("#define A { \\\n"
  1834. " /* one line */ \\\n"
  1835. " someCall();",
  1836. getLLVMStyleWithColumns(20)));
  1837. EXPECT_EQ("#define A \\\n"
  1838. " { \\\n"
  1839. " /* previous */ \\\n"
  1840. " /* one line */ \\\n"
  1841. " someCall();",
  1842. format("#define A { \\\n"
  1843. " /* previous */ \\\n"
  1844. " /* one line */ \\\n"
  1845. " someCall();",
  1846. getLLVMStyleWithColumns(20)));
  1847. }
  1848. TEST_F(FormatTestComments, BlockCommentsAtEndOfLine) {
  1849. EXPECT_EQ("a = {\n"
  1850. " 1111 /* */\n"
  1851. "};",
  1852. format("a = {1111 /* */\n"
  1853. "};",
  1854. getLLVMStyleWithColumns(15)));
  1855. EXPECT_EQ("a = {\n"
  1856. " 1111 /* */\n"
  1857. "};",
  1858. format("a = {1111 /* */\n"
  1859. "};",
  1860. getLLVMStyleWithColumns(15)));
  1861. EXPECT_EQ("a = {\n"
  1862. " 1111 /* a\n"
  1863. " */\n"
  1864. "};",
  1865. format("a = {1111 /* a */\n"
  1866. "};",
  1867. getLLVMStyleWithColumns(15)));
  1868. }
  1869. TEST_F(FormatTestComments, IndentLineCommentsInStartOfBlockAtEndOfFile) {
  1870. verifyFormat("{\n"
  1871. " // a\n"
  1872. " // b");
  1873. }
  1874. TEST_F(FormatTestComments, AlignTrailingComments) {
  1875. EXPECT_EQ("#define MACRO(V) \\\n"
  1876. " V(Rt2) /* one more char */ \\\n"
  1877. " V(Rs) /* than here */ \\\n"
  1878. "/* comment 3 */\n",
  1879. format("#define MACRO(V)\\\n"
  1880. "V(Rt2) /* one more char */ \\\n"
  1881. "V(Rs) /* than here */ \\\n"
  1882. "/* comment 3 */ \\\n",
  1883. getLLVMStyleWithColumns(40)));
  1884. EXPECT_EQ("int i = f(abc, // line 1\n"
  1885. " d, // line 2\n"
  1886. " // line 3\n"
  1887. " b);",
  1888. format("int i = f(abc, // line 1\n"
  1889. " d, // line 2\n"
  1890. " // line 3\n"
  1891. " b);",
  1892. getLLVMStyleWithColumns(40)));
  1893. // Align newly broken trailing comments.
  1894. EXPECT_EQ("int ab; // line\n"
  1895. "int a; // long\n"
  1896. " // long\n",
  1897. format("int ab; // line\n"
  1898. "int a; // long long\n",
  1899. getLLVMStyleWithColumns(15)));
  1900. EXPECT_EQ("int ab; // line\n"
  1901. "int a; // long\n"
  1902. " // long\n"
  1903. " // long",
  1904. format("int ab; // line\n"
  1905. "int a; // long long\n"
  1906. " // long",
  1907. getLLVMStyleWithColumns(15)));
  1908. EXPECT_EQ("int ab; // line\n"
  1909. "int a; // long\n"
  1910. " // long\n"
  1911. "pt c; // long",
  1912. format("int ab; // line\n"
  1913. "int a; // long long\n"
  1914. "pt c; // long",
  1915. getLLVMStyleWithColumns(15)));
  1916. EXPECT_EQ("int ab; // line\n"
  1917. "int a; // long\n"
  1918. " // long\n"
  1919. "\n"
  1920. "// long",
  1921. format("int ab; // line\n"
  1922. "int a; // long long\n"
  1923. "\n"
  1924. "// long",
  1925. getLLVMStyleWithColumns(15)));
  1926. // Align comment line sections aligned with the next token with the next
  1927. // token.
  1928. EXPECT_EQ("class A {\n"
  1929. "public: // public comment\n"
  1930. " // comment about a\n"
  1931. " int a;\n"
  1932. "};",
  1933. format("class A {\n"
  1934. "public: // public comment\n"
  1935. " // comment about a\n"
  1936. " int a;\n"
  1937. "};",
  1938. getLLVMStyleWithColumns(40)));
  1939. EXPECT_EQ("class A {\n"
  1940. "public: // public comment 1\n"
  1941. " // public comment 2\n"
  1942. " // comment 1 about a\n"
  1943. " // comment 2 about a\n"
  1944. " int a;\n"
  1945. "};",
  1946. format("class A {\n"
  1947. "public: // public comment 1\n"
  1948. " // public comment 2\n"
  1949. " // comment 1 about a\n"
  1950. " // comment 2 about a\n"
  1951. " int a;\n"
  1952. "};",
  1953. getLLVMStyleWithColumns(40)));
  1954. EXPECT_EQ("int f(int n) { // comment line 1 on f\n"
  1955. " // comment line 2 on f\n"
  1956. " // comment line 1 before return\n"
  1957. " // comment line 2 before return\n"
  1958. " return n; // comment line 1 on return\n"
  1959. " // comment line 2 on return\n"
  1960. " // comment line 1 after return\n"
  1961. "}",
  1962. format("int f(int n) { // comment line 1 on f\n"
  1963. " // comment line 2 on f\n"
  1964. " // comment line 1 before return\n"
  1965. " // comment line 2 before return\n"
  1966. " return n; // comment line 1 on return\n"
  1967. " // comment line 2 on return\n"
  1968. " // comment line 1 after return\n"
  1969. "}",
  1970. getLLVMStyleWithColumns(40)));
  1971. EXPECT_EQ("int f(int n) {\n"
  1972. " switch (n) { // comment line 1 on switch\n"
  1973. " // comment line 2 on switch\n"
  1974. " // comment line 1 before case 1\n"
  1975. " // comment line 2 before case 1\n"
  1976. " case 1: // comment line 1 on case 1\n"
  1977. " // comment line 2 on case 1\n"
  1978. " // comment line 1 before return 1\n"
  1979. " // comment line 2 before return 1\n"
  1980. " return 1; // comment line 1 on return 1\n"
  1981. " // comment line 2 on return 1\n"
  1982. " // comment line 1 before default\n"
  1983. " // comment line 2 before default\n"
  1984. " default: // comment line 1 on default\n"
  1985. " // comment line 2 on default\n"
  1986. " // comment line 1 before return 2\n"
  1987. " return 2 * f(n - 1); // comment line 1 on return 2\n"
  1988. " // comment line 2 on return 2\n"
  1989. " // comment line 1 after return\n"
  1990. " // comment line 2 after return\n"
  1991. " }\n"
  1992. "}",
  1993. format("int f(int n) {\n"
  1994. " switch (n) { // comment line 1 on switch\n"
  1995. " // comment line 2 on switch\n"
  1996. " // comment line 1 before case 1\n"
  1997. " // comment line 2 before case 1\n"
  1998. " case 1: // comment line 1 on case 1\n"
  1999. " // comment line 2 on case 1\n"
  2000. " // comment line 1 before return 1\n"
  2001. " // comment line 2 before return 1\n"
  2002. " return 1; // comment line 1 on return 1\n"
  2003. " // comment line 2 on return 1\n"
  2004. " // comment line 1 before default\n"
  2005. " // comment line 2 before default\n"
  2006. " default: // comment line 1 on default\n"
  2007. " // comment line 2 on default\n"
  2008. " // comment line 1 before return 2\n"
  2009. " return 2 * f(n - 1); // comment line 1 on return 2\n"
  2010. " // comment line 2 on return 2\n"
  2011. " // comment line 1 after return\n"
  2012. " // comment line 2 after return\n"
  2013. " }\n"
  2014. "}",
  2015. getLLVMStyleWithColumns(80)));
  2016. // If all the lines in a sequence of line comments are aligned with the next
  2017. // token, the first line belongs to the previous token and the other lines
  2018. // belong to the next token.
  2019. EXPECT_EQ("int a; // line about a\n"
  2020. "long b;",
  2021. format("int a; // line about a\n"
  2022. " long b;",
  2023. getLLVMStyleWithColumns(80)));
  2024. EXPECT_EQ("int a; // line about a\n"
  2025. "// line about b\n"
  2026. "long b;",
  2027. format("int a; // line about a\n"
  2028. " // line about b\n"
  2029. " long b;",
  2030. getLLVMStyleWithColumns(80)));
  2031. EXPECT_EQ("int a; // line about a\n"
  2032. "// line 1 about b\n"
  2033. "// line 2 about b\n"
  2034. "long b;",
  2035. format("int a; // line about a\n"
  2036. " // line 1 about b\n"
  2037. " // line 2 about b\n"
  2038. " long b;",
  2039. getLLVMStyleWithColumns(80)));
  2040. }
  2041. TEST_F(FormatTestComments, AlignsBlockCommentDecorations) {
  2042. EXPECT_EQ("/*\n"
  2043. " */",
  2044. format("/*\n"
  2045. "*/", getLLVMStyle()));
  2046. EXPECT_EQ("/*\n"
  2047. " */",
  2048. format("/*\n"
  2049. " */", getLLVMStyle()));
  2050. EXPECT_EQ("/*\n"
  2051. " */",
  2052. format("/*\n"
  2053. " */", getLLVMStyle()));
  2054. // Align a single line.
  2055. EXPECT_EQ("/*\n"
  2056. " * line */",
  2057. format("/*\n"
  2058. "* line */",
  2059. getLLVMStyle()));
  2060. EXPECT_EQ("/*\n"
  2061. " * line */",
  2062. format("/*\n"
  2063. " * line */",
  2064. getLLVMStyle()));
  2065. EXPECT_EQ("/*\n"
  2066. " * line */",
  2067. format("/*\n"
  2068. " * line */",
  2069. getLLVMStyle()));
  2070. EXPECT_EQ("/*\n"
  2071. " * line */",
  2072. format("/*\n"
  2073. " * line */",
  2074. getLLVMStyle()));
  2075. EXPECT_EQ("/**\n"
  2076. " * line */",
  2077. format("/**\n"
  2078. "* line */",
  2079. getLLVMStyle()));
  2080. EXPECT_EQ("/**\n"
  2081. " * line */",
  2082. format("/**\n"
  2083. " * line */",
  2084. getLLVMStyle()));
  2085. EXPECT_EQ("/**\n"
  2086. " * line */",
  2087. format("/**\n"
  2088. " * line */",
  2089. getLLVMStyle()));
  2090. EXPECT_EQ("/**\n"
  2091. " * line */",
  2092. format("/**\n"
  2093. " * line */",
  2094. getLLVMStyle()));
  2095. EXPECT_EQ("/**\n"
  2096. " * line */",
  2097. format("/**\n"
  2098. " * line */",
  2099. getLLVMStyle()));
  2100. // Align the end '*/' after a line.
  2101. EXPECT_EQ("/*\n"
  2102. " * line\n"
  2103. " */",
  2104. format("/*\n"
  2105. "* line\n"
  2106. "*/", getLLVMStyle()));
  2107. EXPECT_EQ("/*\n"
  2108. " * line\n"
  2109. " */",
  2110. format("/*\n"
  2111. " * line\n"
  2112. " */", getLLVMStyle()));
  2113. EXPECT_EQ("/*\n"
  2114. " * line\n"
  2115. " */",
  2116. format("/*\n"
  2117. " * line\n"
  2118. " */", getLLVMStyle()));
  2119. // Align two lines.
  2120. EXPECT_EQ("/* line 1\n"
  2121. " * line 2 */",
  2122. format("/* line 1\n"
  2123. " * line 2 */",
  2124. getLLVMStyle()));
  2125. EXPECT_EQ("/* line 1\n"
  2126. " * line 2 */",
  2127. format("/* line 1\n"
  2128. "* line 2 */",
  2129. getLLVMStyle()));
  2130. EXPECT_EQ("/* line 1\n"
  2131. " * line 2 */",
  2132. format("/* line 1\n"
  2133. " * line 2 */",
  2134. getLLVMStyle()));
  2135. EXPECT_EQ("/* line 1\n"
  2136. " * line 2 */",
  2137. format("/* line 1\n"
  2138. " * line 2 */",
  2139. getLLVMStyle()));
  2140. EXPECT_EQ("/* line 1\n"
  2141. " * line 2 */",
  2142. format("/* line 1\n"
  2143. " * line 2 */",
  2144. getLLVMStyle()));
  2145. EXPECT_EQ("int i; /* line 1\n"
  2146. " * line 2 */",
  2147. format("int i; /* line 1\n"
  2148. "* line 2 */",
  2149. getLLVMStyle()));
  2150. EXPECT_EQ("int i; /* line 1\n"
  2151. " * line 2 */",
  2152. format("int i; /* line 1\n"
  2153. " * line 2 */",
  2154. getLLVMStyle()));
  2155. EXPECT_EQ("int i; /* line 1\n"
  2156. " * line 2 */",
  2157. format("int i; /* line 1\n"
  2158. " * line 2 */",
  2159. getLLVMStyle()));
  2160. // Align several lines.
  2161. EXPECT_EQ("/* line 1\n"
  2162. " * line 2\n"
  2163. " * line 3 */",
  2164. format("/* line 1\n"
  2165. " * line 2\n"
  2166. "* line 3 */",
  2167. getLLVMStyle()));
  2168. EXPECT_EQ("/* line 1\n"
  2169. " * line 2\n"
  2170. " * line 3 */",
  2171. format("/* line 1\n"
  2172. " * line 2\n"
  2173. "* line 3 */",
  2174. getLLVMStyle()));
  2175. EXPECT_EQ("/*\n"
  2176. "** line 1\n"
  2177. "** line 2\n"
  2178. "*/",
  2179. format("/*\n"
  2180. "** line 1\n"
  2181. " ** line 2\n"
  2182. "*/",
  2183. getLLVMStyle()));
  2184. // Align with different indent after the decorations.
  2185. EXPECT_EQ("/*\n"
  2186. " * line 1\n"
  2187. " * line 2\n"
  2188. " * line 3\n"
  2189. " * line 4\n"
  2190. " */",
  2191. format("/*\n"
  2192. "* line 1\n"
  2193. " * line 2\n"
  2194. " * line 3\n"
  2195. "* line 4\n"
  2196. "*/", getLLVMStyle()));
  2197. // Align empty or blank lines.
  2198. EXPECT_EQ("/**\n"
  2199. " *\n"
  2200. " *\n"
  2201. " *\n"
  2202. " */",
  2203. format("/**\n"
  2204. "* \n"
  2205. " * \n"
  2206. " *\n"
  2207. "*/", getLLVMStyle()));
  2208. // Align while breaking and reflowing.
  2209. EXPECT_EQ("/*\n"
  2210. " * long long long\n"
  2211. " * long long\n"
  2212. " *\n"
  2213. " * long */",
  2214. format("/*\n"
  2215. " * long long long long\n"
  2216. " * long\n"
  2217. " *\n"
  2218. "* long */",
  2219. getLLVMStyleWithColumns(20)));
  2220. }
  2221. } // end namespace
  2222. } // end namespace format
  2223. } // end namespace clang