[Gradle] Move external dependencies tests out from Kapt3AndroidIT

#KT-45748 In Progress
This commit is contained in:
Alexander Likhachev
2022-10-26 02:07:53 +02:00
committed by Space Team
parent 90b0c867ed
commit d980f94fff
3 changed files with 191 additions and 196 deletions
@@ -0,0 +1,191 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.android
import org.gradle.api.JavaVersion
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.Kapt3BaseIT
import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName
import java.io.File
@DisplayName("android with kapt3 external dependencies tests")
@AndroidGradlePluginTests
class Kapt3AndroidExternalIT : Kapt3BaseIT() {
@DisplayName("kapt works with butterknife")
@GradleAndroidTest
fun testButterKnife(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-butterknife".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/org/example/kotlin/butterknife/SimpleActivity\$\$ViewBinder.java")
val butterknifeJavaClassesDir = "app/build/intermediates/javac/debug/classes/org/example/kotlin/butterknife/"
assertFileInProjectExists(butterknifeJavaClassesDir + "SimpleActivity\$\$ViewBinder.class")
assertFileInProjectExists("app/build/tmp/kotlin-classes/debug/org/example/kotlin/butterknife/SimpleAdapter\$ViewHolder.class")
}
build("assembleDebug") {
assertTasksUpToDate(":app:compileDebugKotlin", ":app:compileDebugJavaWithJavac")
}
}
}
@DisplayName("kapt works with dagger")
@GradleAndroidTest
fun testDagger(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-dagger".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/dagger/kotlin/DaggerApplicationComponent.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/dagger/kotlin/ui/HomeActivity_MembersInjector.java")
val daggerJavaClassesDir =
"app/build/intermediates/javac/debug/classes/com/example/dagger/kotlin/"
assertFileInProjectExists(daggerJavaClassesDir + "DaggerApplicationComponent.class")
assertFileInProjectExists("app/build/tmp/kotlin-classes/debug/com/example/dagger/kotlin/AndroidModule.class")
}
}
}
@DisplayName("kapt works with DbFlow")
@GradleAndroidTest
fun testDbFlow(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-dbflow".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/raizlabs/android/dbflow/config/GeneratedDatabaseHolder.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/raizlabs/android/dbflow/config/AppDatabaseAppDatabase_Database.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/mobi/porquenao/poc/kotlin/core/Item_Table.java")
}
}
}
@DisplayName("kapt works with realm")
@GradleAndroidTest
fun testRealm(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-realm".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/CatRealmProxy.java")
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/CatRealmProxyInterface.java")
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/DefaultRealmModule.java")
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/DefaultRealmModuleMediator.java")
}
}
}
@DisplayName("kapt works with databinding")
@GradleAndroidTest
fun testDatabinding(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-databinding".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
// TODO: remove the `if` when we drop support for [TestVersions.AGP.AGP_42]
buildJdk = if (jdkVersion.version >= JavaVersion.VERSION_11) jdkVersion.location else File(System.getProperty("jdk11Home"))
) {
build(
"assembleDebug", "assembleAndroidTest",
) {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/databinding/BR.java")
// databinding compiler v2 was introduced in AGP 3.1.0, was enabled by default in AGP 3.2.0
assertOutputContains("-Aandroid.databinding.enableV2=1")
assertFileInProjectNotExists("library/build/generated/source/kapt/debugAndroidTest/android/databinding/DataBinderMapperImpl.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/databinding/databinding/ActivityTestBindingImpl.java")
// KT-23866
assertOutputDoesNotContain("The following options were not recognized by any processor")
}
}
}
@DisplayName("KT-30735: kapt works with androidx.navigation.safeargs")
@GradleAndroidTest
fun testAndroidxNavigationSafeArgs(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"androidx-navigation-safe-args".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
val safeArgsVersion = if (gradleVersion >= GradleVersion.version(TestVersions.Gradle.G_7_0)) "2.5.3" else "2.1.0"
build("assembleDebug", "-Psafe_args_version=$safeArgsVersion") {
assertFileInProjectExists("build/generated/source/navigation-args/debug/test/androidx/navigation/StartFragmentDirections.java")
assertFileInProjectExists("build/tmp/kotlin-classes/debug/test/androidx/navigation/StartFragmentKt.class")
}
}
}
@DisplayName("kapt works with androidx")
@GradleAndroidTest
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42, maxVersion = TestVersions.AGP.AGP_42)
fun testDatabindingWithAndroidX(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-databinding-androidX".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("kaptDebugKotlin") {
assertKaptSuccessful()
}
}
}
}
@@ -22,63 +22,6 @@ import kotlin.io.path.writeText
@DisplayName("android with kapt3 tests")
@AndroidGradlePluginTests
class Kapt3AndroidIT : Kapt3BaseIT() {
@DisplayName("kapt works with butterknife")
@GradleAndroidTest
fun testButterKnife(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-butterknife".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/org/example/kotlin/butterknife/SimpleActivity\$\$ViewBinder.java")
val butterknifeJavaClassesDir = "app/build/intermediates/javac/debug/classes/org/example/kotlin/butterknife/"
assertFileInProjectExists(butterknifeJavaClassesDir + "SimpleActivity\$\$ViewBinder.class")
assertFileInProjectExists("app/build/tmp/kotlin-classes/debug/org/example/kotlin/butterknife/SimpleAdapter\$ViewHolder.class")
}
build("assembleDebug") {
assertTasksUpToDate(":app:compileDebugKotlin", ":app:compileDebugJavaWithJavac")
}
}
}
@DisplayName("kapt works with dagger")
@GradleAndroidTest
fun testDagger(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-dagger".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/dagger/kotlin/DaggerApplicationComponent.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/dagger/kotlin/ui/HomeActivity_MembersInjector.java")
val daggerJavaClassesDir =
"app/build/intermediates/javac/debug/classes/com/example/dagger/kotlin/"
assertFileInProjectExists(daggerJavaClassesDir + "DaggerApplicationComponent.class")
assertFileInProjectExists("app/build/tmp/kotlin-classes/debug/com/example/dagger/kotlin/AndroidModule.class")
}
}
}
@DisplayName("KT-15001")
@GradleAndroidTest
fun testKt15001(
@@ -98,84 +41,6 @@ class Kapt3AndroidIT : Kapt3BaseIT() {
}
}
@DisplayName("kapt works with DbFlow")
@GradleAndroidTest
fun testDbFlow(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-dbflow".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/raizlabs/android/dbflow/config/GeneratedDatabaseHolder.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/raizlabs/android/dbflow/config/AppDatabaseAppDatabase_Database.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/mobi/porquenao/poc/kotlin/core/Item_Table.java")
}
}
}
@DisplayName("kapt works with realm")
@GradleAndroidTest
fun testRealm(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-realm".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("assembleDebug") {
assertKaptSuccessful()
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/CatRealmProxy.java")
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/CatRealmProxyInterface.java")
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/DefaultRealmModule.java")
assertFileInProjectExists("build/generated/source/kapt/debug/io/realm/DefaultRealmModuleMediator.java")
}
}
}
@DisplayName("kapt works with databinding")
@GradleAndroidTest
fun testDatabinding(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-databinding".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
// TODO: remove the `if` when we drop support for [TestVersions.AGP.AGP_42]
buildJdk = if (jdkVersion.version >= JavaVersion.VERSION_11) jdkVersion.location else File(System.getProperty("jdk11Home"))
) {
setupDataBinding()
build(
"assembleDebug", "assembleAndroidTest",
) {
assertKaptSuccessful()
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/databinding/BR.java")
// databinding compiler v2 was introduced in AGP 3.1.0, was enabled by default in AGP 3.2.0
assertOutputContains("-Aandroid.databinding.enableV2=1")
assertFileInProjectNotExists("library/build/generated/source/kapt/debugAndroidTest/android/databinding/DataBinderMapperImpl.java")
assertFileInProjectExists("app/build/generated/source/kapt/debug/com/example/databinding/databinding/ActivityTestBindingImpl.java")
// KT-23866
assertOutputDoesNotContain("The following options were not recognized by any processor")
}
}
}
@DisplayName("KT-25374: kapt doesn't fail with anonymous classes with IC")
@GradleAndroidTest
fun testICWithAnonymousClasses(
@@ -189,8 +54,6 @@ class Kapt3AndroidIT : Kapt3BaseIT() {
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
setupDataBinding()
build("assembleDebug") {
assertKaptSuccessful()
}
@@ -261,27 +124,6 @@ class Kapt3AndroidIT : Kapt3BaseIT() {
}
}
@DisplayName("KT-30735: kapt works with androidx.navigation.safeargs")
@GradleAndroidTest
fun testAndroidxNavigationSafeArgs(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"androidx-navigation-safe-args".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
val safeArgsVersion = if (gradleVersion >= GradleVersion.version(TestVersions.Gradle.G_7_0)) "2.5.3" else "2.1.0"
build("assembleDebug", "-Psafe_args_version=$safeArgsVersion") {
assertFileInProjectExists("build/generated/source/navigation-args/debug/test/androidx/navigation/StartFragmentDirections.java")
assertFileInProjectExists("build/tmp/kotlin-classes/debug/test/androidx/navigation/StartFragmentKt.class")
}
}
}
@DisplayName("KT-31127: kapt doesn't break JavaCompile when using Filer API")
@GradleAndroidTest
fun testKotlinProcessorUsingFiler(
@@ -328,26 +170,6 @@ class Kapt3AndroidIT : Kapt3BaseIT() {
}
}
@DisplayName("kapt works with androidx")
@GradleAndroidTest
@AndroidTestVersions(minVersion = AGP_42, maxVersion = AGP_42)
fun testDatabindingWithAndroidX(
gradleVersion: GradleVersion,
agpVersion: String,
jdkVersion: JdkVersions.ProvidedJdk,
) {
project(
"android-databinding-androidX".withPrefix,
gradleVersion,
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
buildJdk = jdkVersion.location
) {
build("kaptDebugKotlin") {
assertKaptSuccessful()
}
}
}
@DisplayName("kapt uses AGP annotation processor option providers as nested inputs")
@GradleAndroidTest
fun testKaptUsingApOptionProvidersAsNestedInputOutput(
@@ -467,21 +289,4 @@ class Kapt3AndroidIT : Kapt3BaseIT() {
)
}
}
private fun TestProject.setupDataBinding() {
buildGradle.appendText(
//language=Gradle
"""
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:
configurations.kapt.exclude group: "com.android.databinding", module: "compiler"
}
}
""".trimIndent()
)
}
}
@@ -47,5 +47,4 @@ repositories {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
kapt "com.android.databinding:compiler:$android_tools_version"
}