[go: nahoru, domu]

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)
+        }
     }
 }