blob: d549ae8772f6c5928c4337e5557ab27abd88770e [file] [log] [blame]
package androidx.room.processor
import COMMON
import androidx.room.ext.RoomTypeNames
import androidx.room.vo.Dao
import androidx.room.writer.DaoWriter
import com.google.testing.compile.JavaFileObjects
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 simpleRun
/**
* we don't assert much in these tests since if type resolution fails, compilation fails.
*/
@RunWith(JUnit4::class)
class BaseDaoTest {
private fun String.toJFO(qName: String) = JavaFileObjects.forSourceLines(qName, this)
@Test
fun insert() {
baseDao("""
@Insert
void insertMe(T t);
""") { dao ->
assertThat(dao.insertionMethods.size, `is`(1))
}
}
@Test
fun insertArray() {
baseDao("""
@Insert
void insertMe(T[] t);
""") { dao ->
assertThat(dao.insertionMethods.size, `is`(1))
}
}
@Test
fun insertVarArg() {
baseDao("""
@Insert
void insertMe(T... t);
""") { dao ->
assertThat(dao.insertionMethods.size, `is`(1))
}
}
@Test
fun insertList() {
baseDao("""
@Insert
void insertMe(List<T> t);
""") { dao ->
assertThat(dao.insertionMethods.size, `is`(1))
}
}
@Test
fun delete() {
baseDao("""
@Delete
void deleteMe(T t);
""") { dao ->
assertThat(dao.deletionMethods.size, `is`(1))
}
}
@Test
fun deleteArray() {
baseDao("""
@Delete
void deleteMe(T[] t);
""") { dao ->
assertThat(dao.deletionMethods.size, `is`(1))
}
}
@Test
fun deleteVarArg() {
baseDao("""
@Delete
void deleteMe(T... t);
""") { dao ->
assertThat(dao.deletionMethods.size, `is`(1))
}
}
@Test
fun deleteList() {
baseDao("""
@Delete
void deleteMe(List<T> t);
""") { dao ->
assertThat(dao.deletionMethods.size, `is`(1))
}
}
@Test
fun update() {
baseDao("""
@Update
void updateMe(T t);
""") { dao ->
assertThat(dao.updateMethods.size, `is`(1))
}
}
@Test
fun updateArray() {
baseDao("""
@Update
void updateMe(T[] t);
""") { dao ->
assertThat(dao.updateMethods.size, `is`(1))
}
}
@Test
fun updateVarArg() {
baseDao("""
@Update
void updateMe(T... t);
""") { dao ->
assertThat(dao.updateMethods.size, `is`(1))
}
}
@Test
fun updateList() {
baseDao("""
@Update
void updateMe(List<T> t);
""") { dao ->
assertThat(dao.updateMethods.size, `is`(1))
}
}
fun baseDao(code: String, handler: (Dao) -> Unit) {
val baseClass = """
package foo.bar;
import androidx.room.*;
import java.util.List;
interface BaseDao<K, T> {
$code
}
""".toJFO("foo.bar.BaseDao")
val extension = """
package foo.bar;
import androidx.room.*;
@Dao
interface MyDao extends BaseDao<Integer, User> {
}
""".toJFO("foo.bar.MyDao")
simpleRun(baseClass, extension, COMMON.USER) { invocation ->
val daoElm = invocation.processingEnv.requireTypeElement("foo.bar.MyDao")
val dbElm = invocation.context.processingEnv
.requireTypeElement(RoomTypeNames.ROOM_DB)
val dbType = dbElm.asDeclaredType()
val processedDao = DaoProcessor(
invocation.context, daoElm, dbType, null
).process()
handler(processedDao)
DaoWriter(processedDao, dbElm, invocation.processingEnv).write(invocation.processingEnv)
}.compilesWithoutError()
}
}