diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/AssembleHierarchicalResourcesTaskTests.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/AssembleHierarchicalResourcesTaskTests.kt index 0a3f115f74a..f421c45306b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/AssembleHierarchicalResourcesTaskTests.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/AssembleHierarchicalResourcesTaskTests.kt @@ -14,9 +14,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.resources.AssembleHierarchicalReso import org.jetbrains.kotlin.gradle.plugin.mpp.resources.KotlinTargetResourcesPublication import org.jetbrains.kotlin.gradle.plugin.mpp.resources.KotlinTargetResourcesPublicationImpl import org.jetbrains.kotlin.gradle.plugin.mpp.resources.registerAssembleHierarchicalResourcesTaskProvider +import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.util.assertContainsDiagnostic -import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP -import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest import org.junit.Test import java.io.File import kotlin.test.assertEquals @@ -118,6 +117,83 @@ class AssembleHierarchicalResourcesTaskTests { } } + @Test + fun `test copying order - with android library - with agp source sets`() { + with(buildProjectWithMPP()) { + androidLibrary { compileSdk = 31 } + val kotlin = multiplatformExtension + val androidTarget = kotlin.androidTarget() + + evaluate() + + assertEquals( + listOf( + listOf("commonMain"), + listOf("androidDebug", "androidMain") + ), + resourceDirectoriesCopyingOrder(androidTarget.compilations.getByName("debug")) + ) + assertEquals( + listOf( + listOf("commonMain"), + listOf("androidMain", "androidRelease") + ), + resourceDirectoriesCopyingOrder(androidTarget.compilations.getByName("release")) + ) + } + } + + @Test + fun `test copying order - with android library - with flavors and agp source sets`() { + with(buildProjectWithMPP()) { + androidLibrary { + compileSdk = 31 + flavorDimensions += "version" + productFlavors { + create("demo") { + it.dimension = "version" + } + create("full") { + it.dimension = "version" + } + } + } + val kotlin = multiplatformExtension + val androidTarget = kotlin.androidTarget() + + evaluate() + + assertEquals( + listOf( + listOf("commonMain"), + listOf("androidDebug", "androidFull", "androidFullDebug", "androidMain"), + ), + resourceDirectoriesCopyingOrder(androidTarget.compilations.getByName("fullDebug")) + ) + assertEquals( + listOf( + listOf("commonMain"), + listOf("androidFull", "androidFullRelease", "androidMain", "androidRelease"), + ), + resourceDirectoriesCopyingOrder(androidTarget.compilations.getByName("fullRelease")) + ) + assertEquals( + listOf( + listOf("commonMain"), + listOf("androidDebug", "androidDemo", "androidDemoDebug", "androidMain"), + ), + resourceDirectoriesCopyingOrder(androidTarget.compilations.getByName("demoDebug")) + ) + assertEquals( + listOf( + listOf("commonMain"), + listOf("androidDemo", "androidDemoRelease", "androidMain", "androidRelease"), + ), + resourceDirectoriesCopyingOrder(androidTarget.compilations.getByName("demoRelease")) + ) + } + } + private fun Project.resourceDirectoriesCopyingOrder( compilation: KotlinCompilation<*>, ): List> { @@ -130,7 +206,7 @@ class AssembleHierarchicalResourcesTaskTests { private fun Project.registerFakeResourcesTask(compilation: KotlinCompilation<*>): TaskProvider { return compilation.registerAssembleHierarchicalResourcesTaskProvider( - "test", + "test${compilation.name}", resources = KotlinTargetResourcesPublicationImpl.TargetResources( { ss -> KotlinTargetResourcesPublication.ResourceRoot( diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidDependsOnEdgesTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidDependsOnEdgesTest.kt index 590c54b7695..28890c2f367 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidDependsOnEdgesTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidDependsOnEdgesTest.kt @@ -10,10 +10,16 @@ package org.jetbrains.kotlin.gradle.unitTests import com.android.build.gradle.LibraryExtension import org.gradle.api.internal.project.ProjectInternal import org.gradle.testfixtures.ProjectBuilder +import org.jetbrains.kotlin.cfg.pseudocode.and import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.util.addBuildEventsListenerRegistryMock +import org.jetbrains.kotlin.gradle.util.androidLibrary +import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP +import org.jetbrains.kotlin.gradle.util.kotlin +import org.jetbrains.kotlin.tooling.core.withClosure import kotlin.test.Test import kotlin.test.assertEquals @@ -108,6 +114,40 @@ class KotlinAndroidDependsOnEdgesTest { ) } + @Test + fun `dependsOn closure for android source sets`() { + val project = buildProjectWithMPP { + androidLibrary { + compileSdk = 31 + } + kotlin { + androidTarget() + } + }.evaluate() + + val androidCompilations = project.multiplatformExtension.androidTarget().compilations + + assertEquals( + listOf( + "androidDebug", + "androidMain", + "commonMain", + ), + androidCompilations.getByName("debug").kotlinSourceSets + .withClosure { sourceSet: KotlinSourceSet -> sourceSet.dependsOn } + .map { it.name }, + ) + assertEquals( + listOf( + "androidDebug", + "commonMain", + ), + androidCompilations.getByName("debug").defaultSourceSet + .withClosure { sourceSet: KotlinSourceSet -> sourceSet.dependsOn } + .map { it.name }, + ) + } + private fun createProject() = ProjectBuilder.builder().build() .also { addBuildEventsListenerRegistryMock(it) }