blob: 96fcc18f56298fc18d3ece9b4c5eb4652ee0193b [file] [log] [blame]
/*
* Copyright 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("UnstableApiUsage")
package androidx.build.lint
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
@RunWith(JUnit4::class)
class ObsoleteCompatDetectorTest :
AbstractLintDetectorTest(
useDetector = ObsoleteCompatDetector(),
useIssues = listOf(ObsoleteCompatDetector.ISSUE),
stubs =
arrayOf(
java(
"""
package androidx.annotation;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import java.lang.annotation.Target;
@Target({METHOD, FIELD, CONSTRUCTOR})
public @interface ReplaceWith {
String expression();
}
"""
)
)
) {
@Test
fun `Obsolete compat method`() {
val input =
arrayOf(
javaSample("androidx.ObsoleteCompatMethod"),
)
val expected =
"""
src/androidx/ObsoleteCompatMethod.java:33: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCode(Object obj) {
~~~~~~~~
src/androidx/ObsoleteCompatMethod.java:38: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCodeNoDoc(Object obj) {
~~~~~~~~~~~~~
2 errors, 0 warnings
"""
.trimIndent()
val expectedAutoFix =
"""
Fix for src/androidx/ObsoleteCompatMethod.java line 33: Replace obsolete compat method:
@@ -20 +20
+ import androidx.annotation.ReplaceWith;
@@ -32 +33
+ * @deprecated Call {@link Object#hashCode()} directly.
@@ -33 +35
+ @Deprecated
+ @ReplaceWith(expression = "obj.hashCode()")
Fix for src/androidx/ObsoleteCompatMethod.java line 38: Replace obsolete compat method:
@@ -20 +20
+ import androidx.annotation.ReplaceWith;
@@ -38 +39
+ @Deprecated
+ @ReplaceWith(expression = "obj.hashCode()")
+ /** @deprecated Call {@link Object#hashCode()} directly. */
"""
.trimIndent()
check(*input).expect(expected).expectFixDiffs(expectedAutoFix)
}
@Test
fun `Obsolete compat method missing @ReplaceWith`() {
val input =
arrayOf(
javaSample("androidx.ObsoleteCompatMethodMissingReplaceWith"),
)
val expected =
"""
src/androidx/ObsoleteCompatMethodMissingReplaceWith.java:32: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCode(Object obj) {
~~~~~~~~
1 errors, 0 warnings
"""
.trimIndent()
val expectedAutoFix =
"""
Autofix for src/androidx/ObsoleteCompatMethodMissingReplaceWith.java line 32: Replace obsolete compat method:
@@ -18 +18
+ import androidx.annotation.ReplaceWith;
@@ -31 +32
+ @ReplaceWith(expression = "obj.hashCode()")
"""
.trimIndent()
check(*input).expect(expected).expectFixDiffs(expectedAutoFix)
}
@Test
fun `Obsolete compat method missing multi-line @ReplaceWith`() {
val input =
arrayOf(
javaSample("androidx.ObsoleteCompatMethodMissingMultiLineReplaceWith"),
)
val expected =
"""
src/androidx/ObsoleteCompatMethodMissingMultiLineReplaceWith.java:32: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCode(Object obj) {
~~~~~~~~
1 errors, 0 warnings
"""
.trimIndent()
val expectedAutoFix =
"""
Autofix for src/androidx/ObsoleteCompatMethodMissingMultiLineReplaceWith.java line 32: Replace obsolete compat method:
@@ -18 +18
+ import androidx.annotation.ReplaceWith;
@@ -31 +32
+ @ReplaceWith(expression = "obj.hashCode()")
"""
.trimIndent()
check(*input).expect(expected).expectFixDiffs(expectedAutoFix)
}
@Test
fun `Obsolete compat methods missing @Deprecated`() {
val input =
arrayOf(
javaSample("androidx.ObsoleteCompatMethodMissingDeprecated"),
)
val expected =
"""
src/androidx/ObsoleteCompatMethodMissingDeprecated.java:37: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCode(Object obj) {
~~~~~~~~
1 errors, 0 warnings
"""
.trimIndent()
val expectedAutoFix =
"""
Autofix for src/androidx/ObsoleteCompatMethodMissingDeprecated.java line 37: Replace obsolete compat method:
@@ -36 +36
+ @Deprecated
"""
.trimIndent()
check(*input).expect(expected).expectFixDiffs(expectedAutoFix)
}
@Test
fun `Obsolete compat methods missing javadoc`() {
val input =
arrayOf(
javaSample("androidx.ObsoleteCompatMethodMissingJavadoc"),
)
val expected =
"""
src/androidx/ObsoleteCompatMethodMissingJavadoc.java:37: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCode(Object obj) {
~~~~~~~~
src/androidx/ObsoleteCompatMethodMissingJavadoc.java:44: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCodeNoDoc(Object obj) {
~~~~~~~~~~~~~
2 errors, 0 warnings
"""
.trimIndent()
val expectedAutoFix =
"""
Autofix for src/androidx/ObsoleteCompatMethodMissingJavadoc.java line 37: Replace obsolete compat method:
@@ -34 +34
+ * @deprecated Call {@link Object#hashCode()} directly.
Autofix for src/androidx/ObsoleteCompatMethodMissingJavadoc.java line 44: Replace obsolete compat method:
@@ -42 +42
+ /** @deprecated Call {@link Object#hashCode()} directly. */
"""
.trimIndent()
check(*input).expect(expected).expectFixDiffs(expectedAutoFix)
}
@Test
fun `Obsolete compat methods missing Deprecated and javadoc`() {
val input =
arrayOf(
javaSample("androidx.ObsoleteCompatMethodMissingDeprecatedAndJavadoc"),
)
val expected =
"""
src/androidx/ObsoleteCompatMethodMissingDeprecatedAndJavadoc.java:36: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCode(Object obj) {
~~~~~~~~
src/androidx/ObsoleteCompatMethodMissingDeprecatedAndJavadoc.java:42: Error: Obsolete compat method should provide replacement [ObsoleteCompatMethod]
public static long hashCodeNoDoc(Object obj) {
~~~~~~~~~~~~~
2 errors, 0 warnings
"""
.trimIndent()
val expectedAutoFix =
"""
Fix for src/androidx/ObsoleteCompatMethodMissingDeprecatedAndJavadoc.java line 36: Replace obsolete compat method:
@@ -34 +34
+ * @deprecated Call {@link Object#hashCode()} directly.
@@ -35 +36
+ @Deprecated
Fix for src/androidx/ObsoleteCompatMethodMissingDeprecatedAndJavadoc.java line 42: Replace obsolete compat method:
@@ -41 +41
+ @Deprecated
+ /** @deprecated Call {@link Object#hashCode()} directly. */
"""
.trimIndent()
check(*input).expect(expected).expectFixDiffs(expectedAutoFix)
}
}