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 com.intellij.psi.util.CachedValueProvider
|
||||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||||
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
||||||
|
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION
|
import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION
|
||||||
import org.jetbrains.kotlin.idea.caches.project.SourceType.TEST
|
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 }
|
get() = facetSettings?.isTestModule?.let { isTest -> if (isTest) SourceType.TEST else PRODUCTION }
|
||||||
|
|
||||||
val Module.isMPPModule: Boolean
|
val Module.isMPPModule: Boolean
|
||||||
get() {
|
get() = facetSettings?.isMPPModule ?: false
|
||||||
val settings = facetSettings ?: return false
|
|
||||||
return settings.targetPlatform.isCommon() ||
|
val KotlinFacetSettings.isMPPModule: Boolean
|
||||||
settings.implementedModuleNames.isNotEmpty() ||
|
get() = targetPlatform.isCommon() || implementedModuleNames.isNotEmpty() || kind.isNewMPP
|
||||||
settings.kind.isNewMPP
|
|
||||||
}
|
|
||||||
|
|
||||||
private val Module.facetSettings get() = KotlinFacet.get(this)?.configuration?.settings
|
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.externalSystem.util.ExternalSystemUtil
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
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.idea.configuration.KotlinTargetData
|
||||||
import org.jetbrains.kotlin.platform.isCommon
|
|
||||||
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider
|
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestTasksProvider
|
||||||
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil
|
import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil
|
||||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||||
@@ -26,7 +26,7 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getTasks(module: Module): List<String> {
|
override fun getTasks(module: Module): List<String> {
|
||||||
if (!isTestCommonModule(module)) {
|
if (!isMultiplatformTestModule(module)) {
|
||||||
return emptyList()
|
return emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,9 +49,9 @@ class KotlinMPPGradleTestTasksProvider : GradleTestTasksProvider {
|
|||||||
.flatMap { getTaskNames(it.data, taskNamePrefix) }
|
.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)
|
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> {
|
private fun getTaskNames(task: TaskData, namePrefix: String): List<String> {
|
||||||
|
|||||||
+45
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.gradle
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
import com.intellij.openapi.roots.*
|
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.JavaResourceRootType
|
||||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||||
import org.jetbrains.kotlin.config.*
|
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.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestRunConfigurationProducer
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
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
|
@Test
|
||||||
fun testDependencyOnRoot() {
|
fun testDependencyOnRoot() {
|
||||||
configureByFiles()
|
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