Fix testDatabinding with AGP 3.0.x

AGP 3.0.x requires explicit 'kapt' dependency on databinding compiler.
Also databinding v2 (enabled by default in AGP 3.2.0) generates different
java classes.
This commit is contained in:
Alexey Tsvetkov
2019-01-15 00:07:07 +03:00
parent 3b806dca68
commit a59be05792
2 changed files with 35 additions and 23 deletions
@@ -121,7 +121,7 @@ open class Kapt3AndroidIT : Kapt3BaseIT() {
@Test
fun testICWithAnonymousClasses() {
val project = Project("icAnonymousTypes", directoryPrefix = "kapt2")
setupDataBinding(project, null)
setupDataBinding(project)
project.build("assembleDebug") {
assertSuccessful()
@@ -141,43 +141,53 @@ open class Kapt3AndroidIT : Kapt3BaseIT() {
}
@Test
open fun testDatabinding() {
fun testDatabinding() {
val project = Project("android-databinding", directoryPrefix = "kapt2")
setupDataBinding(project, "app")
setupDataBinding(project)
project.build("assembleDebug", "assembleAndroidTest") {
assertSuccessful()
assertKaptSuccessful()
assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/BR.java")
assertFileExists("library/build/generated/source/kapt/debugAndroidTest/android/databinding/DataBinderMapperImpl.java")
assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/databinding/ActivityTestBindingImpl.java")
if (output.contains("-Aandroid.databinding.enableV2=1")) {
// databinding compiler v2 was introduced in AGP 3.1.0, was enabled by default in AGP 3.2.0
assertFileExists("library/build/generated/source/kapt/debugAndroidTest/android/databinding/DataBinderMapperImpl.java")
assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/databinding/ActivityTestBindingImpl.java")
} else {
assertFileExists("library/build/generated/source/kapt/debugAndroidTest/android/databinding/DataBinderMapper.java")
assertFileExists("app/build/generated/source/kapt/debug/com/example/databinding/databinding/ActivityTestBinding.java")
}
// KT-23866
assertNotContains("The following options were not recognized by any processor")
}
}
private fun setupDataBinding(project: Project, projectName: String?) {
private fun setupDataBinding(project: Project) {
project.setupWorkingDir()
if (androidGradlePluginVersion >= AGPVersion.v3_2_0) {
project.setupWorkingDir()
project.gradleBuildScript().modify {
it + "\n\n" + """
allprojects {
plugins.withId("kotlin-kapt") {
println("${'$'}project android.databinding.enableV2=${'$'}{project.findProperty('android.databinding.enableV2')}")
// With new AGP, there's no need in the Databinding kapt dependency:
project.gradleBuildScript(projectName).modify {
it.lines().filterNot {
it.contains("kapt \"com.android.databinding:compiler")
}.joinToString("\n")
// With new AGP, there's no need in the Databinding kapt dependency:
configurations.kapt.exclude group: "com.android.databinding", module: "compiler"
// Workaround for KT-24915
afterEvaluate {
def dataBindingExportTask = tasks.findByName('dataBindingExportFeaturePackageIdsDebug')
if (dataBindingExportTask != null) {
kaptDebugKotlin.dependsOn dataBindingExportTask
}
}
}
}
""".trimIndent()
}
// Workaround for KT-24915
project.gradleBuildScript(projectName).appendText(
"\n" + """
afterEvaluate {
kaptDebugKotlin.dependsOn dataBindingExportFeaturePackageIdsDebug
}
""".trimIndent()
)
}
}
}
@@ -28,6 +28,8 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'junit:junit:4.12'
kapt "com.android.databinding:compiler:$android_tools_version"
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation "com.android.support.test:rules:1.0.2"
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
@@ -36,4 +38,4 @@ dependencies {
repositories {
mavenCentral()
}
}