xref: /llvm-project/clang-tools-extra/unittests/clang-tidy/ReadabilityModuleTest.cpp (revision 37f80456ce0d1abc10683d266695c587045439c4)
1 #include "ClangTidyTest.h"
2 #include "readability/BracesAroundStatementsCheck.h"
3 #include "readability/NamespaceCommentCheck.h"
4 #include "gtest/gtest.h"
5 
6 namespace clang {
7 namespace tidy {
8 namespace test {
9 
10 using readability::BracesAroundStatementsCheck;
11 using readability::NamespaceCommentCheck;
12 
13 TEST(NamespaceCommentCheckTest, Basic) {
14   EXPECT_EQ("namespace i {\n} // namespace i",
15             runCheckOnCode<NamespaceCommentCheck>("namespace i {\n}"));
16   EXPECT_EQ("namespace {\n} // namespace",
17             runCheckOnCode<NamespaceCommentCheck>("namespace {\n}"));
18   EXPECT_EQ(
19       "namespace i { namespace j {\n} // namespace j\n } // namespace i",
20       runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j {\n} }"));
21 }
22 
23 TEST(NamespaceCommentCheckTest, SingleLineNamespaces) {
24   EXPECT_EQ(
25       "namespace i { namespace j { } }",
26       runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j { } }"));
27 }
28 
29 TEST(NamespaceCommentCheckTest, CheckExistingComments) {
30   EXPECT_EQ("namespace i { namespace j {\n"
31             "} /* namespace j */ } // namespace i\n"
32             " /* random comment */",
33             runCheckOnCode<NamespaceCommentCheck>(
34                 "namespace i { namespace j {\n"
35                 "} /* namespace j */ } /* random comment */"));
36   EXPECT_EQ("namespace {\n"
37             "} // namespace",
38             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
39                                                   "} // namespace"));
40   EXPECT_EQ("namespace {\n"
41             "} //namespace",
42             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
43                                                   "} //namespace"));
44   EXPECT_EQ("namespace {\n"
45             "} // anonymous namespace",
46             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
47                                                   "} // anonymous namespace"));
48   EXPECT_EQ("namespace {\n"
49             "} // Anonymous namespace.",
50             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
51                                                   "} // Anonymous namespace."));
52   EXPECT_EQ("namespace q {\n"
53             "} // namespace q",
54             runCheckOnCode<NamespaceCommentCheck>("namespace q {\n"
55                                                   "} // anonymous namespace q"));
56   EXPECT_EQ(
57       "namespace My_NameSpace123 {\n"
58       "} // namespace My_NameSpace123",
59       runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n"
60                                             "} // namespace My_NameSpace123"));
61   EXPECT_EQ(
62       "namespace My_NameSpace123 {\n"
63       "} //namespace My_NameSpace123",
64       runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n"
65                                             "} //namespace My_NameSpace123"));
66   EXPECT_EQ("namespace My_NameSpace123 {\n"
67             "} //  end namespace   My_NameSpace123",
68             runCheckOnCode<NamespaceCommentCheck>(
69                 "namespace My_NameSpace123 {\n"
70                 "} //  end namespace   My_NameSpace123"));
71   // Understand comments only on the same line.
72   EXPECT_EQ("namespace {\n"
73             "} // namespace\n"
74             "// namespace",
75             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
76                                                   "}\n"
77                                                   "// namespace"));
78   // Leave unknown comments.
79   EXPECT_EQ("namespace {\n"
80             "} // namespace // random text",
81             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
82                                                   "} // random text"));
83 }
84 
85 TEST(NamespaceCommentCheckTest, FixWrongComments) {
86   EXPECT_EQ("namespace i { namespace jJ0_ {\n"
87             "} // namespace jJ0_\n"
88             " } // namespace i\n"
89             " /* random comment */",
90             runCheckOnCode<NamespaceCommentCheck>(
91                 "namespace i { namespace jJ0_ {\n"
92                 "} /* namespace qqq */ } /* random comment */"));
93   EXPECT_EQ("namespace {\n"
94             "} // namespace",
95             runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
96                                                   "} // namespace asdf"));
97 }
98 
99 TEST(BracesAroundStatementsCheck, IfWithComments) {
100   EXPECT_EQ("int main() {\n"
101             "  if (false /*dummy token*/) {\n"
102             "    // comment\n"
103             "    return -1; /**/\n"
104             "}\n"
105             "  if (false) {\n"
106             "    return -1; // comment\n"
107             "}\n"
108             "  if (false) {\n"
109             "    return -1; \n"
110             "}/* multi-line \n comment */\n"
111             "}",
112             runCheckOnCode<BracesAroundStatementsCheck>(
113                 "int main() {\n"
114                 "  if (false /*dummy token*/)\n"
115                 "    // comment\n"
116                 "    return -1; /**/\n"
117                 "  if (false)\n"
118                 "    return -1; // comment\n"
119                 "  if (false)\n"
120                 "    return -1; /* multi-line \n comment */\n"
121                 "}"));
122   EXPECT_EQ("int main() {\n"
123             "  if (false /*dummy token*/) {\n"
124             "    // comment\n"
125             "    return -1 /**/ ;\n"
126             "}\n"
127             "}",
128             runCheckOnCode<BracesAroundStatementsCheck>(
129                 "int main() {\n"
130                 "  if (false /*dummy token*/)\n"
131                 "    // comment\n"
132                 "    return -1 /**/ ;\n"
133                 "}"));
134 }
135 
136 TEST(BracesAroundStatementsCheck, If) {
137   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
138                                                  "  if (false) {\n"
139                                                  "    return -1;\n"
140                                                  "  }\n"
141                                                  "}");
142   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
143                                                  "  if (auto Cond = false) {\n"
144                                                  "    return -1;\n"
145                                                  "  }\n"
146                                                  "}");
147   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
148                                                  "  if (false) {\n"
149                                                  "    return -1;\n"
150                                                  "  } else {\n"
151                                                  "    return -2;\n"
152                                                  "  }\n"
153                                                  "}");
154   EXPECT_EQ("int main() {\n"
155             "  if (false) {\n"
156             "    return -1;\n"
157             "}\n"
158             "}",
159             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
160                                                         "  if (false)\n"
161                                                         "    return -1;\n"
162                                                         "}"));
163   EXPECT_EQ("int main() {\n"
164             "  if (auto Cond = false /**/ ) {\n"
165             "    return -1;\n"
166             "}\n"
167             "}",
168             runCheckOnCode<BracesAroundStatementsCheck>(
169                 "int main() {\n"
170                 "  if (auto Cond = false /**/ )\n"
171                 "    return -1;\n"
172                 "}"));
173   // FIXME: Consider adding braces before EMPTY_MACRO and after the statement.
174   EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
175                     "#define EMPTY_MACRO\n"
176                     "int main() {\n"
177                     "  if (auto Cond = false EMPTY_MACRO /**/ ) EMPTY_MACRO\n"
178                     "    return -1;\n"
179                     "}");
180   EXPECT_EQ("int main() {\n"
181             "  if (true) { return -1/**/ ;\n"
182             "}\n"
183             "}",
184             runCheckOnCode<BracesAroundStatementsCheck>(
185                 "int main() {\n"
186                 "  if (true) return -1/**/ ;\n"
187                 "}"));
188   EXPECT_EQ("int main() {\n"
189             "  if (false) {\n"
190             "    return -1;\n"
191             "  } else {\n"
192             "    return -2;\n"
193             "}\n"
194             "}",
195             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
196                                                         "  if (false)\n"
197                                                         "    return -1;\n"
198                                                         "  else\n"
199                                                         "    return -2;\n"
200                                                         "}"));
201   EXPECT_EQ("int main() {\n"
202             "  if (false) {\n"
203             "    return -1;\n"
204             "  } else if (1 == 2) {\n"
205             "    return -2;\n"
206             "  } else {\n"
207             "    return -3;\n"
208             "}\n"
209             "}",
210             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
211                                                         "  if (false)\n"
212                                                         "    return -1;\n"
213                                                         "  else if (1 == 2)\n"
214                                                         "    return -2;\n"
215                                                         "  else\n"
216                                                         "    return -3;\n"
217                                                         "}"));
218   EXPECT_EQ("int main() {\n"
219             "  if (false) {\n"
220             "    return -1;\n"
221             "  } else if (1 == 2) {\n"
222             "    return -2;\n"
223             "  } else {\n"
224             "    return -3;\n"
225             "}\n"
226             "}",
227             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
228                                                         "  if (false)\n"
229                                                         "    return -1;\n"
230                                                         "  else if (1 == 2) {\n"
231                                                         "    return -2;\n"
232                                                         "  } else\n"
233                                                         "    return -3;\n"
234                                                         "}"));
235 }
236 
237 TEST(BracesAroundStatementsCheck, For) {
238   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
239                                                  "  for (;;) {\n"
240                                                  "    ;\n"
241                                                  "  }\n"
242                                                  "}");
243   EXPECT_EQ("int main() {\n"
244             "  for (;;) {\n"
245             "    ;\n"
246             "}\n"
247             "}",
248             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
249                                                         "  for (;;)\n"
250                                                         "    ;\n"
251                                                         "}"));
252   EXPECT_EQ("int main() {\n"
253             "  for (;;) {\n"
254             "    /**/ ;\n"
255             "}\n"
256             "}",
257             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
258                                                         "  for (;;)\n"
259                                                         "    /**/ ;\n"
260                                                         "}"));
261   EXPECT_EQ("int main() {\n"
262             "  for (;;) {\n"
263             "    return -1 /**/ ;\n"
264             "}\n"
265             "}",
266             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
267                                                         "  for (;;)\n"
268                                                         "    return -1 /**/ ;\n"
269                                                         "}"));
270 }
271 
272 TEST(BracesAroundStatementsCheck, ForRange) {
273   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
274                                                  "  int arr[4];\n"
275                                                  "  for (int i : arr) {\n"
276                                                  "    ;\n"
277                                                  "  }\n"
278                                                  "}");
279   EXPECT_EQ("int main() {\n"
280             "  int arr[4];\n"
281             "  for (int i : arr) {\n"
282             "    ;\n"
283             "}\n"
284             "  for (int i : arr) {\n"
285             "    return -1 ;\n"
286             "}\n"
287             "}",
288             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
289                                                         "  int arr[4];\n"
290                                                         "  for (int i : arr)\n"
291                                                         "    ;\n"
292                                                         "  for (int i : arr)\n"
293                                                         "    return -1 ;\n"
294                                                         "}"));
295 }
296 
297 TEST(BracesAroundStatementsCheck, DoWhile) {
298   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
299                                                  "  do {\n"
300                                                  "    ;\n"
301                                                  "  } while (false);\n"
302                                                  "}");
303   EXPECT_EQ("int main() {\n"
304             "  do {\n"
305             "    ;\n"
306             "  } while (false);\n"
307             "}",
308             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
309                                                         "  do\n"
310                                                         "    ;\n"
311                                                         "  while (false);\n"
312                                                         "}"));
313 }
314 
315 TEST(BracesAroundStatementsCheck, While) {
316   EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
317                                                  "  while (false) {\n"
318                                                  "    ;\n"
319                                                  "  }\n"
320                                                  "}");
321   EXPECT_EQ("int main() {\n"
322             "  while (false) {\n"
323             "    ;\n"
324             "}\n"
325             "}",
326             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
327                                                         "  while (false)\n"
328                                                         "    ;\n"
329                                                         "}"));
330   EXPECT_EQ("int main() {\n"
331             "  while (auto Cond = false) {\n"
332             "    ;\n"
333             "}\n"
334             "}",
335             runCheckOnCode<BracesAroundStatementsCheck>(
336                 "int main() {\n"
337                 "  while (auto Cond = false)\n"
338                 "    ;\n"
339                 "}"));
340   EXPECT_EQ("int main() {\n"
341             "  while (false /*dummy token*/) {\n"
342             "    ;\n"
343             "}\n"
344             "}",
345             runCheckOnCode<BracesAroundStatementsCheck>(
346                 "int main() {\n"
347                 "  while (false /*dummy token*/)\n"
348                 "    ;\n"
349                 "}"));
350   EXPECT_EQ("int main() {\n"
351             "  while (false) {\n"
352             "    break;\n"
353             "}\n"
354             "}",
355             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
356                                                         "  while (false)\n"
357                                                         "    break;\n"
358                                                         "}"));
359   EXPECT_EQ("int main() {\n"
360             "  while (false) {\n"
361             "    break /**/;\n"
362             "}\n"
363             "}",
364             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
365                                                         "  while (false)\n"
366                                                         "    break /**/;\n"
367                                                         "}"));
368   EXPECT_EQ("int main() {\n"
369             "  while (false) {\n"
370             "    /**/;\n"
371             "}\n"
372             "}",
373             runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
374                                                         "  while (false)\n"
375                                                         "    /**/;\n"
376                                                         "}"));
377 }
378 
379 TEST(BracesAroundStatementsCheck, Nested) {
380   EXPECT_EQ("int main() {\n"
381             "  do { if (true) {}} while (false);\n"
382             "}",
383             runCheckOnCode<BracesAroundStatementsCheck>(
384                 "int main() {\n"
385                 "  do if (true) {}while (false);\n"
386                 "}"));
387   EXPECT_EQ("int main() {\n"
388             "  do { if (true) {}} while (false);\n"
389             "}",
390             runCheckOnCode<BracesAroundStatementsCheck>(
391                 "int main() {\n"
392                 "  do if (true) {}while (false);\n"
393                 "}"));
394   EXPECT_EQ(
395       "int main() {\n"
396       "  if (true) {\n"
397       "    // comment\n"
398       "    if (false) {\n"
399       "      // comment\n"
400       "      /**/ ; // comment\n"
401       "    }\n"
402       "}\n"
403       "}",
404       runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
405                                                   "  if (true)\n"
406                                                   "    // comment\n"
407                                                   "    if (false) {\n"
408                                                   "      // comment\n"
409                                                   "      /**/ ; // comment\n"
410                                                   "    }\n"
411                                                   "}"));
412 }
413 
414 TEST(BracesAroundStatementsCheck, Macros) {
415   EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
416                     "#define IF(COND) if (COND) return -1;\n"
417                     "int main() {\n"
418                     "  IF(false)\n"
419                     "}");
420   EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
421                     "#define FOR(COND) for (COND) return -1;\n"
422                     "int main() {\n"
423                     "  FOR(;;)\n"
424                     "}");
425 }
426 
427 } // namespace test
428 } // namespace tidy
429 } // namespace clang
430