[Kotlin, Wasm] Add test icons for Kotlin Wasm tests

^KTIJ-34663 fixed

GitOrigin-RevId: c163c30075d30372a7ed8768912b763f0119b63f
This commit is contained in:
Ilya Goncharov
2025-09-15 13:01:05 +00:00
committed by intellij-monorepo-bot
parent 47e8bd16ae
commit 0dab7529c5
6 changed files with 90 additions and 1 deletions
@@ -1,6 +1,8 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.base.codeInsight.tooling
import com.intellij.execution.actions.RunConfigurationProducer
import com.intellij.util.SmartList
import org.jetbrains.kotlin.idea.base.platforms.KotlinWasmJsLibraryKind
import org.jetbrains.kotlin.idea.base.platforms.KotlinWasmWasiLibraryKind
import org.jetbrains.kotlin.idea.projectModel.KotlinPlatform
@@ -10,6 +12,8 @@ import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtNamedDeclaration
import javax.swing.Icon
interface KotlinWasmRunConfigurationDataProvider
abstract class AbstractWasmIdePlatformKindTooling : IdePlatformKindTooling() {
override val mavenLibraryIds: List<String> get() = emptyList<String>()
@@ -18,7 +22,28 @@ abstract class AbstractWasmIdePlatformKindTooling : IdePlatformKindTooling() {
override fun acceptsAsEntryPoint(function: KtFunction): Boolean = false
override fun getTestIcon(declaration: KtNamedDeclaration, allowSlowOperations: Boolean): Icon? = null
override fun getTestIcon(declaration: KtNamedDeclaration, allowSlowOperations: Boolean): Icon? {
if (!allowSlowOperations) {
return null
}
val initialLocations = computeInitialIconLocations(declaration) ?: return null
return testIconProvider.getGenericTestIcon(declaration, initialLocations)
}
private fun computeInitialIconLocations(declaration: KtNamedDeclaration): List<String>? {
val hasWasmConfigurationProviders = RunConfigurationProducer
.getProducers(declaration.project)
.asSequence()
.filterIsInstance<KotlinWasmRunConfigurationDataProvider>()
.any()
if (!hasWasmConfigurationProviders) return null
val location = declaration.containingKtFile.packageFqName.asString()
return SmartList(location)
}
}
abstract class AbstractWasmJsIdePlatformKindTooling : AbstractWasmIdePlatformKindTooling() {
@@ -92,6 +92,10 @@
id="kotlinGradleTaskRunLineMarkerProvider" language="kotlin"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.js.KotlinMultiplatformJsTestClassGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.js.KotlinMultiplatformJsTestMethodGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.wasm.KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.wasm.KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.wasm.KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.wasm.KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.native.KotlinMultiplatformNativeTestClassGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.native.KotlinMultiplatformNativeTestMethodGradleConfigurationProducer"/>
<runConfigurationProducer implementation="org.jetbrains.kotlin.idea.gradleJava.testing.common.KotlinMultiplatformCommonTestClassGradleConfigurationProducer"/>
@@ -0,0 +1,16 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.idea.gradleJava.testing.wasm
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestClassGradleConfigurationProducer
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.wasm.isWasmJs
class KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer
: AbstractKotlinMultiplatformTestClassGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider {
override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmJs()
override val hasTestFramework get() = true
}
@@ -0,0 +1,14 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.idea.gradleJava.testing.wasm
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.wasm.isWasmJs
class KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer
: AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider {
override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmJs()
}
@@ -0,0 +1,16 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.idea.gradleJava.testing.wasm
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestClassGradleConfigurationProducer
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.wasm.isWasmWasi
class KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer
: AbstractKotlinMultiplatformTestClassGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider {
override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmWasi()
override val hasTestFramework get() = true
}
@@ -0,0 +1,14 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.kotlin.idea.gradleJava.testing.wasm
import com.intellij.openapi.module.Module
import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider
import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.wasm.isWasmWasi
class KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer
: AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider {
override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmWasi()
}