blob: 9b44ac559172ab81ca40c2811bb2568fbeb0cbc5 [file] [log] [blame]
Alexander Kornienko33fc3db2014-09-22 10:41:39 +00001#include "ClangTidyTest.h"
Alexander Kornienko37f80452015-03-02 11:55:04 +00002#include "readability/BracesAroundStatementsCheck.h"
Alexander Kornienko33fc3db2014-09-22 10:41:39 +00003#include "readability/NamespaceCommentCheck.h"
4#include "gtest/gtest.h"
5
6namespace clang {
7namespace tidy {
8namespace test {
9
Alexander Kornienko37f80452015-03-02 11:55:04 +000010using readability::BracesAroundStatementsCheck;
Alexander Kornienko33fc3db2014-09-22 10:41:39 +000011using readability::NamespaceCommentCheck;
12
13TEST(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
23TEST(NamespaceCommentCheckTest, SingleLineNamespaces) {
24 EXPECT_EQ(
25 "namespace i { namespace j { } }",
26 runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j { } }"));
27}
28
29TEST(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"));
Alexander Kornienko27f126b2014-10-16 15:11:54 +000048 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"));
Alexander Kornienko33fc3db2014-09-22 10:41:39 +000056 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"));
Alexander Kornienko33fc3db2014-09-22 10:41:39 +000078}
79
80TEST(NamespaceCommentCheckTest, FixWrongComments) {
81 EXPECT_EQ("namespace i { namespace jJ0_ {\n"
82 "} // namespace jJ0_\n"
83 " } // namespace i\n"
84 " /* random comment */",
85 runCheckOnCode<NamespaceCommentCheck>(
86 "namespace i { namespace jJ0_ {\n"
87 "} /* namespace qqq */ } /* random comment */"));
88 EXPECT_EQ("namespace {\n"
89 "} // namespace",
90 runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
91 "} // namespace asdf"));
Alexander Kornienko333d8112015-03-05 14:58:03 +000092 // Remove unknown line comments. These are likely to be an unrecognized form
93 // of a namespace ending comment.
Alexander Kornienkoda4ebb22015-03-05 14:56:11 +000094 EXPECT_EQ("namespace {\n"
95 "} // namespace",
96 runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
97 "} // random text"));
Alexander Kornienko33fc3db2014-09-22 10:41:39 +000098}
99
Alexander Kornienko37f80452015-03-02 11:55:04 +0000100TEST(BracesAroundStatementsCheck, IfWithComments) {
101 EXPECT_EQ("int main() {\n"
102 " if (false /*dummy token*/) {\n"
103 " // comment\n"
104 " return -1; /**/\n"
105 "}\n"
106 " if (false) {\n"
107 " return -1; // comment\n"
108 "}\n"
109 " if (false) {\n"
110 " return -1; \n"
111 "}/* multi-line \n comment */\n"
112 "}",
113 runCheckOnCode<BracesAroundStatementsCheck>(
114 "int main() {\n"
115 " if (false /*dummy token*/)\n"
116 " // comment\n"
117 " return -1; /**/\n"
118 " if (false)\n"
119 " return -1; // comment\n"
120 " if (false)\n"
121 " return -1; /* multi-line \n comment */\n"
122 "}"));
123 EXPECT_EQ("int main() {\n"
124 " if (false /*dummy token*/) {\n"
125 " // comment\n"
126 " return -1 /**/ ;\n"
127 "}\n"
128 "}",
129 runCheckOnCode<BracesAroundStatementsCheck>(
130 "int main() {\n"
131 " if (false /*dummy token*/)\n"
132 " // comment\n"
133 " return -1 /**/ ;\n"
134 "}"));
135}
136
137TEST(BracesAroundStatementsCheck, If) {
138 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
139 " if (false) {\n"
140 " return -1;\n"
141 " }\n"
142 "}");
143 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
144 " if (auto Cond = false) {\n"
145 " return -1;\n"
146 " }\n"
147 "}");
148 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
149 " if (false) {\n"
150 " return -1;\n"
151 " } else {\n"
152 " return -2;\n"
153 " }\n"
154 "}");
155 EXPECT_EQ("int main() {\n"
156 " if (false) {\n"
157 " return -1;\n"
158 "}\n"
159 "}",
160 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
161 " if (false)\n"
162 " return -1;\n"
163 "}"));
164 EXPECT_EQ("int main() {\n"
165 " if (auto Cond = false /**/ ) {\n"
166 " return -1;\n"
167 "}\n"
168 "}",
169 runCheckOnCode<BracesAroundStatementsCheck>(
170 "int main() {\n"
171 " if (auto Cond = false /**/ )\n"
172 " return -1;\n"
173 "}"));
174 // FIXME: Consider adding braces before EMPTY_MACRO and after the statement.
175 EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
176 "#define EMPTY_MACRO\n"
177 "int main() {\n"
178 " if (auto Cond = false EMPTY_MACRO /**/ ) EMPTY_MACRO\n"
179 " return -1;\n"
180 "}");
181 EXPECT_EQ("int main() {\n"
182 " if (true) { return -1/**/ ;\n"
183 "}\n"
184 "}",
185 runCheckOnCode<BracesAroundStatementsCheck>(
186 "int main() {\n"
187 " if (true) return -1/**/ ;\n"
188 "}"));
189 EXPECT_EQ("int main() {\n"
190 " if (false) {\n"
191 " return -1;\n"
192 " } else {\n"
193 " return -2;\n"
194 "}\n"
195 "}",
196 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
197 " if (false)\n"
198 " return -1;\n"
199 " else\n"
200 " return -2;\n"
201 "}"));
202 EXPECT_EQ("int main() {\n"
203 " if (false) {\n"
204 " return -1;\n"
205 " } else if (1 == 2) {\n"
206 " return -2;\n"
207 " } else {\n"
208 " return -3;\n"
209 "}\n"
210 "}",
211 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
212 " if (false)\n"
213 " return -1;\n"
214 " else if (1 == 2)\n"
215 " return -2;\n"
216 " else\n"
217 " return -3;\n"
218 "}"));
219 EXPECT_EQ("int main() {\n"
220 " if (false) {\n"
221 " return -1;\n"
222 " } else if (1 == 2) {\n"
223 " return -2;\n"
224 " } else {\n"
225 " return -3;\n"
226 "}\n"
227 "}",
228 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
229 " if (false)\n"
230 " return -1;\n"
231 " else if (1 == 2) {\n"
232 " return -2;\n"
233 " } else\n"
234 " return -3;\n"
235 "}"));
236}
237
Samuel Benzaquen462501e2015-03-31 13:53:03 +0000238TEST(BracesAroundStatementsCheck, IfElseWithShortStatements) {
239 ClangTidyOptions Options;
240 Options.CheckOptions["test-check.ShortStatementLines"] = "1";
241
242 EXPECT_EQ("int main() {\n"
243 " if (true) return 1;\n"
244 " if (false) { return -1;\n"
245 " } else if (1 == 2) { return -2;\n"
246 " } else { return -3;\n"
247 "}\n"
248 "}",
249 runCheckOnCode<BracesAroundStatementsCheck>(
250 "int main() {\n"
251 " if (true) return 1;\n"
252 " if (false) return -1;\n"
253 " else if (1 == 2) return -2;\n"
254 " else return -3;\n"
255 "}",
256 nullptr, "input.cc", None, Options));
Samuel Benzaquencfacf8a2015-06-04 16:36:58 +0000257
258 // If the last else is an else-if, we also force it.
259 EXPECT_EQ("int main() {\n"
260 " if (false) { return -1;\n"
261 " } else if (1 == 2) { return -2;\n"
262 "}\n"
263 "}",
264 runCheckOnCode<BracesAroundStatementsCheck>(
265 "int main() {\n"
266 " if (false) return -1;\n"
267 " else if (1 == 2) return -2;\n"
268 "}",
269 nullptr, "input.cc", None, Options));
Samuel Benzaquen462501e2015-03-31 13:53:03 +0000270}
271
Alexander Kornienko37f80452015-03-02 11:55:04 +0000272TEST(BracesAroundStatementsCheck, For) {
273 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
274 " for (;;) {\n"
275 " ;\n"
276 " }\n"
277 "}");
278 EXPECT_EQ("int main() {\n"
279 " for (;;) {\n"
280 " ;\n"
281 "}\n"
282 "}",
283 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
284 " for (;;)\n"
285 " ;\n"
286 "}"));
287 EXPECT_EQ("int main() {\n"
288 " for (;;) {\n"
289 " /**/ ;\n"
290 "}\n"
291 "}",
292 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
293 " for (;;)\n"
294 " /**/ ;\n"
295 "}"));
296 EXPECT_EQ("int main() {\n"
297 " for (;;) {\n"
298 " return -1 /**/ ;\n"
299 "}\n"
300 "}",
301 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
302 " for (;;)\n"
303 " return -1 /**/ ;\n"
304 "}"));
305}
306
307TEST(BracesAroundStatementsCheck, ForRange) {
308 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
309 " int arr[4];\n"
310 " for (int i : arr) {\n"
311 " ;\n"
312 " }\n"
313 "}");
314 EXPECT_EQ("int main() {\n"
315 " int arr[4];\n"
316 " for (int i : arr) {\n"
317 " ;\n"
318 "}\n"
319 " for (int i : arr) {\n"
320 " return -1 ;\n"
321 "}\n"
322 "}",
323 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
324 " int arr[4];\n"
325 " for (int i : arr)\n"
326 " ;\n"
327 " for (int i : arr)\n"
328 " return -1 ;\n"
329 "}"));
330}
331
332TEST(BracesAroundStatementsCheck, DoWhile) {
333 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
334 " do {\n"
335 " ;\n"
336 " } while (false);\n"
337 "}");
338 EXPECT_EQ("int main() {\n"
339 " do {\n"
340 " ;\n"
341 " } while (false);\n"
342 "}",
343 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
344 " do\n"
345 " ;\n"
346 " while (false);\n"
347 "}"));
348}
349
350TEST(BracesAroundStatementsCheck, While) {
351 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
352 " while (false) {\n"
353 " ;\n"
354 " }\n"
355 "}");
356 EXPECT_EQ("int main() {\n"
357 " while (false) {\n"
358 " ;\n"
359 "}\n"
360 "}",
361 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
362 " while (false)\n"
363 " ;\n"
364 "}"));
365 EXPECT_EQ("int main() {\n"
366 " while (auto Cond = false) {\n"
367 " ;\n"
368 "}\n"
369 "}",
370 runCheckOnCode<BracesAroundStatementsCheck>(
371 "int main() {\n"
372 " while (auto Cond = false)\n"
373 " ;\n"
374 "}"));
375 EXPECT_EQ("int main() {\n"
376 " while (false /*dummy token*/) {\n"
377 " ;\n"
378 "}\n"
379 "}",
380 runCheckOnCode<BracesAroundStatementsCheck>(
381 "int main() {\n"
382 " while (false /*dummy token*/)\n"
383 " ;\n"
384 "}"));
385 EXPECT_EQ("int main() {\n"
386 " while (false) {\n"
387 " break;\n"
388 "}\n"
389 "}",
390 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
391 " while (false)\n"
392 " break;\n"
393 "}"));
394 EXPECT_EQ("int main() {\n"
395 " while (false) {\n"
396 " break /**/;\n"
397 "}\n"
398 "}",
399 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
400 " while (false)\n"
401 " break /**/;\n"
402 "}"));
403 EXPECT_EQ("int main() {\n"
404 " while (false) {\n"
405 " /**/;\n"
406 "}\n"
407 "}",
408 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
409 " while (false)\n"
410 " /**/;\n"
411 "}"));
412}
413
414TEST(BracesAroundStatementsCheck, Nested) {
415 EXPECT_EQ("int main() {\n"
416 " do { if (true) {}} while (false);\n"
417 "}",
418 runCheckOnCode<BracesAroundStatementsCheck>(
419 "int main() {\n"
420 " do if (true) {}while (false);\n"
421 "}"));
422 EXPECT_EQ("int main() {\n"
423 " do { if (true) {}} while (false);\n"
424 "}",
425 runCheckOnCode<BracesAroundStatementsCheck>(
426 "int main() {\n"
427 " do if (true) {}while (false);\n"
428 "}"));
429 EXPECT_EQ(
430 "int main() {\n"
431 " if (true) {\n"
432 " // comment\n"
433 " if (false) {\n"
434 " // comment\n"
435 " /**/ ; // comment\n"
436 " }\n"
437 "}\n"
438 "}",
439 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
440 " if (true)\n"
441 " // comment\n"
442 " if (false) {\n"
443 " // comment\n"
444 " /**/ ; // comment\n"
445 " }\n"
446 "}"));
447}
448
449TEST(BracesAroundStatementsCheck, Macros) {
450 EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
451 "#define IF(COND) if (COND) return -1;\n"
452 "int main() {\n"
453 " IF(false)\n"
454 "}");
455 EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
456 "#define FOR(COND) for (COND) return -1;\n"
457 "int main() {\n"
458 " FOR(;;)\n"
459 "}");
460}
461
Alexander Kornienko33fc3db2014-09-22 10:41:39 +0000462} // namespace test
463} // namespace tidy
464} // namespace clang