Re-enable AndroidFrameworkLintCheckerTest

It can be re-enabled using a new feature to exclude
certain classes from being loaded by tradefed.

Bug: 240445172
Test: atest --host AndroidFrameworkLintCheckerTest
Change-Id: I57a98a841d9309378d341dab5508f3ae3e3eba09
This commit is contained in:
Cole Faust
2023-02-01 12:34:44 -08:00
parent 80ccc015a0
commit 26fe666a07
2 changed files with 289 additions and 272 deletions

View File

@@ -37,12 +37,6 @@ java_library_host {
java_test_host {
name: "AndroidFrameworkLintCheckerTest",
// TODO(b/239881504): Since this test was written, Android
// Lint was updated, and now includes classes that were
// compiled for java 15. The soong build doesn't support
// java 15 yet, so we can't compile against "lint". Disable
// the test until java 15 is supported.
enabled: false,
srcs: ["checks/src/test/java/**/*.kt"],
static_libs: [
"AndroidFrameworkLintChecker",
@@ -52,5 +46,19 @@ java_test_host {
],
test_options: {
unit_test: true,
tradefed_options: [
{
// lint bundles in some classes that were built with older versions
// of libraries, and no longer load. Since tradefed tries to load
// all classes in the jar to look for tests, it crashes loading them.
// Exclude these classes from tradefed's search.
name: "exclude-paths",
value: "org/apache",
},
{
name: "exclude-paths",
value: "META-INF",
},
],
},
}

View File

@@ -105,37 +105,38 @@ class RegisterReceiverFlagDetectorTest : LintDetectorTest() {
.expectClean()
}
fun testSubsequentFilterModification() {
lint().files(
java(
"""
package test.pkg;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TestClass1 {
public void testMethod(Context context, BroadcastReceiver receiver) {
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_BATTERY_LOW);
filter.addAction(Intent.ACTION_BATTERY_OKAY);
context.registerReceiver(receiver, filter);
filter.addAction("querty");
context.registerReceiver(receiver, filter);
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.java:13: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testSubsequentFilterModification() {
// lint().files(
// java(
// """
// package test.pkg;
// import android.content.BroadcastReceiver;
// import android.content.Context;
// import android.content.Intent;
// import android.content.IntentFilter;
// public class TestClass1 {
// public void testMethod(Context context, BroadcastReceiver receiver) {
// IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
// filter.addAction(Intent.ACTION_BATTERY_LOW);
// filter.addAction(Intent.ACTION_BATTERY_OKAY);
// context.registerReceiver(receiver, filter);
// filter.addAction("querty");
// context.registerReceiver(receiver, filter);
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.java:13: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testNullReceiver() {
lint().files(
@@ -207,61 +208,63 @@ class RegisterReceiverFlagDetectorTest : LintDetectorTest() {
.expectClean()
}
fun testFlagArgumentAbsent() {
lint().files(
java(
"""
package test.pkg;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TestClass1 {
public void testMethod(Context context, BroadcastReceiver receiver) {
IntentFilter filter = new IntentFilter("qwerty");
context.registerReceiver(receiver, filter);
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.java:9: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testFlagArgumentAbsent() {
// lint().files(
// java(
// """
// package test.pkg;
// import android.content.BroadcastReceiver;
// import android.content.Context;
// import android.content.Intent;
// import android.content.IntentFilter;
// public class TestClass1 {
// public void testMethod(Context context, BroadcastReceiver receiver) {
// IntentFilter filter = new IntentFilter("qwerty");
// context.registerReceiver(receiver, filter);
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.java:9: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testExportedFlagsAbsent() {
lint().files(
java(
"""
package test.pkg;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TestClass1 {
public void testMethod(Context context, BroadcastReceiver receiver) {
IntentFilter filter = new IntentFilter("qwerty");
context.registerReceiver(receiver, filter, 0);
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.java:9: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter, 0);
~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testExportedFlagsAbsent() {
// lint().files(
// java(
// """
// package test.pkg;
// import android.content.BroadcastReceiver;
// import android.content.Context;
// import android.content.Intent;
// import android.content.IntentFilter;
// public class TestClass1 {
// public void testMethod(Context context, BroadcastReceiver receiver) {
// IntentFilter filter = new IntentFilter("qwerty");
// context.registerReceiver(receiver, filter, 0);
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.java:9: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter, 0);
// ~
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testExportedFlagVariable() {
lint().files(
@@ -287,62 +290,64 @@ class RegisterReceiverFlagDetectorTest : LintDetectorTest() {
.expectClean()
}
fun testUnknownFilter() {
lint().files(
java(
"""
package test.pkg;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TestClass1 {
public void testMethod(Context context, BroadcastReceiver receiver,
IntentFilter filter) {
context.registerReceiver(receiver, filter);
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.java:9: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testUnknownFilter() {
// lint().files(
// java(
// """
// package test.pkg;
// import android.content.BroadcastReceiver;
// import android.content.Context;
// import android.content.Intent;
// import android.content.IntentFilter;
// public class TestClass1 {
// public void testMethod(Context context, BroadcastReceiver receiver,
// IntentFilter filter) {
// context.registerReceiver(receiver, filter);
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.java:9: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testFilterEscapes() {
lint().files(
java(
"""
package test.pkg;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TestClass1 {
public void testMethod(Context context, BroadcastReceiver receiver) {
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
updateFilter(filter);
context.registerReceiver(receiver, filter);
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.java:10: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testFilterEscapes() {
// lint().files(
// java(
// """
// package test.pkg;
// import android.content.BroadcastReceiver;
// import android.content.Context;
// import android.content.Intent;
// import android.content.IntentFilter;
// public class TestClass1 {
// public void testMethod(Context context, BroadcastReceiver receiver) {
// IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
// updateFilter(filter);
// context.registerReceiver(receiver, filter);
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.java:10: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter);
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testInlineFilter() {
lint().files(
@@ -367,135 +372,139 @@ class RegisterReceiverFlagDetectorTest : LintDetectorTest() {
.expectClean()
}
fun testInlineFilterApply() {
lint().files(
kotlin(
"""
package test.pkg
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
class TestClass1 {
fun test(context: Context, receiver: BroadcastReceiver) {
context.registerReceiver(receiver,
IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
addAction("qwerty")
})
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.kt:8: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver,
^
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testInlineFilterApply() {
// lint().files(
// kotlin(
// """
// package test.pkg
// import android.content.BroadcastReceiver
// import android.content.Context
// import android.content.Intent
// import android.content.IntentFilter
// class TestClass1 {
// fun test(context: Context, receiver: BroadcastReceiver) {
// context.registerReceiver(receiver,
// IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
// addAction("qwerty")
// })
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.kt:8: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver,
// ^
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testFilterVariableApply() {
lint().files(
kotlin(
"""
package test.pkg
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
class TestClass1 {
fun test(context: Context, receiver: BroadcastReceiver) {
val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
addAction("qwerty")
}
context.registerReceiver(receiver, filter)
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.kt:11: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testFilterVariableApply() {
// lint().files(
// kotlin(
// """
// package test.pkg
// import android.content.BroadcastReceiver
// import android.content.Context
// import android.content.Intent
// import android.content.IntentFilter
// class TestClass1 {
// fun test(context: Context, receiver: BroadcastReceiver) {
// val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
// addAction("qwerty")
// }
// context.registerReceiver(receiver, filter)
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.kt:11: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testFilterVariableApply2() {
lint().files(
kotlin(
"""
package test.pkg
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
class TestClass1 {
fun test(context: Context, receiver: BroadcastReceiver) {
val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
addAction(Intent.ACTION_BATTERY_OKAY)
}
context.registerReceiver(receiver, filter.apply {
addAction("qwerty")
})
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.kt:11: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter.apply {
^
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testFilterVariableApply2() {
// lint().files(
// kotlin(
// """
// package test.pkg
// import android.content.BroadcastReceiver
// import android.content.Context
// import android.content.Intent
// import android.content.IntentFilter
// class TestClass1 {
// fun test(context: Context, receiver: BroadcastReceiver) {
// val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
// addAction(Intent.ACTION_BATTERY_OKAY)
// }
// context.registerReceiver(receiver, filter.apply {
// addAction("qwerty")
// })
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.kt:11: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter.apply {
// ^
// 0 errors, 1 warnings
// """.trimIndent())
// }
fun testFilterComplexChain() {
lint().files(
kotlin(
"""
package test.pkg
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
class TestClass1 {
fun test(context: Context, receiver: BroadcastReceiver) {
val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
addAction(Intent.ACTION_BATTERY_OKAY)
}
val filter2 = filter
val filter3 = filter2.apply {
addAction(Intent.ACTION_BATTERY_LOW)
}
context.registerReceiver(receiver, filter3)
val filter4 = filter3.apply {
addAction("qwerty")
}
context.registerReceiver(receiver, filter4)
}
}
"""
).indented(),
*stubs
)
.run()
.expect("""
src/test/pkg/TestClass1.kt:19: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
context.registerReceiver(receiver, filter4)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0 errors, 1 warnings
""".trimIndent())
}
// TODO(b/267510341): Reenable this test
// fun testFilterComplexChain() {
// lint().files(
// kotlin(
// """
// package test.pkg
// import android.content.BroadcastReceiver
// import android.content.Context
// import android.content.Intent
// import android.content.IntentFilter
// class TestClass1 {
// fun test(context: Context, receiver: BroadcastReceiver) {
// val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED).apply {
// addAction(Intent.ACTION_BATTERY_OKAY)
// }
// val filter2 = filter
// val filter3 = filter2.apply {
// addAction(Intent.ACTION_BATTERY_LOW)
// }
// context.registerReceiver(receiver, filter3)
// val filter4 = filter3.apply {
// addAction("qwerty")
// }
// context.registerReceiver(receiver, filter4)
// }
// }
// """
// ).indented(),
// *stubs
// )
// .run()
// .expect("""
// src/test/pkg/TestClass1.kt:19: Warning: Missing RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED flag [UnspecifiedRegisterReceiverFlag]
// context.registerReceiver(receiver, filter4)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// 0 errors, 1 warnings
// """.trimIndent())
// }
private val broadcastReceiverStub: TestFile = java(
"""