From d980f94fff6945946ac111abfe21bf8758168644 Mon Sep 17 00:00:00 2001 From: Alexander Likhachev Date: Wed, 26 Oct 2022 02:07:53 +0200 Subject: [PATCH] [Gradle] Move external dependencies tests out from Kapt3AndroidIT #KT-45748 In Progress --- .../gradle/android/Kapt3AndroidExternalIT.kt | 191 +++++++++++++++++ .../kotlin/gradle/android/Kapt3AndroidIT.kt | 195 ------------------ .../kapt2/icAnonymousTypes/build.gradle | 1 - 3 files changed, 191 insertions(+), 196 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt new file mode 100644 index 00000000000..c32a681f5cc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidExternalIT.kt @@ -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() + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIT.kt index 7349d8a05e9..b647f64897f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/android/Kapt3AndroidIT.kt @@ -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() - ) - } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/icAnonymousTypes/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/icAnonymousTypes/build.gradle index e45c08a0011..e106e5da8c1 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/icAnonymousTypes/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/icAnonymousTypes/build.gradle @@ -47,5 +47,4 @@ repositories { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - kapt "com.android.databinding:compiler:$android_tools_version" } \ No newline at end of file