Run TransactionMethodProcessorTest with KSP
Bug: 160322705
Test: TransactionMethodProcessorTest
Change-Id: Ib2e90c72b15752472fd2cdf1acbf129b78410767
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/TransactionMethodProcessorTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/TransactionMethodProcessorTest.kt
index 40c24a3..88cc9ab 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/TransactionMethodProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/TransactionMethodProcessorTest.kt
@@ -20,18 +20,17 @@
import androidx.room.Dao
import androidx.room.Transaction
import androidx.room.compiler.processing.XTypeElement
-import androidx.room.testing.TestInvocation
-import androidx.room.testing.TestProcessor
+import androidx.room.compiler.processing.util.Source
+import androidx.room.compiler.processing.util.XTestInvocation
+import androidx.room.compiler.processing.util.runProcessorTest
+import androidx.room.testing.context
import androidx.room.vo.TransactionMethod
-import com.google.common.truth.Truth
-import com.google.testing.compile.CompileTester
-import com.google.testing.compile.JavaFileObjects
-import com.google.testing.compile.JavaSourcesSubjectFactory
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
+import toSources
@Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN")
@RunWith(JUnit4::class)
@@ -59,7 +58,7 @@
"""
) { transaction, _ ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.compilesWithoutError()
+ }
}
@Test
@@ -69,9 +68,14 @@
@Transaction
private String doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile().withErrorContaining(ProcessorErrors.TRANSACTION_METHOD_MODIFIERS)
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.TRANSACTION_METHOD_MODIFIERS
+ )
+ }
+ }
}
@Test
@@ -81,9 +85,12 @@
@Transaction
public final String doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile().withErrorContaining(ProcessorErrors.TRANSACTION_METHOD_MODIFIERS)
+ invocation.assertCompilationResult {
+ hasErrorContaining(ProcessorErrors.TRANSACTION_METHOD_MODIFIERS)
+ }
+ }
}
@Test
@@ -93,14 +100,16 @@
@Transaction
public LiveData<String> doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "androidx.lifecycle.LiveData"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "androidx.lifecycle.LiveData"
+ )
)
- )
+ }
+ }
}
@Test
@@ -110,14 +119,16 @@
@Transaction
public io.reactivex.Flowable<String> doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "io.reactivex.Flowable"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "io.reactivex.Flowable"
+ )
)
- )
+ }
+ }
}
@Test
@@ -129,14 +140,16 @@
return null;
}
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "io.reactivex.rxjava3.core.Flowable"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "io.reactivex.rxjava3.core.Flowable"
+ )
)
- )
+ }
+ }
}
@Test
@@ -146,14 +159,16 @@
@Transaction
public io.reactivex.Completable doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "io.reactivex.Completable"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "io.reactivex.Completable"
+ )
)
- )
+ }
+ }
}
@Test
@@ -165,14 +180,16 @@
return null;
}
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "io.reactivex.rxjava3.core.Completable"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "io.reactivex.rxjava3.core.Completable"
+ )
)
- )
+ }
+ }
}
@Test
@@ -182,14 +199,16 @@
@Transaction
public io.reactivex.Single<String> doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "io.reactivex.Single"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "io.reactivex.Single"
+ )
)
- )
+ }
+ }
}
@Test
@@ -201,14 +220,16 @@
return null;
}
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "io.reactivex.rxjava3.core.Single"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "io.reactivex.rxjava3.core.Single"
+ )
)
- )
+ }
+ }
}
@Test
@@ -218,14 +239,16 @@
@Transaction
public ListenableFuture<String> doInTransaction(int param) { return null; }
"""
- ) { transaction, _ ->
+ ) { transaction, invocation ->
assertThat(transaction.name, `is`("doInTransaction"))
- }.failsToCompile()
- .withErrorContaining(
- ProcessorErrors.transactionMethodAsync(
- "com.google.common.util.concurrent.ListenableFuture"
+ invocation.assertCompilationResult {
+ hasErrorContaining(
+ ProcessorErrors.transactionMethodAsync(
+ "com.google.common.util.concurrent.ListenableFuture"
+ )
)
- )
+ }
+ }
}
private val TransactionMethod.name: String
@@ -233,45 +256,40 @@
private fun singleTransactionMethod(
vararg input: String,
- handler: (TransactionMethod, TestInvocation) -> Unit
- ): CompileTester {
- return Truth.assertAbout(JavaSourcesSubjectFactory.javaSources())
- .that(
- listOf(
- JavaFileObjects.forSourceString(
- "foo.bar.MyClass",
- DAO_PREFIX + input.joinToString("\n") + DAO_SUFFIX
- ),
- COMMON.LIVE_DATA, COMMON.RX2_FLOWABLE, COMMON.PUBLISHER, COMMON.RX2_COMPLETABLE,
- COMMON.RX2_SINGLE, COMMON.RX3_FLOWABLE, COMMON.RX3_COMPLETABLE,
- COMMON.RX3_SINGLE, COMMON.LISTENABLE_FUTURE
- )
+ handler: (TransactionMethod, XTestInvocation) -> Unit
+ ) {
+ val inputSource = listOf(
+ Source.java(
+ "foo.bar.MyClass",
+ DAO_PREFIX + input.joinToString("\n") + DAO_SUFFIX
)
- .processedWith(
- TestProcessor.builder()
- .forAnnotations(Transaction::class, Dao::class)
- .nextRunHandler { invocation ->
- val (owner, methods) = invocation.roundEnv
- .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
- .filterIsInstance<XTypeElement>()
- .map {
- Pair(
- it,
- it.getAllMethods().filter {
- it.hasAnnotation(Transaction::class)
- }
- )
- }.first { it.second.isNotEmpty() }
- val processor = TransactionMethodProcessor(
- baseContext = invocation.context,
- containing = owner.type,
- executableElement = methods.first()
- )
- val processed = processor.process()
- handler(processed, invocation)
- true
- }
- .build()
+ )
+ val otherSources = listOf(
+ COMMON.LIVE_DATA, COMMON.RX2_FLOWABLE, COMMON.PUBLISHER, COMMON.RX2_COMPLETABLE,
+ COMMON.RX2_SINGLE, COMMON.RX3_FLOWABLE, COMMON.RX3_COMPLETABLE,
+ COMMON.RX3_SINGLE, COMMON.LISTENABLE_FUTURE
+ ).toSources()
+ runProcessorTest(
+ sources = inputSource + otherSources
+ ) { invocation ->
+ val (owner, methods) = invocation.roundEnv
+ .getElementsAnnotatedWith(Dao::class.qualifiedName!!)
+ .filterIsInstance<XTypeElement>()
+ .map {
+ Pair(
+ it,
+ it.getAllMethods().filter {
+ it.hasAnnotation(Transaction::class)
+ }
+ )
+ }.first { it.second.isNotEmpty() }
+ val processor = TransactionMethodProcessor(
+ baseContext = invocation.context,
+ containing = owner.type,
+ executableElement = methods.first()
)
+ val processed = processor.process()
+ handler(processed, invocation)
+ }
}
}