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 } 79 80 TEST(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")); 92 // Remove unknown line comments. These are likely to be an unrecognized form 93 // of a namespace ending comment. 94 EXPECT_EQ("namespace {\n" 95 "} // namespace", 96 runCheckOnCode<NamespaceCommentCheck>("namespace {\n" 97 "} // random text")); 98 } 99 100 TEST(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 137 TEST(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 238 TEST(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 273 TEST(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 298 TEST(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 316 TEST(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 380 TEST(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 415 TEST(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 428 } // namespace test 429 } // namespace tidy 430 } // namespace clang 431