[Gradle] Test for Project's collection mutation after evaluation
Mutating projects data, particularly, adding new items to its collections such as tasks, configurations and components is a potential risk to lose these data during the import to IDE. ^KT-62877 In Progress
This commit is contained in:
committed by
Space Team
parent
36d1622276
commit
6bb33cc8bc
+63
@@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("FunctionName")
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.regressionTests
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||||
|
import org.jetbrains.kotlin.gradle.util.enableCInteropCommonization
|
||||||
|
import org.jetbrains.kotlin.gradle.util.kotlin
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
|
class KT62877ProjectMutationAfterEvaluation {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test multiplatform project's collections can't be mutated after evaluation`() {
|
||||||
|
val project = buildProjectWithMPP {
|
||||||
|
kotlin {
|
||||||
|
jvm()
|
||||||
|
linuxX64(); linuxArm64()
|
||||||
|
iosX64(); iosArm64()
|
||||||
|
|
||||||
|
targets.filterIsInstance<KotlinNativeTarget>().forEach { target ->
|
||||||
|
target.compilations.getByName("main").cinterops.create("foo")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
project.enableCInteropCommonization()
|
||||||
|
project.repositories.mavenLocal()
|
||||||
|
project.repositories.mavenCentralCacheRedirector()
|
||||||
|
|
||||||
|
project.evaluate()
|
||||||
|
|
||||||
|
val domainObjectCollectionsToCheck = listOf(
|
||||||
|
project.configurations,
|
||||||
|
project.tasks,
|
||||||
|
project.components,
|
||||||
|
)
|
||||||
|
|
||||||
|
// Collect names before task initialization
|
||||||
|
val namesBefore = domainObjectCollectionsToCheck.associateWith { it.names.toSet() }
|
||||||
|
|
||||||
|
// Now initialize tasks
|
||||||
|
val taskNames = project.tasks.names.toMutableSet()
|
||||||
|
taskNames.remove("init") // initializing the init task isn't possible due to Gradle reasons
|
||||||
|
taskNames.map { project.tasks.getByName(it) }
|
||||||
|
|
||||||
|
// And resolve IDE dependencies
|
||||||
|
project.kotlinIdeMultiplatformImport.resolveDependencies("commonMain")
|
||||||
|
|
||||||
|
// Compare names after
|
||||||
|
val namesAfter = domainObjectCollectionsToCheck.associateWith { it.names.toSet() }
|
||||||
|
|
||||||
|
assertEquals(namesBefore, namesAfter)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user