Make mpp tests gutters aware of different platforms run
Behaviour is similar to the test suite gutters: - simple triangle when there is no history - triangle + red circle if some runs failed - triangle + green circle if all runs passed ^KMM-100 Fixed.
This commit is contained in:
+11
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2020 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.
|
||||
*/
|
||||
|
||||
@@ -16,9 +16,12 @@ import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
||||
import org.jetbrains.kotlin.idea.framework.CommonStandardLibraryDescription
|
||||
import org.jetbrains.kotlin.idea.framework.getCommonRuntimeLibraryVersion
|
||||
import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling
|
||||
import org.jetbrains.kotlin.idea.platform.isCompatibleWith
|
||||
import org.jetbrains.kotlin.idea.platform.tooling
|
||||
import org.jetbrains.kotlin.idea.project.platform
|
||||
import org.jetbrains.kotlin.idea.util.module
|
||||
import org.jetbrains.kotlin.platform.SimplePlatform
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.idePlatformKind
|
||||
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
||||
import org.jetbrains.kotlin.platform.impl.isCommon
|
||||
@@ -45,9 +48,14 @@ object CommonIdePlatformKindTooling : IdePlatformKindTooling() {
|
||||
return ::getCommonRuntimeLibraryVersion
|
||||
}
|
||||
|
||||
override fun getTestIcon(declaration: KtNamedDeclaration, descriptor: DeclarationDescriptor): Icon? {
|
||||
val icons = getInstances()
|
||||
private fun getRelevantToolings(platform: TargetPlatform?): List<IdePlatformKindTooling> {
|
||||
return getInstances()
|
||||
.filter { it != this }
|
||||
.filter { platform == null || it.kind.isCompatibleWith(platform) }
|
||||
}
|
||||
|
||||
override fun getTestIcon(declaration: KtNamedDeclaration, descriptor: DeclarationDescriptor): Icon? {
|
||||
val icons = getRelevantToolings(declaration.module?.platform)
|
||||
.mapNotNull { it.getTestIcon(declaration, descriptor) }
|
||||
.distinct()
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2020 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.
|
||||
*/
|
||||
|
||||
@@ -9,6 +9,8 @@ import com.intellij.codeInsight.TestFrameworks
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.roots.libraries.PersistentLibraryKind
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.testIntegration.TestFramework
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.asJava.toLightMethods
|
||||
@@ -19,6 +21,7 @@ import org.jetbrains.kotlin.idea.framework.JavaRuntimeDetectionUtil
|
||||
import org.jetbrains.kotlin.idea.framework.JavaRuntimeLibraryDescription
|
||||
import org.jetbrains.kotlin.idea.highlighter.KotlinTestRunLineMarkerContributor.Companion.getTestStateIcon
|
||||
import org.jetbrains.kotlin.idea.platform.IdePlatformKindTooling
|
||||
import org.jetbrains.kotlin.idea.platform.isKotlinTestDeclaration
|
||||
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFunction
|
||||
@@ -51,28 +54,41 @@ class JvmIdePlatformKindTooling : IdePlatformKindTooling() {
|
||||
}
|
||||
|
||||
override fun getTestIcon(declaration: KtNamedDeclaration, descriptor: DeclarationDescriptor): Icon? {
|
||||
val (url, framework) = when (declaration) {
|
||||
val (urls, framework) = when (declaration) {
|
||||
is KtClassOrObject -> {
|
||||
val lightClass = declaration.toLightClass() ?: return null
|
||||
val framework = TestFrameworks.detectFramework(lightClass) ?: return null
|
||||
if (!framework.isTestClass(lightClass)) return null
|
||||
val qualifiedName = lightClass.qualifiedName ?: return null
|
||||
|
||||
"java:suite://$qualifiedName" to framework
|
||||
val framework = TestFrameworks.detectFramework(lightClass)
|
||||
if (framework?.isTestClass(lightClass) == false) {
|
||||
return null
|
||||
}
|
||||
listOf("java:suite://${lightClass.qualifiedName}") to framework
|
||||
}
|
||||
|
||||
is KtNamedFunction -> {
|
||||
val lightMethod = declaration.toLightMethods().firstOrNull() ?: return null
|
||||
val lightClass = lightMethod.containingClass as? KtLightClass ?: return null
|
||||
val framework = TestFrameworks.detectFramework(lightClass) ?: return null
|
||||
if (!framework.isTestMethod(lightMethod, /*checkAbstract = */ false)) return null
|
||||
|
||||
"java:test://${lightClass.qualifiedName}/${lightMethod.name}" to framework
|
||||
val framework = TestFrameworks.detectFramework(lightClass)
|
||||
if (framework?.isTestMethod(lightMethod, false) == false) {
|
||||
return null
|
||||
}
|
||||
listOf(
|
||||
"java:test://${lightClass.qualifiedName}/${lightMethod.name}",
|
||||
"java:test://${lightClass.qualifiedName}.${lightMethod.name}"
|
||||
) to framework
|
||||
}
|
||||
|
||||
else -> return null
|
||||
}
|
||||
return getTestStateIcon(url, declaration.project, strict = false) ?: framework.icon
|
||||
|
||||
if (framework != null) {
|
||||
return getTestStateIcon(urls, declaration.project, strict = false, framework.icon)
|
||||
}
|
||||
|
||||
if (!descriptor.isKotlinTestDeclaration()) {
|
||||
return null
|
||||
}
|
||||
|
||||
return getTestStateIcon(urls, declaration.project, strict = false)
|
||||
}
|
||||
|
||||
override fun acceptsAsEntryPoint(function: KtFunction) = true
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2020 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.
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,16 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.idea.highlighter.KotlinTestRunLineMarkerContributor.Companion.getTestStateIcon
|
||||
import org.jetbrains.kotlin.idea.util.string.joinWithEscape
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.platform.IdePlatformKind
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.has
|
||||
import org.jetbrains.kotlin.platform.impl.CommonIdePlatformKind
|
||||
import org.jetbrains.kotlin.platform.impl.JsIdePlatformKind
|
||||
import org.jetbrains.kotlin.platform.impl.JvmIdePlatformKind
|
||||
import org.jetbrains.kotlin.platform.impl.NativeIdePlatformKind
|
||||
import org.jetbrains.kotlin.platform.js.JsPlatform
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatform
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatform
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
@@ -43,10 +53,8 @@ fun getGenericTestIcon(declaration: KtNamedDeclaration, descriptor: DeclarationD
|
||||
|
||||
val prefix = if (testName != null) "test://" else "suite://"
|
||||
val url = prefix + locations.joinWithEscape('.')
|
||||
val javaUrl = "java:$url"
|
||||
|
||||
val project = declaration.project
|
||||
return getTestStateIcon(javaUrl, project, strict = true) ?: getTestStateIcon(url, project, strict = false)
|
||||
return getTestStateIcon(listOf("java:$url", url), declaration.project, strict = false)
|
||||
}
|
||||
|
||||
private tailrec fun DeclarationDescriptor.isIgnored(): Boolean {
|
||||
@@ -69,4 +77,14 @@ fun DeclarationDescriptor.isKotlinTestDeclaration(): Boolean {
|
||||
|
||||
val classDescriptor = this as? ClassDescriptorWithResolutionScopes ?: return false
|
||||
return classDescriptor.declaredCallableMembers.any { it.isKotlinTestDeclaration() }
|
||||
}
|
||||
|
||||
internal fun IdePlatformKind<*>.isCompatibleWith(platform: TargetPlatform): Boolean {
|
||||
return when (this) {
|
||||
is JvmIdePlatformKind -> platform.has(JvmPlatform::class)
|
||||
is NativeIdePlatformKind -> platform.has(NativePlatform::class)
|
||||
is JsIdePlatformKind -> platform.has(JsPlatform::class)
|
||||
is CommonIdePlatformKind -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user