blob: 1da7206c276ff95b513a0ae8acd4d8cafb36e02b [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));
257}
258
Alexander Kornienko37f80452015-03-02 11:55:04 +0000259TEST(BracesAroundStatementsCheck, For) {
260 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
261 " for (;;) {\n"
262 " ;\n"
263 " }\n"
264 "}");
265 EXPECT_EQ("int main() {\n"
266 " for (;;) {\n"
267 " ;\n"
268 "}\n"
269 "}",
270 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
271 " for (;;)\n"
272 " ;\n"
273 "}"));
274 EXPECT_EQ("int main() {\n"
275 " for (;;) {\n"
276 " /**/ ;\n"
277 "}\n"
278 "}",
279 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
280 " for (;;)\n"
281 " /**/ ;\n"
282 "}"));
283 EXPECT_EQ("int main() {\n"
284 " for (;;) {\n"
285 " return -1 /**/ ;\n"
286 "}\n"
287 "}",
288 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
289 " for (;;)\n"
290 " return -1 /**/ ;\n"
291 "}"));
292}
293
294TEST(BracesAroundStatementsCheck, ForRange) {
295 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
296 " int arr[4];\n"
297 " for (int i : arr) {\n"
298 " ;\n"
299 " }\n"
300 "}");
301 EXPECT_EQ("int main() {\n"
302 " int arr[4];\n"
303 " for (int i : arr) {\n"
304 " ;\n"
305 "}\n"
306 " for (int i : arr) {\n"
307 " return -1 ;\n"
308 "}\n"
309 "}",
310 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
311 " int arr[4];\n"
312 " for (int i : arr)\n"
313 " ;\n"
314 " for (int i : arr)\n"
315 " return -1 ;\n"
316 "}"));
317}
318
319TEST(BracesAroundStatementsCheck, DoWhile) {
320 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
321 " do {\n"
322 " ;\n"
323 " } while (false);\n"
324 "}");
325 EXPECT_EQ("int main() {\n"
326 " do {\n"
327 " ;\n"
328 " } while (false);\n"
329 "}",
330 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
331 " do\n"
332 " ;\n"
333 " while (false);\n"
334 "}"));
335}
336
337TEST(BracesAroundStatementsCheck, While) {
338 EXPECT_NO_CHANGES(BracesAroundStatementsCheck, "int main() {\n"
339 " while (false) {\n"
340 " ;\n"
341 " }\n"
342 "}");
343 EXPECT_EQ("int main() {\n"
344 " while (false) {\n"
345 " ;\n"
346 "}\n"
347 "}",
348 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
349 " while (false)\n"
350 " ;\n"
351 "}"));
352 EXPECT_EQ("int main() {\n"
353 " while (auto Cond = false) {\n"
354 " ;\n"
355 "}\n"
356 "}",
357 runCheckOnCode<BracesAroundStatementsCheck>(
358 "int main() {\n"
359 " while (auto Cond = false)\n"
360 " ;\n"
361 "}"));
362 EXPECT_EQ("int main() {\n"
363 " while (false /*dummy token*/) {\n"
364 " ;\n"
365 "}\n"
366 "}",
367 runCheckOnCode<BracesAroundStatementsCheck>(
368 "int main() {\n"
369 " while (false /*dummy token*/)\n"
370 " ;\n"
371 "}"));
372 EXPECT_EQ("int main() {\n"
373 " while (false) {\n"
374 " break;\n"
375 "}\n"
376 "}",
377 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
378 " while (false)\n"
379 " break;\n"
380 "}"));
381 EXPECT_EQ("int main() {\n"
382 " while (false) {\n"
383 " break /**/;\n"
384 "}\n"
385 "}",
386 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
387 " while (false)\n"
388 " break /**/;\n"
389 "}"));
390 EXPECT_EQ("int main() {\n"
391 " while (false) {\n"
392 " /**/;\n"
393 "}\n"
394 "}",
395 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
396 " while (false)\n"
397 " /**/;\n"
398 "}"));
399}
400
401TEST(BracesAroundStatementsCheck, Nested) {
402 EXPECT_EQ("int main() {\n"
403 " do { if (true) {}} while (false);\n"
404 "}",
405 runCheckOnCode<BracesAroundStatementsCheck>(
406 "int main() {\n"
407 " do if (true) {}while (false);\n"
408 "}"));
409 EXPECT_EQ("int main() {\n"
410 " do { if (true) {}} while (false);\n"
411 "}",
412 runCheckOnCode<BracesAroundStatementsCheck>(
413 "int main() {\n"
414 " do if (true) {}while (false);\n"
415 "}"));
416 EXPECT_EQ(
417 "int main() {\n"
418 " if (true) {\n"
419 " // comment\n"
420 " if (false) {\n"
421 " // comment\n"
422 " /**/ ; // comment\n"
423 " }\n"
424 "}\n"
425 "}",
426 runCheckOnCode<BracesAroundStatementsCheck>("int main() {\n"
427 " if (true)\n"
428 " // comment\n"
429 " if (false) {\n"
430 " // comment\n"
431 " /**/ ; // comment\n"
432 " }\n"
433 "}"));
434}
435
436TEST(BracesAroundStatementsCheck, Macros) {
437 EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
438 "#define IF(COND) if (COND) return -1;\n"
439 "int main() {\n"
440 " IF(false)\n"
441 "}");
442 EXPECT_NO_CHANGES(BracesAroundStatementsCheck,
443 "#define FOR(COND) for (COND) return -1;\n"
444 "int main() {\n"
445 " FOR(;;)\n"
446 "}");
447}
448
Alexander Kornienko33fc3db2014-09-22 10:41:39 +0000449} // namespace test
450} // namespace tidy
451} // namespace clang