blob: ad77c747a592a358dbe34e11a588f0ccdc22d76b [file] [log] [blame]
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +00001//===- NamespaceEndCommentsFixerTest.cpp - Formatting unit tests ----------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "clang/Format/Format.h"
10
11#include "clang/Frontend/TextDiagnosticPrinter.h"
12#include "llvm/Support/Debug.h"
13#include "gtest/gtest.h"
14
15#define DEBUG_TYPE "namespace-end-comments-fixer-test"
16
17namespace clang {
18namespace format {
19namespace {
20
21class NamespaceEndCommentsFixerTest : public ::testing::Test {
22protected:
23 std::string
24 fixNamespaceEndComments(llvm::StringRef Code,
Krasimir Georgiev850f6892017-04-21 14:30:01 +000025 const std::vector<tooling::Range> &Ranges,
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000026 const FormatStyle &Style = getLLVMStyle()) {
Nicola Zaghen3538b392018-05-15 13:30:56 +000027 LLVM_DEBUG(llvm::errs() << "---\n");
28 LLVM_DEBUG(llvm::errs() << Code << "\n\n");
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000029 tooling::Replacements Replaces =
30 clang::format::fixNamespaceEndComments(Style, Code, Ranges, "<stdin>");
31 auto Result = applyAllReplacements(Code, Replaces);
32 EXPECT_TRUE(static_cast<bool>(Result));
Nicola Zaghen3538b392018-05-15 13:30:56 +000033 LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n");
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000034 return *Result;
35 }
36
37 std::string
38 fixNamespaceEndComments(llvm::StringRef Code,
39 const FormatStyle &Style = getLLVMStyle()) {
40 return fixNamespaceEndComments(
41 Code,
42 /*Ranges=*/{1, tooling::Range(0, Code.size())}, Style);
43 }
44};
45
46TEST_F(NamespaceEndCommentsFixerTest, AddsEndComment) {
47 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000048 "int i;\n"
49 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000050 "}// namespace",
51 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000052 "int i;\n"
53 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000054 "}"));
Francois Ferrande8a301f2019-06-06 20:06:23 +000055
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000056 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000057 "int i;\n"
58 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000059 "}// namespace\n",
60 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000061 "int i;\n"
62 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000063 "}\n"));
64 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000065 "int i;\n"
66 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000067 "}// namespace A",
68 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000069 "int i;\n"
70 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000071 "}"));
72 EXPECT_EQ("inline namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000073 "int i;\n"
74 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000075 "}// namespace A",
76 fixNamespaceEndComments("inline namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +000077 "int i;\n"
78 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +000079 "}"));
Nico Weber37944132019-07-23 17:49:45 +000080
81 EXPECT_EQ("namespace [[deprecated(\"foo\")]] A::B {\n"
82 "int i;\n"
83 "int j;\n"
84 "}// namespace A::B",
85 fixNamespaceEndComments("namespace [[deprecated(\"foo\")]] A::B {\n"
86 "int i;\n"
87 "int j;\n"
88 "}"));
89
90 EXPECT_EQ("namespace [[deprecated(\"foo\")]] A::inline B::inline C {\n"
91 "int i;\n"
92 "int j;\n"
93 "}// namespace A::inline B::inline C",
94 fixNamespaceEndComments(
95 "namespace [[deprecated(\"foo\")]] A::inline B::inline C {\n"
96 "int i;\n"
97 "int j;\n"
98 "}"));
99
100 EXPECT_EQ("namespace DEPRECATED A::B {\n"
101 "int i;\n"
102 "int j;\n"
103 "}// namespace A::B",
104 fixNamespaceEndComments("namespace DEPRECATED A::B {\n"
105 "int i;\n"
106 "int j;\n"
107 "}"));
108
109 EXPECT_EQ("inline namespace [[deprecated]] A {\n"
110 "int i;\n"
111 "int j;\n"
112 "}// namespace A",
113 fixNamespaceEndComments("inline namespace [[deprecated]] A {\n"
114 "int i;\n"
115 "int j;\n"
116 "}"));
117
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000118 EXPECT_EQ("namespace ::A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000119 "int i;\n"
120 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000121 "}// namespace ::A",
122 fixNamespaceEndComments("namespace ::A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000123 "int i;\n"
124 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000125 "}"));
126 EXPECT_EQ("namespace ::A::B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000127 "int i;\n"
128 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000129 "}// namespace ::A::B",
130 fixNamespaceEndComments("namespace ::A::B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000131 "int i;\n"
132 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000133 "}"));
134 EXPECT_EQ("namespace /**/::/**/A/**/::/**/B/**/ {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000135 "int i;\n"
136 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000137 "}// namespace ::A::B",
138 fixNamespaceEndComments("namespace /**/::/**/A/**/::/**/B/**/ {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000139 "int i;\n"
140 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000141 "}"));
142 EXPECT_EQ("namespace A {\n"
143 "namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000144 "int i;\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000145 "}\n"
146 "}// namespace A",
147 fixNamespaceEndComments("namespace A {\n"
148 "namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000149 "int i;\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000150 "}\n"
151 "}"));
152 EXPECT_EQ("namespace A {\n"
153 "namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000154 "int i;\n"
155 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000156 "}// namespace B\n"
157 "}// namespace A",
158 fixNamespaceEndComments("namespace A {\n"
159 "namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000160 "int i;\n"
161 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000162 "}\n"
163 "}"));
164 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000165 "int a;\n"
166 "int b;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000167 "}// namespace A\n"
168 "namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000169 "int b;\n"
170 "int a;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000171 "}// namespace B",
172 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000173 "int a;\n"
174 "int b;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000175 "}\n"
176 "namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000177 "int b;\n"
178 "int a;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000179 "}"));
180 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000181 "int a1;\n"
182 "int a2;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000183 "}// namespace A\n"
184 "namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000185 "int a2;\n"
186 "int a1;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000187 "}// namespace A",
188 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000189 "int a1;\n"
190 "int a2;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000191 "}\n"
192 "namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000193 "int a2;\n"
194 "int a1;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000195 "}"));
196 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000197 "int a;\n"
198 "int b;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000199 "}// namespace A\n"
200 "// comment about b\n"
201 "int b;",
202 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000203 "int a;\n"
204 "int b;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000205 "}\n"
206 "// comment about b\n"
207 "int b;"));
208
209 EXPECT_EQ("namespace A {\n"
210 "namespace B {\n"
211 "namespace C {\n"
212 "namespace D {\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000213 "}\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000214 "}// namespace C\n"
215 "}// namespace B\n"
216 "}// namespace A",
217 fixNamespaceEndComments("namespace A {\n"
218 "namespace B {\n"
219 "namespace C {\n"
220 "namespace D {\n"
221 "}\n"
222 "}\n"
223 "}\n"
224 "}"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000225
Francois Ferrande56a8292017-06-14 12:29:47 +0000226 // Add comment for namespaces which will be 'compacted'
227 FormatStyle CompactNamespacesStyle = getLLVMStyle();
228 CompactNamespacesStyle.CompactNamespaces = true;
229 EXPECT_EQ("namespace out { namespace in {\n"
230 "int i;\n"
231 "int j;\n"
232 "}}// namespace out::in",
233 fixNamespaceEndComments("namespace out { namespace in {\n"
234 "int i;\n"
235 "int j;\n"
236 "}}",
237 CompactNamespacesStyle));
238 EXPECT_EQ("namespace out {\n"
239 "namespace in {\n"
240 "int i;\n"
241 "int j;\n"
242 "}\n"
243 "}// namespace out::in",
244 fixNamespaceEndComments("namespace out {\n"
245 "namespace in {\n"
246 "int i;\n"
247 "int j;\n"
248 "}\n"
249 "}",
250 CompactNamespacesStyle));
251 EXPECT_EQ("namespace out { namespace in {\n"
252 "int i;\n"
253 "int j;\n"
254 "};}// namespace out::in",
255 fixNamespaceEndComments("namespace out { namespace in {\n"
256 "int i;\n"
257 "int j;\n"
258 "};}",
259 CompactNamespacesStyle));
260
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000261 // Adds an end comment after a semicolon.
262 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000263 "int i;\n"
264 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000265 "};// namespace",
266 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000267 "int i;\n"
268 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000269 "};"));
270 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000271 "int i;\n"
272 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000273 "};// namespace A",
274 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000275 "int i;\n"
276 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000277 "};"));
278 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000279 "int i;\n"
280 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000281 "};// namespace A\n"
282 "// unrelated",
283 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000284 "int i;\n"
285 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000286 "};\n"
287 "// unrelated"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000288}
289
Francois Ferrande8a301f2019-06-06 20:06:23 +0000290TEST_F(NamespaceEndCommentsFixerTest, AddsMacroEndComment) {
291 FormatStyle Style = getLLVMStyle();
292 Style.NamespaceMacros.push_back("TESTSUITE");
293
294 EXPECT_EQ("TESTSUITE() {\n"
295 "int i;\n"
296 "int j;\n"
297 "}// TESTSUITE()",
298 fixNamespaceEndComments("TESTSUITE() {\n"
299 "int i;\n"
300 "int j;\n"
301 "}",
302 Style));
303
304 EXPECT_EQ("TESTSUITE(A) {\n"
305 "int i;\n"
306 "int j;\n"
307 "}// TESTSUITE(A)",
308 fixNamespaceEndComments("TESTSUITE(A) {\n"
309 "int i;\n"
310 "int j;\n"
311 "}",
312 Style));
313 EXPECT_EQ("inline TESTSUITE(A) {\n"
314 "int i;\n"
315 "int j;\n"
316 "}// TESTSUITE(A)",
317 fixNamespaceEndComments("inline TESTSUITE(A) {\n"
318 "int i;\n"
319 "int j;\n"
320 "}",
321 Style));
322 EXPECT_EQ("TESTSUITE(::A) {\n"
323 "int i;\n"
324 "int j;\n"
325 "}// TESTSUITE(::A)",
326 fixNamespaceEndComments("TESTSUITE(::A) {\n"
327 "int i;\n"
328 "int j;\n"
329 "}",
330 Style));
331 EXPECT_EQ("TESTSUITE(::A::B) {\n"
332 "int i;\n"
333 "int j;\n"
334 "}// TESTSUITE(::A::B)",
335 fixNamespaceEndComments("TESTSUITE(::A::B) {\n"
336 "int i;\n"
337 "int j;\n"
338 "}",
339 Style));
340 EXPECT_EQ("TESTSUITE(/**/::/**/A/**/::/**/B/**/) {\n"
341 "int i;\n"
342 "int j;\n"
343 "}// TESTSUITE(::A::B)",
344 fixNamespaceEndComments("TESTSUITE(/**/::/**/A/**/::/**/B/**/) {\n"
345 "int i;\n"
346 "int j;\n"
347 "}",
348 Style));
349 EXPECT_EQ("TESTSUITE(A, B) {\n"
350 "int i;\n"
351 "int j;\n"
352 "}// TESTSUITE(A)",
353 fixNamespaceEndComments("TESTSUITE(A, B) {\n"
354 "int i;\n"
355 "int j;\n"
356 "}",
357 Style));
358 EXPECT_EQ("TESTSUITE(\"Test1\") {\n"
359 "int i;\n"
360 "int j;\n"
361 "}// TESTSUITE(\"Test1\")",
362 fixNamespaceEndComments("TESTSUITE(\"Test1\") {\n"
363 "int i;\n"
364 "int j;\n"
365 "}",
366 Style));
367}
368
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000369TEST_F(NamespaceEndCommentsFixerTest, AddsNewlineIfNeeded) {
370 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000371 "int i;\n"
372 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000373 "}// namespace A\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000374 " int k;",
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000375 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000376 "int i;\n"
377 "int j;\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000378 "} int k;"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000379 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000380 "int i;\n"
381 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000382 "}// namespace\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000383 " int k;",
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000384 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000385 "int i;\n"
386 "int j;\n"
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000387 "} int k;"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000388 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000389 "int i;\n"
390 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000391 "}// namespace A\n"
392 " namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000393 "int j;\n"
394 "int k;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000395 "}// namespace B",
396 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000397 "int i;\n"
398 "int j;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000399 "} namespace B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000400 "int j;\n"
401 "int k;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000402 "}"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000403 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000404 "int i;\n"
405 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000406 "};// namespace\n"
407 "int k;",
408 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000409 "int i;\n"
410 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000411 "};int k;"));
412 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000413 "int i;\n"
414 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000415 "};// namespace\n"
416 ";",
417 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000418 "int i;\n"
419 "int j;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000420 "};;"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000421}
422
423TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddEndCommentForShortNamespace) {
424 EXPECT_EQ("namespace {}", fixNamespaceEndComments("namespace {}"));
425 EXPECT_EQ("namespace A {}", fixNamespaceEndComments("namespace A {}"));
Krasimir Georgiev9163fe22017-03-02 09:54:44 +0000426 EXPECT_EQ("namespace A { a }",
427 fixNamespaceEndComments("namespace A { a }"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000428 EXPECT_EQ("namespace A { a };",
429 fixNamespaceEndComments("namespace A { a };"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000430}
431
432TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddCommentAfterUnaffectedRBrace) {
433 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000434 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000435 "}",
436 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000437 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000438 "}",
439 // The range (16, 3) spans the 'int' above.
440 /*Ranges=*/{1, tooling::Range(16, 3)}));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000441 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000442 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000443 "};",
444 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000445 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000446 "};",
447 // The range (16, 3) spans the 'int' above.
448 /*Ranges=*/{1, tooling::Range(16, 3)}));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000449}
450
Nico Weber37944132019-07-23 17:49:45 +0000451TEST_F(NamespaceEndCommentsFixerTest,
452 DoesNotAddCommentAfterRBraceInPPDirective) {
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000453 EXPECT_EQ("#define SAD \\\n"
454 "namespace A { \\\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000455 "int i; \\\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000456 "}",
457 fixNamespaceEndComments("#define SAD \\\n"
458 "namespace A { \\\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000459 "int i; \\\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000460 "}"));
461}
462
463TEST_F(NamespaceEndCommentsFixerTest, KeepsValidEndComment) {
464 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000465 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000466 "} // end anonymous namespace",
467 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000468 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000469 "} // end anonymous namespace"));
470 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000471 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000472 "} /* end of namespace A */",
473 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000474 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000475 "} /* end of namespace A */"));
476 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000477 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000478 "} // namespace A",
479 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000480 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000481 "} // namespace A"));
482 EXPECT_EQ("namespace A::B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000483 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000484 "} // end namespace A::B",
485 fixNamespaceEndComments("namespace A::B {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000486 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000487 "} // end namespace A::B"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000488 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000489 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000490 "}; // end namespace A",
491 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000492 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000493 "}; // end namespace A"));
494 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000495 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000496 "}; /* unnamed namespace */",
497 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000498 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000499 "}; /* unnamed namespace */"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000500}
501
Francois Ferrande8a301f2019-06-06 20:06:23 +0000502TEST_F(NamespaceEndCommentsFixerTest, KeepsValidMacroEndComment) {
503 FormatStyle Style = getLLVMStyle();
504 Style.NamespaceMacros.push_back("TESTSUITE");
505
506 EXPECT_EQ("TESTSUITE() {\n"
507 "int i;\n"
508 "} // end anonymous TESTSUITE()",
509 fixNamespaceEndComments("TESTSUITE() {\n"
510 "int i;\n"
511 "} // end anonymous TESTSUITE()",
512 Style));
513 EXPECT_EQ("TESTSUITE(A) {\n"
514 "int i;\n"
515 "} /* end of TESTSUITE(A) */",
516 fixNamespaceEndComments("TESTSUITE(A) {\n"
517 "int i;\n"
518 "} /* end of TESTSUITE(A) */",
519 Style));
520 EXPECT_EQ("TESTSUITE(A) {\n"
521 "int i;\n"
522 "} // TESTSUITE(A)",
523 fixNamespaceEndComments("TESTSUITE(A) {\n"
524 "int i;\n"
525 "} // TESTSUITE(A)",
526 Style));
527 EXPECT_EQ("TESTSUITE(A::B) {\n"
528 "int i;\n"
529 "} // end TESTSUITE(A::B)",
530 fixNamespaceEndComments("TESTSUITE(A::B) {\n"
531 "int i;\n"
532 "} // end TESTSUITE(A::B)",
533 Style));
534 EXPECT_EQ("TESTSUITE(A) {\n"
535 "int i;\n"
536 "}; // end TESTSUITE(A)",
537 fixNamespaceEndComments("TESTSUITE(A) {\n"
538 "int i;\n"
539 "}; // end TESTSUITE(A)",
540 Style));
541 EXPECT_EQ("TESTSUITE() {\n"
542 "int i;\n"
543 "}; /* unnamed TESTSUITE() */",
544 fixNamespaceEndComments("TESTSUITE() {\n"
545 "int i;\n"
546 "}; /* unnamed TESTSUITE() */",
547 Style));
548}
549
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000550TEST_F(NamespaceEndCommentsFixerTest, UpdatesInvalidEndLineComment) {
551 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000552 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000553 "} // namespace",
554 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000555 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000556 "} // namespace A"));
557 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000558 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000559 "} // namespace A",
560 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000561 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000562 "} // namespace"));
563 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000564 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000565 "} // namespace A",
566 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000567 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000568 "} //"));
569 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000570 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000571 "}; // namespace A",
572 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000573 "int i;\n"
574 "}; //"));
575
576 EXPECT_EQ("namespace A {\n"
577 "int i;\n"
578 "} // namespace A",
579 fixNamespaceEndComments("namespace A {\n"
580 "int i;\n"
581 "} // banamespace A"));
582 EXPECT_EQ("namespace A {\n"
583 "int i;\n"
584 "}; // namespace A",
585 fixNamespaceEndComments("namespace A {\n"
586 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000587 "}; // banamespace A"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000588 // Updates invalid line comments even for short namespaces.
589 EXPECT_EQ("namespace A {} // namespace A",
590 fixNamespaceEndComments("namespace A {} // namespace"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000591 EXPECT_EQ("namespace A {}; // namespace A",
592 fixNamespaceEndComments("namespace A {}; // namespace"));
Francois Ferrande56a8292017-06-14 12:29:47 +0000593
594 // Update invalid comments for compacted namespaces.
595 FormatStyle CompactNamespacesStyle = getLLVMStyle();
596 CompactNamespacesStyle.CompactNamespaces = true;
597 EXPECT_EQ("namespace out { namespace in {\n"
598 "}} // namespace out::in",
599 fixNamespaceEndComments("namespace out { namespace in {\n"
600 "}} // namespace out",
601 CompactNamespacesStyle));
602 EXPECT_EQ("namespace out { namespace in {\n"
603 "}} // namespace out::in",
604 fixNamespaceEndComments("namespace out { namespace in {\n"
605 "}} // namespace in",
606 CompactNamespacesStyle));
607 EXPECT_EQ("namespace out { namespace in {\n"
608 "}\n"
609 "} // namespace out::in",
610 fixNamespaceEndComments("namespace out { namespace in {\n"
611 "}// banamespace in\n"
612 "} // namespace out",
613 CompactNamespacesStyle));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000614}
615
Francois Ferrande8a301f2019-06-06 20:06:23 +0000616TEST_F(NamespaceEndCommentsFixerTest, UpdatesInvalidMacroEndLineComment) {
617 FormatStyle Style = getLLVMStyle();
618 Style.NamespaceMacros.push_back("TESTSUITE");
619
620 EXPECT_EQ("TESTSUITE() {\n"
621 "int i;\n"
622 "} // TESTSUITE()",
623 fixNamespaceEndComments("TESTSUITE() {\n"
624 "int i;\n"
625 "} // TESTSUITE(A)",
626 Style));
627 EXPECT_EQ("TESTSUITE(A) {\n"
628 "int i;\n"
629 "} // TESTSUITE(A)",
630 fixNamespaceEndComments("TESTSUITE(A) {\n"
631 "int i;\n"
632 "} // TESTSUITE()",
633 Style));
634 EXPECT_EQ("TESTSUITE(A) {\n"
635 "int i;\n"
636 "} // TESTSUITE(A)",
637 fixNamespaceEndComments("TESTSUITE(A) {\n"
638 "int i;\n"
639 "} //",
640 Style));
641 EXPECT_EQ("TESTSUITE(A) {\n"
642 "int i;\n"
643 "}; // TESTSUITE(A)",
644 fixNamespaceEndComments("TESTSUITE(A) {\n"
645 "int i;\n"
646 "}; //",
647 Style));
648 EXPECT_EQ("TESTSUITE(A) {\n"
649 "int i;\n"
650 "} // TESTSUITE(A)",
651 fixNamespaceEndComments("TESTSUITE(A) {\n"
652 "int i;\n"
653 "} // TESTSUITE A",
654 Style));
655 EXPECT_EQ("TESTSUITE() {\n"
656 "int i;\n"
657 "} // TESTSUITE()",
658 fixNamespaceEndComments("TESTSUITE() {\n"
659 "int i;\n"
660 "} // TESTSUITE",
661 Style));
662 EXPECT_EQ("TESTSUITE(A) {\n"
663 "int i;\n"
664 "} // TESTSUITE(A)",
665 fixNamespaceEndComments("TESTSUITE(A) {\n"
666 "int i;\n"
667 "} // TOASTSUITE(A)",
668 Style));
669 EXPECT_EQ("TESTSUITE(A) {\n"
670 "int i;\n"
671 "}; // TESTSUITE(A)",
672 fixNamespaceEndComments("TESTSUITE(A) {\n"
673 "int i;\n"
674 "}; // TOASTSUITE(A)",
675 Style));
676 // Updates invalid line comments even for short namespaces.
677 EXPECT_EQ("TESTSUITE(A) {} // TESTSUITE(A)",
678 fixNamespaceEndComments("TESTSUITE(A) {} // TESTSUITE()", Style));
679 EXPECT_EQ("TESTSUITE(A) {}; // TESTSUITE(A)",
680 fixNamespaceEndComments("TESTSUITE(A) {}; // TESTSUITE()", Style));
681
682 // Update invalid comments for compacted namespaces.
683 FormatStyle CompactNamespacesStyle = getLLVMStyle();
684 CompactNamespacesStyle.CompactNamespaces = true;
685 CompactNamespacesStyle.NamespaceMacros.push_back("TESTSUITE");
686
687 EXPECT_EQ("TESTSUITE(out) { TESTSUITE(in) {\n"
688 "}} // TESTSUITE(out::in)",
689 fixNamespaceEndComments("TESTSUITE(out) { TESTSUITE(in) {\n"
690 "}} // TESTSUITE(out)",
691 CompactNamespacesStyle));
692 EXPECT_EQ("TESTSUITE(out) { TESTSUITE(in) {\n"
693 "}} // TESTSUITE(out::in)",
694 fixNamespaceEndComments("TESTSUITE(out) { TESTSUITE(in) {\n"
695 "}} // TESTSUITE(in)",
696 CompactNamespacesStyle));
697 EXPECT_EQ("TESTSUITE(out) { TESTSUITE(in) {\n"
698 "}\n"
699 "} // TESTSUITE(out::in)",
700 fixNamespaceEndComments("TESTSUITE(out) { TESTSUITE(in) {\n"
701 "}// TAOSTSUITE(in)\n"
702 "} // TESTSUITE(out)",
703 CompactNamespacesStyle));
704}
705
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000706TEST_F(NamespaceEndCommentsFixerTest, UpdatesInvalidEndBlockComment) {
707 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000708 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000709 "} // namespace",
710 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000711 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000712 "} /* namespace A */"));
713 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000714 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000715 "} // namespace A",
716 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000717 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000718 "} /* end namespace */"));
719 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000720 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000721 "} // namespace A",
722 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000723 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000724 "} /**/"));
725 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000726 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000727 "} // namespace A",
728 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000729 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000730 "} /* end unnamed namespace */"));
731 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000732 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000733 "} // namespace A",
734 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000735 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000736 "} /* banamespace A */"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000737 EXPECT_EQ("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000738 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000739 "}; // namespace A",
740 fixNamespaceEndComments("namespace A {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000741 "int i;\n"
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000742 "}; /* banamespace A */"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000743 EXPECT_EQ("namespace A {} // namespace A",
744 fixNamespaceEndComments("namespace A {} /**/"));
Krasimir Georgieveb62118e2017-03-07 14:07:43 +0000745 EXPECT_EQ("namespace A {}; // namespace A",
746 fixNamespaceEndComments("namespace A {}; /**/"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000747}
748
Francois Ferrande8a301f2019-06-06 20:06:23 +0000749TEST_F(NamespaceEndCommentsFixerTest, UpdatesInvalidMacroEndBlockComment) {
750 FormatStyle Style = getLLVMStyle();
751 Style.NamespaceMacros.push_back("TESTSUITE");
752
753 EXPECT_EQ("TESTSUITE() {\n"
754 "int i;\n"
755 "} // TESTSUITE()",
756 fixNamespaceEndComments("TESTSUITE() {\n"
757 "int i;\n"
758 "} /* TESTSUITE(A) */",
759 Style));
760 EXPECT_EQ("TESTSUITE(A) {\n"
761 "int i;\n"
762 "} // TESTSUITE(A)",
763 fixNamespaceEndComments("TESTSUITE(A) {\n"
764 "int i;\n"
765 "} /* end TESTSUITE() */",
766 Style));
767 EXPECT_EQ("TESTSUITE(A) {\n"
768 "int i;\n"
769 "} // TESTSUITE(A)",
770 fixNamespaceEndComments("TESTSUITE(A) {\n"
771 "int i;\n"
772 "} /**/",
773 Style));
774 EXPECT_EQ("TESTSUITE(A) {\n"
775 "int i;\n"
776 "} // TESTSUITE(A)",
777 fixNamespaceEndComments("TESTSUITE(A) {\n"
778 "int i;\n"
779 "} /* end unnamed TESTSUITE() */",
780 Style));
781 EXPECT_EQ("TESTSUITE(A) {\n"
782 "int i;\n"
783 "} // TESTSUITE(A)",
784 fixNamespaceEndComments("TESTSUITE(A) {\n"
785 "int i;\n"
786 "} /* TOASTSUITE(A) */",
787 Style));
788 EXPECT_EQ("TESTSUITE(A) {\n"
789 "int i;\n"
790 "}; // TESTSUITE(A)",
791 fixNamespaceEndComments("TESTSUITE(A) {\n"
792 "int i;\n"
793 "}; /* TAOSTSUITE(A) */",
794 Style));
795 EXPECT_EQ("TESTSUITE(A) {} // TESTSUITE(A)",
796 fixNamespaceEndComments("TESTSUITE(A) {} /**/", Style));
797 EXPECT_EQ("TESTSUITE(A) {}; // TESTSUITE(A)",
798 fixNamespaceEndComments("TESTSUITE(A) {}; /**/", Style));
799}
800
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000801TEST_F(NamespaceEndCommentsFixerTest,
802 DoesNotAddEndCommentForNamespacesControlledByMacros) {
803 EXPECT_EQ("#ifdef 1\n"
804 "namespace A {\n"
805 "#elseif\n"
806 "namespace B {\n"
807 "#endif\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000808 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000809 "}\n"
810 "}\n",
811 fixNamespaceEndComments("#ifdef 1\n"
812 "namespace A {\n"
813 "#elseif\n"
814 "namespace B {\n"
815 "#endif\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000816 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000817 "}\n"
818 "}\n"));
819}
820
Francois Ferranda98a95c2017-07-28 07:56:14 +0000821TEST_F(NamespaceEndCommentsFixerTest, AddEndCommentForNamespacesAroundMacros) {
822 // Conditional blocks around are fine
823 EXPECT_EQ("namespace A {\n"
824 "#if 1\n"
825 "int i;\n"
826 "#endif\n"
827 "}// namespace A",
828 fixNamespaceEndComments("namespace A {\n"
829 "#if 1\n"
830 "int i;\n"
831 "#endif\n"
832 "}"));
833 EXPECT_EQ("#if 1\n"
834 "#endif\n"
835 "namespace A {\n"
836 "int i;\n"
837 "int j;\n"
838 "}// namespace A",
839 fixNamespaceEndComments("#if 1\n"
840 "#endif\n"
841 "namespace A {\n"
842 "int i;\n"
843 "int j;\n"
844 "}"));
845 EXPECT_EQ("namespace A {\n"
846 "int i;\n"
847 "int j;\n"
848 "}// namespace A\n"
849 "#if 1\n"
850 "#endif",
851 fixNamespaceEndComments("namespace A {\n"
852 "int i;\n"
853 "int j;\n"
854 "}\n"
855 "#if 1\n"
856 "#endif"));
857 EXPECT_EQ("#if 1\n"
858 "namespace A {\n"
859 "int i;\n"
860 "int j;\n"
861 "}// namespace A\n"
862 "#endif",
863 fixNamespaceEndComments("#if 1\n"
864 "namespace A {\n"
865 "int i;\n"
866 "int j;\n"
867 "}\n"
868 "#endif"));
869
870 // Macro definition has no impact
871 EXPECT_EQ("namespace A {\n"
872 "#define FOO\n"
873 "int i;\n"
874 "}// namespace A",
875 fixNamespaceEndComments("namespace A {\n"
876 "#define FOO\n"
877 "int i;\n"
878 "}"));
879 EXPECT_EQ("#define FOO\n"
880 "namespace A {\n"
881 "int i;\n"
882 "int j;\n"
883 "}// namespace A",
884 fixNamespaceEndComments("#define FOO\n"
885 "namespace A {\n"
886 "int i;\n"
887 "int j;\n"
888 "}"));
889 EXPECT_EQ("namespace A {\n"
890 "int i;\n"
891 "int j;\n"
892 "}// namespace A\n"
893 "#define FOO\n",
894 fixNamespaceEndComments("namespace A {\n"
895 "int i;\n"
896 "int j;\n"
897 "}\n"
898 "#define FOO\n"));
899
900 // No replacement if open & close in different conditional blocks
901 EXPECT_EQ("#if 1\n"
902 "namespace A {\n"
903 "#endif\n"
904 "int i;\n"
905 "int j;\n"
906 "#if 1\n"
907 "}\n"
908 "#endif",
909 fixNamespaceEndComments("#if 1\n"
910 "namespace A {\n"
911 "#endif\n"
912 "int i;\n"
913 "int j;\n"
914 "#if 1\n"
915 "}\n"
916 "#endif"));
917 EXPECT_EQ("#ifdef A\n"
918 "namespace A {\n"
919 "#endif\n"
920 "int i;\n"
921 "int j;\n"
922 "#ifdef B\n"
923 "}\n"
924 "#endif",
925 fixNamespaceEndComments("#ifdef A\n"
926 "namespace A {\n"
927 "#endif\n"
928 "int i;\n"
929 "int j;\n"
930 "#ifdef B\n"
931 "}\n"
932 "#endif"));
933
934 // No replacement inside unreachable conditional block
935 EXPECT_EQ("#if 0\n"
936 "namespace A {\n"
937 "int i;\n"
938 "int j;\n"
939 "}\n"
940 "#endif",
941 fixNamespaceEndComments("#if 0\n"
942 "namespace A {\n"
943 "int i;\n"
944 "int j;\n"
945 "}\n"
946 "#endif"));
947}
948
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000949TEST_F(NamespaceEndCommentsFixerTest,
950 DoesNotAddEndCommentForNamespacesInMacroDeclarations) {
951 EXPECT_EQ("#ifdef 1\n"
952 "namespace A {\n"
953 "#elseif\n"
954 "namespace B {\n"
955 "#endif\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000956 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000957 "}\n"
958 "}\n",
959 fixNamespaceEndComments("#ifdef 1\n"
960 "namespace A {\n"
961 "#elseif\n"
962 "namespace B {\n"
963 "#endif\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000964 "int i;\n"
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +0000965 "}\n"
966 "}\n"));
Krasimir Georgievbda77392017-03-06 16:44:45 +0000967 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000968 "int i;\n"
969 "int j;\n"
Krasimir Georgievbda77392017-03-06 16:44:45 +0000970 "}// namespace\n"
971 "#if A\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000972 "int i;\n"
Krasimir Georgievbda77392017-03-06 16:44:45 +0000973 "#else\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000974 "int j;\n"
Krasimir Georgievbda77392017-03-06 16:44:45 +0000975 "#endif",
976 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000977 "int i;\n"
978 "int j;\n"
Krasimir Georgievbda77392017-03-06 16:44:45 +0000979 "}\n"
980 "#if A\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000981 "int i;\n"
Krasimir Georgievbda77392017-03-06 16:44:45 +0000982 "#else\n"
Francois Ferrand0a729262019-05-29 16:22:43 +0000983 "int j;\n"
Krasimir Georgievbda77392017-03-06 16:44:45 +0000984 "#endif"));
Krasimir Georgiev615353c2017-03-06 17:29:25 +0000985 EXPECT_EQ("#if A\n"
986 "namespace A {\n"
987 "#else\n"
988 "namespace B {\n"
989 "#endif\n"
990 "int i;\n"
991 "int j;\n"
992 "}",
993 fixNamespaceEndComments("#if A\n"
994 "namespace A {\n"
995 "#else\n"
996 "namespace B {\n"
997 "#endif\n"
998 "int i;\n"
999 "int j;\n"
1000 "}"));
1001 EXPECT_EQ("#if A\n"
1002 "namespace A {\n"
1003 "#else\n"
1004 "namespace B {\n"
1005 "#endif\n"
1006 "int i;\n"
1007 "int j;\n"
1008 "} // namespace A",
1009 fixNamespaceEndComments("#if A\n"
1010 "namespace A {\n"
1011 "#else\n"
1012 "namespace B {\n"
1013 "#endif\n"
1014 "int i;\n"
1015 "int j;\n"
1016 "} // namespace A"));
1017 EXPECT_EQ("#if A\n"
1018 "namespace A {\n"
1019 "#else\n"
1020 "namespace B {\n"
1021 "#endif\n"
1022 "int i;\n"
1023 "int j;\n"
1024 "} // namespace B",
1025 fixNamespaceEndComments("#if A\n"
1026 "namespace A {\n"
1027 "#else\n"
1028 "namespace B {\n"
1029 "#endif\n"
1030 "int i;\n"
1031 "int j;\n"
1032 "} // namespace B"));
1033 EXPECT_EQ("namespace A\n"
1034 "int i;\n"
1035 "int j;\n"
1036 "#if A\n"
1037 "}\n"
1038 "#else\n"
1039 "}\n"
1040 "#endif",
1041 fixNamespaceEndComments("namespace A\n"
1042 "int i;\n"
1043 "int j;\n"
1044 "#if A\n"
1045 "}\n"
1046 "#else\n"
1047 "}\n"
1048 "#endif"));
1049 EXPECT_EQ("namespace A\n"
1050 "int i;\n"
1051 "int j;\n"
1052 "#if A\n"
1053 "} // namespace A\n"
1054 "#else\n"
1055 "} // namespace A\n"
1056 "#endif",
1057 fixNamespaceEndComments("namespace A\n"
1058 "int i;\n"
1059 "int j;\n"
1060 "#if A\n"
1061 "} // namespace A\n"
1062 "#else\n"
1063 "} // namespace A\n"
1064 "#endif"));
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +00001065}
Krasimir Georgiev85c37042017-03-01 16:38:08 +00001066
1067TEST_F(NamespaceEndCommentsFixerTest,
1068 DoesNotAddEndCommentForUnbalancedRBracesAfterNamespaceEnd) {
1069 EXPECT_EQ("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +00001070 "int i;\n"
Krasimir Georgiev85c37042017-03-01 16:38:08 +00001071 "} // namespace\n"
1072 "}",
1073 fixNamespaceEndComments("namespace {\n"
Francois Ferrand0a729262019-05-29 16:22:43 +00001074 "int i;\n"
Krasimir Georgiev85c37042017-03-01 16:38:08 +00001075 "} // namespace\n"
1076 "}"));
1077}
Matthias Gehreddae2512017-04-04 20:11:13 +00001078
1079TEST_F(NamespaceEndCommentsFixerTest, HandlesInlineAtEndOfLine_PR32438) {
1080 EXPECT_EQ("template <int> struct a {};\n"
1081 "struct a<bool{}> b() {\n"
1082 "}\n"
1083 "#define c inline\n"
1084 "void d() {\n"
1085 "}\n",
1086 fixNamespaceEndComments("template <int> struct a {};\n"
1087 "struct a<bool{}> b() {\n"
1088 "}\n"
1089 "#define c inline\n"
1090 "void d() {\n"
1091 "}\n"));
1092}
Krasimir Georgiev7cb267a2017-02-27 13:28:36 +00001093} // end namespace
1094} // end namespace format
1095} // end namespace clang