diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/MultiplatformResourcesDependencyIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/MultiplatformResourcesDependencyIT.kt new file mode 100644 index 00000000000..f76f198b472 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/MultiplatformResourcesDependencyIT.kt @@ -0,0 +1,90 @@ +/* + * Copyright 2010-2024 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.mpp.resources + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.testbase.* +import org.jetbrains.kotlin.konan.target.HostManager +import org.junit.jupiter.api.DisplayName +import java.nio.file.Path + +@MppGradlePluginTests +@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_73) +@DisplayName("Test consumption of dependencies with multiplatform resources in a regular project") +class MultiplatformResourcesDependencyIT : KGPBaseTest() { + + @DisplayName("Assembling a project with a project dependency and published dependency with multiplatform resources") + @GradleAndroidTest + fun test( + gradleVersion: GradleVersion, + androidVersion: String, + providedJdk: JdkVersions.ProvidedJdk, + ) { + publishAndPrepareDependencyProjects( + gradleVersion, + providedJdk, + androidVersion, + ) { localRepoDir -> + project( + "multiplatformResources/dependency", + gradleVersion, + buildJdk = providedJdk.location, + localRepoDir = localRepoDir, + ) { + includeOtherProjectAsSubmodule( + "multiplatformResources/publication", + newSubmoduleName = "project", + isKts = true, + ) + buildWithAGPVersion( + "assemble", + androidVersion = androidVersion, + defaultBuildOptions = defaultBuildOptions, + ) { + assertTasksExecuted( + ":compileKotlinJvm", + ":compileKotlinLinuxX64", + ":compileKotlinWasmJs", + ":compileKotlinWasmWasi", + ":project:compileKotlinJvm", + ":project:compileKotlinLinuxX64", + ":project:compileKotlinWasmJs", + ":project:compileKotlinWasmWasi", + ) + if (HostManager.host.family.isAppleFamily) { + assertTasksExecuted( + ":compileKotlinIosArm64", + ":compileKotlinIosSimulatorArm64", + ":project:compileKotlinIosArm64", + ":project:compileKotlinIosSimulatorArm64", + ) + } + } + } + } + } + + private fun publishAndPrepareDependencyProjects( + gradleVersion: GradleVersion, + providedJdk: JdkVersions.ProvidedJdk, + androidVersion: String, + withRepositoryRoot: (Path) -> (Unit), + ) { + project( + "multiplatformResources/publication", + gradleVersion, + buildJdk = providedJdk.location, + ) { + buildWithAGPVersion( + ":publishAllPublicationsToMavenRepository", + androidVersion, + defaultBuildOptions, + ) + withRepositoryRoot(projectPath.resolve("build/repo")) + } + } + +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/multiplatformResourcesITUtils.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/multiplatformResourcesITUtils.kt index 27a5eb672f4..42bfd0aca17 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/multiplatformResourcesITUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/resources/multiplatformResourcesITUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.mpp.resources +import org.gradle.testkit.runner.BuildResult import org.jetbrains.kotlin.gradle.testbase.BuildOptions import org.jetbrains.kotlin.gradle.testbase.TestProject import org.jetbrains.kotlin.gradle.testbase.build @@ -18,10 +19,12 @@ fun TestProject.buildWithAGPVersion( task: String, androidVersion: String, defaultBuildOptions: BuildOptions, + assertions: BuildResult.() -> Unit = {}, ) { build( task, - buildOptions = defaultBuildOptions.copy(androidVersion = androidVersion) + buildOptions = defaultBuildOptions.copy(androidVersion = androidVersion), + assertions = assertions, ) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/build.gradle.kts new file mode 100644 index 00000000000..008143c5297 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/build.gradle.kts @@ -0,0 +1,52 @@ +@file:OptIn(ComposeKotlinGradlePluginApi::class) + +import org.gradle.api.provider.Provider +import org.jetbrains.kotlin.gradle.ComposeKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.resources.KotlinTargetResourcesPublication +import java.io.File + +group = "test" +version = "1.0" + +plugins { + kotlin("multiplatform") + id("com.android.application") +} + +repositories { + google() + mavenCentral() + mavenLocal() +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + compilations.all { + kotlinOptions.jvmTarget = "1.8" + } + } + jvm() + linuxX64() + wasmJs() + wasmWasi() + iosArm64() + iosSimulatorArm64() + + sourceSets.commonMain { + dependencies { + implementation("test:publication:+") + implementation(project(":project")) + } + } +} + +android { + namespace = "test.dependency" + compileSdk = 34 + defaultConfig { + minSdk = 24 + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/src/androidMain/AndroidManifest.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000000..56637a1035c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/src/androidMain/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/src/commonMain/kotlin/stub.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/src/commonMain/kotlin/stub.kt new file mode 100644 index 00000000000..53a34b15d56 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/multiplatformResources/dependency/src/commonMain/kotlin/stub.kt @@ -0,0 +1 @@ +package dependency \ No newline at end of file