blob: 397fe07dc8ee50ccc5cf0b76d4723314363e35ff [file] [log] [blame]
package com.android.apifinder
import com.android.tools.lint.checks.infrastructure.LintDetectorTest
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Issue
@Suppress("UnstableApiUsage")
class ApiFinderDetectorTest : LintDetectorTest() {
fun testJava() {
lint()
.files(
java(
// TODO: Remove the explicit constructors once UCallExpression.resolve() can resolve generated
// default constructors in Java.
"""
package com.android.apifinder;
public class TestClass {
public class PublicSubclass {
public PublicSubclass() {}
public void publicMethod() {}
private void privateMethod() {}
}
private class PrivateSubclass {
public PrivateSubclass() {}
public void publicMethod() {}
}
public void testMethod() {
PublicSubclass publicSubclass = new PublicSubclass();
publicSubclass.publicMethod();
publicSubclass.privateMethod();
PrivateSubclass privateSubclass = new PrivateSubclass();
privateSubclass.publicMethod();
}
}
"""
).indented()
)
.run()
.expect(
"""
src/com/android/apifinder/TestClass.java:16: Information: ModuleMethod:com.android.apifinder.TestClass.PublicSubclass.TestClass.PublicSubclass() [JavaKotlinApiUsedByModule]
PublicSubclass publicSubclass = new PublicSubclass();
~~~~~~~~~~~~~~~~~~~~
src/com/android/apifinder/TestClass.java:17: Information: ModuleMethod:com.android.apifinder.TestClass.PublicSubclass.publicMethod() [JavaKotlinApiUsedByModule]
publicSubclass.publicMethod();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 2 warnings
"""
)
}
fun testKotlin() {
lint()
.files(
kotlin(
"""
package com.android.apifinder
class TestClass {
class PublicSubclass {
fun publicMethod() {}
private fun privateMethod() {}
}
private class PrivateSubclass {
fun publicMethod() {}
}
fun testMethod() {
val publicSubclass = PublicSubclass()
publicSubclass.publicMethod()
publicSubclass.privateMethod()
val privateSubclass = PrivateSubclass()
privateSubclass.publicMethod()
}
}
"""
).indented()
)
.run()
.expect(
"""
src/com/android/apifinder/TestClass.kt:14: Information: ModuleMethod:com.android.apifinder.TestClass.PublicSubclass.TestClass.PublicSubclass() [JavaKotlinApiUsedByModule]
val publicSubclass = PublicSubclass()
~~~~~~~~~~~~~~~~
src/com/android/apifinder/TestClass.kt:15: Warning: ModuleMethod:com.android.apifinder.TestClass.PublicSubclass.publicMethod() [JavaKotlinApiUsedByModule]
publicSubclass.publicMethod()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 2 warnings
"""
)
}
override fun getDetector(): Detector {
return ApiFinderDetector()
}
override fun getIssues(): List<Issue> {
return listOf(ApiFinderDetector.ISSUE)
}
}