Fix JVM test running in MPP projects (KT-30814)
This commit is contained in:
+5
-6
@@ -15,6 +15,7 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.util.CachedValueProvider
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
||||
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION
|
||||
import org.jetbrains.kotlin.idea.caches.project.SourceType.TEST
|
||||
@@ -36,12 +37,10 @@ val Module.sourceType: SourceType?
|
||||
get() = facetSettings?.isTestModule?.let { isTest -> if (isTest) SourceType.TEST else PRODUCTION }
|
||||
|
||||
val Module.isMPPModule: Boolean
|
||||
get() {
|
||||
val settings = facetSettings ?: return false
|
||||
return settings.targetPlatform.isCommon() ||
|
||||
settings.implementedModuleNames.isNotEmpty() ||
|
||||
settings.kind.isNewMPP
|
||||
}
|
||||
get() = facetSettings?.isMPPModule ?: false
|
||||
|
||||
val KotlinFacetSettings.isMPPModule: Boolean
|
||||
get() = targetPlatform.isCommon() || implementedModuleNames.isNotEmpty() || kind.isNewMPP
|
||||
|
||||
private val Module.facetSettings get() = KotlinFacet.get(this)?.configuration?.settings
|
||||
|
||||
|
||||
+4
-4
@@ -11,8 +11,8 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
|
||||
import com.intellij.openapi.module.Module
|
||||
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
||||
import org.jetbrains.kotlin.idea.caches.project.isMPPModule
|
||||
import org.jetbrains.kotlin.idea.configuration.KotlinTargetData
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider
|
||||
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||
@@ -26,7 +26,7 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider {
|
||||
}
|
||||
|
||||
override fun getTasks(module: Module): List<String> {
|
||||
if (!isTestCommonModule(module)) {
|
||||
if (!isMultiplatformTestModule(module)) {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
@@ -49,9 +49,9 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider {
|
||||
.flatMap { getTaskNames(it.data, taskNamePrefix) }
|
||||
}
|
||||
|
||||
private fun isTestCommonModule(module: Module): Boolean {
|
||||
private fun isMultiplatformTestModule(module: Module): Boolean {
|
||||
val settings = KotlinFacetSettingsProvider.getInstance(module.project).getInitializedSettings(module)
|
||||
return settings.targetPlatform.isCommon() && settings.isTestModule
|
||||
return settings.isMPPModule && settings.isTestModule
|
||||
}
|
||||
|
||||
private fun getTaskNames(task: TaskData, namePrefix: String): List<String> {
|
||||
|
||||
+45
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
import com.intellij.openapi.roots.*
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootType
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.kotlin.config.*
|
||||
@@ -15,6 +17,7 @@ import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestRunConfigurationProducer
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
@@ -353,6 +356,48 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testTestTasks() {
|
||||
val files = configureByFiles()
|
||||
importProject()
|
||||
|
||||
checkProjectStructure(exhaustiveSourceSourceRootList = false) {
|
||||
module("project")
|
||||
module("common")
|
||||
module("jvm")
|
||||
module("js")
|
||||
|
||||
module("project_commonMain")
|
||||
module("project_commonTest") {
|
||||
moduleDependency("project_commonMain", DependencyScope.TEST)
|
||||
}
|
||||
|
||||
module("project_jvmMain") {
|
||||
moduleDependency("project_commonMain", DependencyScope.COMPILE)
|
||||
}
|
||||
|
||||
module("project_jvmTest") {
|
||||
moduleDependency("project_commonMain", DependencyScope.TEST)
|
||||
moduleDependency("project_commonTest", DependencyScope.TEST)
|
||||
moduleDependency("project_jvmMain", DependencyScope.TEST)
|
||||
}
|
||||
}
|
||||
|
||||
fun findTasksToRun(file: VirtualFile): List<String> {
|
||||
return GradleTestRunConfigurationProducer.findAllTestsTaskToRun(file, myProject)
|
||||
.flatMap { it.tasks }
|
||||
.sorted()
|
||||
}
|
||||
|
||||
val commonTestFile = files.find { it.path.contains("commonTest") }!!
|
||||
val commonTasks = findTasksToRun(commonTestFile)
|
||||
assertEquals(listOf(":cleanJvmTest", ":jvmTest"), commonTasks)
|
||||
|
||||
val jvmTestFile = files.find { it.path.contains("jvmTest") }!!
|
||||
val jvmTasks = findTasksToRun(jvmTestFile)
|
||||
assertEquals(listOf(":cleanJvmTest", ":jvmTest"), jvmTasks)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDependencyOnRoot() {
|
||||
configureByFiles()
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
apply from: "include.gradle"
|
||||
def kotlinVersion = gradleKotlinPluginVersion('1.3.20')
|
||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'kotlin-multiplatform'
|
||||
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' }
|
||||
}
|
||||
|
||||
kotlin {
|
||||
targets {
|
||||
fromPreset(presets.jvm, 'jvm')
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
include ':common', ':jvm', ':js'
|
||||
Reference in New Issue
Block a user