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