BaseEntityParserTest.kt revision 540e3498175652abe452d8e0ed1c252e718ddf5a
11600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar/* 21600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Copyright (C) 2016 The Android Open Source Project 31600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * 41600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 51600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * you may not use this file except in compliance with the License. 61600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * You may obtain a copy of the License at 71600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * 81600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 91600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * 101600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * Unless required by applicable law or agreed to in writing, software 111600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 121600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * See the License for the specific language governing permissions and 141600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar * limitations under the License. 151600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar */ 161600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 1764db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarpackage android.arch.persistence.room.processor 181600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 194d4bae3f216e55f824d7d7fbfe2f8861906ee3e2Yigit Boyarimport android.arch.persistence.room.Embedded 2064db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarimport android.arch.persistence.room.testing.TestInvocation 2164db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarimport android.arch.persistence.room.testing.TestProcessor 2264db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyarimport android.arch.persistence.room.vo.Entity 23540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescuimport android.support.annotation.NonNull 241600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.auto.common.MoreElements 251600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.common.truth.Truth 261600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.testing.compile.CompileTester 271600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.testing.compile.JavaFileObjects 281600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarimport com.google.testing.compile.JavaSourceSubjectFactory 29dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyarimport com.google.testing.compile.JavaSourcesSubjectFactory 30dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyarimport javax.tools.JavaFileObject 311600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 321600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyarabstract class BaseEntityParserTest { 331600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar companion object { 341600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar const val ENTITY_PREFIX = """ 351600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar package foo.bar; 3664db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar import android.arch.persistence.room.*; 37b2bfd37e6320e795bffafe24cfdc6a1d1b3da035Yuichi Araki import android.support.annotation.NonNull; 380fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar @Entity%s 39dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar public class MyEntity %s { 401600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar """ 411600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar const val ENTITY_SUFFIX = "}" 421600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar } 431600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar 440fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar fun singleEntity(input: String, attributes: Map<String, String> = mapOf(), 45dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar baseClass : String = "", 46dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar jfos : List<JavaFileObject> = emptyList(), 47c678b3a4eebc102a1a3b5923c5e07478c0eecae3Yigit Boyar handler: (Entity, TestInvocation) -> Unit): CompileTester { 480fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar val attributesReplacement : String 490fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar if (attributes.isEmpty()) { 500fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar attributesReplacement = "" 510fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar } else { 520fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar attributesReplacement = "(" + 530fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar attributes.entries.map { "${it.key} = ${it.value}" }.joinToString(",") + 540fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar ")".trimIndent() 550fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar } 56dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar val baseClassReplacement : String 57dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar if (baseClass == "") { 58dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar baseClassReplacement = "" 59dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar } else { 60dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar baseClassReplacement = " extends $baseClass" 61dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar } 62dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar return Truth.assertAbout(JavaSourcesSubjectFactory.javaSources()) 63dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar .that(jfos + JavaFileObjects.forSourceString("foo.bar.MyEntity", 64dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar ENTITY_PREFIX.format(attributesReplacement, baseClassReplacement) 65dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar + input + ENTITY_SUFFIX 661600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar )) 671600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar .processedWith(TestProcessor.builder() 6864db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar .forAnnotations(android.arch.persistence.room.Entity::class, 6964db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar android.arch.persistence.room.PrimaryKey::class, 7064db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar android.arch.persistence.room.Ignore::class, 714d4bae3f216e55f824d7d7fbfe2f8861906ee3e2Yigit Boyar Embedded::class, 72540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu android.arch.persistence.room.ColumnInfo::class, 73540e3498175652abe452d8e0ed1c252e718ddf5aFlorina Muntenescu NonNull::class) 741600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar .nextRunHandler { invocation -> 751600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar val entity = invocation.roundEnv 761600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar .getElementsAnnotatedWith( 7764db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar android.arch.persistence.room.Entity::class.java) 78dc18ce63fe07921b1080e48d3e597e2b5240d17aYigit Boyar .first { it.toString() == "foo.bar.MyEntity" } 79aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar val parser = EntityProcessor(invocation.context, 80aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar MoreElements.asType(entity)) 81aa82fce1d73394bdc7f4c2510cf94a3572032b24Yigit Boyar val parsedQuery = parser.process() 821600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar handler(parsedQuery, invocation) 831600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar true 841600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar } 851600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar .build()) 861600cc11df868b62b6ae3995d94a3ec0b86559adYigit Boyar } 870fc66ddc60bdc71d5466bb1db1a218e5a3d9c1fcYigit Boyar} 88