1 /* 2 * Copyright 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.compose.lint 18 19 import com.android.tools.lint.checks.infrastructure.LintDetectorTest 20 import com.android.tools.lint.detector.api.Detector 21 import com.android.tools.lint.detector.api.Issue 22 import org.junit.Test 23 import org.junit.runner.RunWith 24 import org.junit.runners.JUnit4 25 26 @RunWith(JUnit4::class) 27 class ExceptionMessageDetectorTest : LintDetectorTest() { getDetectornull28 override fun getDetector(): Detector = ExceptionMessageDetector() 29 30 override fun getIssues(): MutableList<Issue> { 31 return mutableListOf(ExceptionMessageDetector.ISSUE) 32 } 33 34 @Test checkWithMessagenull35 fun checkWithMessage() { 36 lint() 37 .files( 38 kotlin( 39 """ 40 package test 41 42 fun content() { 43 check(true) {"Message"} 44 } 45 """ 46 ) 47 ) 48 .run() 49 .expectClean() 50 } 51 52 @Test checkWithNamedParameterValuenull53 fun checkWithNamedParameterValue() { 54 lint() 55 .files( 56 kotlin( 57 """ 58 package test 59 60 fun content() { 61 check(value = true) {"Message"} 62 } 63 """ 64 ) 65 ) 66 .run() 67 .expectClean() 68 } 69 70 @Test checkWithNamedParameterMessagenull71 fun checkWithNamedParameterMessage() { 72 lint() 73 .files( 74 kotlin( 75 """ 76 package test 77 78 fun content() { 79 check(true, lazyMessage = {"Message"}) 80 } 81 """ 82 ) 83 ) 84 .run() 85 .expectClean() 86 } 87 88 @Test checkWithNamedParameterValueAndMessagenull89 fun checkWithNamedParameterValueAndMessage() { 90 lint() 91 .files( 92 kotlin( 93 """ 94 package test 95 96 fun content() { 97 check(value = true, lazyMessage = {"Message"}) 98 } 99 """ 100 ) 101 ) 102 .run() 103 .expectClean() 104 } 105 106 @Test checkWithNamedParameterValueAndMessageReversednull107 fun checkWithNamedParameterValueAndMessageReversed() { 108 lint() 109 .files( 110 kotlin( 111 """ 112 package test 113 114 fun content() { 115 check(lazyMessage = {"Message"}, value = true) 116 } 117 """ 118 ) 119 ) 120 .run() 121 .expectClean() 122 } 123 124 @Test checkWithoutMessagenull125 fun checkWithoutMessage() { 126 lint() 127 .files( 128 kotlin( 129 """ 130 package test 131 132 fun content() { 133 check(true) 134 } 135 """ 136 ), 137 ) 138 .run() 139 .expect( 140 """ 141 src/test/test.kt:5: Error: Please specify a lazyMessage param for check [ExceptionMessage] 142 check(true) 143 ~~~~~ 144 1 errors, 0 warnings 145 """ 146 ) 147 } 148 149 @Test checkFromDifferentPackageWithoutMessagenull150 fun checkFromDifferentPackageWithoutMessage() { 151 lint() 152 .files( 153 kotlin( 154 """ 155 package test 156 157 fun content() { 158 check(true) 159 } 160 161 fun check(boolean: Boolean) {} 162 """ 163 ), 164 ) 165 .run() 166 .expectClean() 167 } 168 169 @Test checkNotNullWithMessagenull170 fun checkNotNullWithMessage() { 171 lint() 172 .files( 173 kotlin( 174 """ 175 package test 176 177 fun content() { 178 checkNotNull(null) {"Message"} 179 } 180 """ 181 ) 182 ) 183 .run() 184 .expectClean() 185 } 186 187 @Test checkNotNullWithNamedParameterValuenull188 fun checkNotNullWithNamedParameterValue() { 189 lint() 190 .files( 191 kotlin( 192 """ 193 package test 194 195 fun content() { 196 checkNotNull(value = null) {"Message"} 197 } 198 """ 199 ) 200 ) 201 .run() 202 .expectClean() 203 } 204 205 @Test checkNotNullWithNamedParameterMessagenull206 fun checkNotNullWithNamedParameterMessage() { 207 lint() 208 .files( 209 kotlin( 210 """ 211 package test 212 213 fun content() { 214 checkNotNull(null, lazyMessage = {"Message"}) 215 } 216 """ 217 ) 218 ) 219 .run() 220 .expectClean() 221 } 222 223 @Test checkNotNullWithNamedParameterValueAndMessagenull224 fun checkNotNullWithNamedParameterValueAndMessage() { 225 lint() 226 .files( 227 kotlin( 228 """ 229 package test 230 231 fun content() { 232 checkNotNull(value = null, lazyMessage = {"Message"}) 233 } 234 """ 235 ) 236 ) 237 .run() 238 .expectClean() 239 } 240 241 @Test checkNotNullWithNamedParameterValueAndMessageReversednull242 fun checkNotNullWithNamedParameterValueAndMessageReversed() { 243 lint() 244 .files( 245 kotlin( 246 """ 247 package test 248 249 fun content() { 250 checkNotNull(lazyMessage = {"Message"}, value = null) 251 } 252 """ 253 ) 254 ) 255 .run() 256 .expectClean() 257 } 258 259 @Test checkNotNullWithoutMessagenull260 fun checkNotNullWithoutMessage() { 261 lint() 262 .files( 263 kotlin( 264 """ 265 package test 266 267 fun content() { 268 checkNotNull(null) 269 } 270 """ 271 ), 272 ) 273 .run() 274 .expect( 275 """ 276 src/test/test.kt:5: Error: Please specify a lazyMessage param for checkNotNull [ExceptionMessage] 277 checkNotNull(null) 278 ~~~~~~~~~~~~ 279 1 errors, 0 warnings 280 """ 281 ) 282 } 283 284 @Test checkNotNullFromDifferentPackageWithoutMessagenull285 fun checkNotNullFromDifferentPackageWithoutMessage() { 286 lint() 287 .files( 288 kotlin( 289 """ 290 package test 291 292 fun content() { 293 checkNotNull(null) 294 } 295 296 fun checkNotNull(value: Any?) {} 297 """ 298 ), 299 ) 300 .run() 301 .expectClean() 302 } 303 304 @Test requireWithMessagenull305 fun requireWithMessage() { 306 lint() 307 .files( 308 kotlin( 309 """ 310 package test 311 312 fun content() { 313 require(true) {"Message"} 314 } 315 """ 316 ) 317 ) 318 .run() 319 .expectClean() 320 } 321 322 @Test requireWithNamedParameterValuenull323 fun requireWithNamedParameterValue() { 324 lint() 325 .files( 326 kotlin( 327 """ 328 package test 329 330 fun content() { 331 require(value = true) {"Message"} 332 } 333 """ 334 ) 335 ) 336 .run() 337 .expectClean() 338 } 339 340 @Test requireWithNamedParameterMessagenull341 fun requireWithNamedParameterMessage() { 342 lint() 343 .files( 344 kotlin( 345 """ 346 package test 347 348 fun content() { 349 require(true, lazyMessage = {"Message"}) 350 } 351 """ 352 ) 353 ) 354 .run() 355 .expectClean() 356 } 357 358 @Test requireWithNamedParameterValueAndMessagenull359 fun requireWithNamedParameterValueAndMessage() { 360 lint() 361 .files( 362 kotlin( 363 """ 364 package test 365 366 fun content() { 367 require(value = true, lazyMessage = {"Message"}) 368 } 369 """ 370 ) 371 ) 372 .run() 373 .expectClean() 374 } 375 376 @Test requireWithNamedParameterValueAndMessageReversednull377 fun requireWithNamedParameterValueAndMessageReversed() { 378 lint() 379 .files( 380 kotlin( 381 """ 382 package test 383 384 fun content() { 385 require(lazyMessage = {"Message"}, value = true) 386 } 387 """ 388 ) 389 ) 390 .run() 391 .expectClean() 392 } 393 394 @Test requireWithoutMessagenull395 fun requireWithoutMessage() { 396 lint() 397 .files( 398 kotlin( 399 """ 400 package test 401 402 fun content() { 403 require(true) 404 } 405 """ 406 ), 407 ) 408 .run() 409 .expect( 410 """ 411 src/test/test.kt:5: Error: Please specify a lazyMessage param for require [ExceptionMessage] 412 require(true) 413 ~~~~~~~ 414 1 errors, 0 warnings 415 """ 416 ) 417 } 418 419 @Test requireFromDifferentPackageWithoutMessagenull420 fun requireFromDifferentPackageWithoutMessage() { 421 lint() 422 .files( 423 kotlin( 424 """ 425 package test 426 427 fun content() { 428 require(true) 429 } 430 431 fun require(boolean: Boolean) {} 432 """ 433 ), 434 ) 435 .run() 436 .expectClean() 437 } 438 439 @Test requireNotNullWithMessagenull440 fun requireNotNullWithMessage() { 441 lint() 442 .files( 443 kotlin( 444 """ 445 package test 446 447 fun content() { 448 requireNotNull(null) {"Message"} 449 } 450 """ 451 ) 452 ) 453 .run() 454 .expectClean() 455 } 456 457 @Test requireNotNullWithNamedParameterValuenull458 fun requireNotNullWithNamedParameterValue() { 459 lint() 460 .files( 461 kotlin( 462 """ 463 package test 464 465 fun content() { 466 requireNotNull(value = null) {"Message"} 467 } 468 """ 469 ) 470 ) 471 .run() 472 .expectClean() 473 } 474 475 @Test requireNotNullWithNamedParameterMessagenull476 fun requireNotNullWithNamedParameterMessage() { 477 lint() 478 .files( 479 kotlin( 480 """ 481 package test 482 483 fun content() { 484 requireNotNull(null, lazyMessage = {"Message"}) 485 } 486 """ 487 ) 488 ) 489 .run() 490 .expectClean() 491 } 492 493 @Test requireNotNullWithNamedParameterValueAndMessagenull494 fun requireNotNullWithNamedParameterValueAndMessage() { 495 lint() 496 .files( 497 kotlin( 498 """ 499 package test 500 501 fun content() { 502 requireNotNull(value = null, lazyMessage = {"Message"}) 503 } 504 """ 505 ) 506 ) 507 .run() 508 .expectClean() 509 } 510 511 @Test requireNotNullWithNamedParameterValueAndMessageReversednull512 fun requireNotNullWithNamedParameterValueAndMessageReversed() { 513 lint() 514 .files( 515 kotlin( 516 """ 517 package test 518 519 fun content() { 520 requireNotNull(lazyMessage = {"Message"}, value = null) 521 } 522 """ 523 ) 524 ) 525 .run() 526 .expectClean() 527 } 528 529 @Test requireNotNullWithoutMessagenull530 fun requireNotNullWithoutMessage() { 531 lint() 532 .files( 533 kotlin( 534 """ 535 package test 536 537 fun content() { 538 requireNotNull(null) 539 } 540 """ 541 ), 542 ) 543 .run() 544 .expect( 545 """ 546 src/test/test.kt:5: Error: Please specify a lazyMessage param for requireNotNull [ExceptionMessage] 547 requireNotNull(null) 548 ~~~~~~~~~~~~~~ 549 1 errors, 0 warnings 550 """ 551 ) 552 } 553 554 @Test requireNotNullFromDifferentPackageWithoutMessagenull555 fun requireNotNullFromDifferentPackageWithoutMessage() { 556 lint() 557 .files( 558 kotlin( 559 """ 560 package test 561 562 fun content() { 563 requireNotNull(null) 564 } 565 566 fun requireNotNull(value: Any?) {} 567 """ 568 ), 569 ) 570 .run() 571 .expectClean() 572 } 573 } 574