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