Skip to content

Commit 8d69150

Browse files
committed
Select Kotlin test src root by default when generating for Kotlin
1 parent 1ab8f2c commit 8d69150

File tree

4 files changed

+35
-7
lines changed

4 files changed

+35
-7
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.intellij.openapi.vfs.VirtualFile
1818
import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile
1919
import com.intellij.psi.PsiClass
2020
import com.intellij.refactoring.util.classMembers.MemberInfo
21+
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
2122
import org.jetbrains.kotlin.idea.core.getPackage
2223
import org.utbot.framework.plugin.api.JavaDocCommentStyle
2324
import org.utbot.framework.util.ConflictTriggers
@@ -55,13 +56,14 @@ data class GenerateTestsModel(
5556
?: error("Could not find module for $newTestSourceRoot")
5657
}
5758

59+
var codegenLanguage = if (srcClasses.all { it is KtUltraLightClass }) CodegenLanguage.KOTLIN else CodegenLanguage.JAVA
60+
5861
var testPackageName: String? = null
5962
lateinit var testFramework: TestFramework
6063
lateinit var mockStrategy: MockStrategyApi
6164
lateinit var mockFramework: MockFramework
6265
lateinit var staticsMocking: StaticsMocking
6366
lateinit var parametrizedTestSource: ParametrizedTestSource
64-
lateinit var codegenLanguage: CodegenLanguage
6567
lateinit var runtimeExceptionTestsBehaviour: RuntimeExceptionTestsBehaviour
6668
lateinit var hangingTestsTimeout: HangingTestsTimeout
6769
lateinit var forceStaticMocking: ForceStaticMocking

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ import javax.swing.JPanel
9393
import kotlin.streams.toList
9494
import org.jetbrains.concurrency.Promise
9595
import org.jetbrains.concurrency.thenRun
96-
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
9796
import org.utbot.common.PathUtil.toPath
9897
import org.utbot.framework.UtSettings
9998
import org.utbot.framework.codegen.ForceStaticMocking
@@ -636,8 +635,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
636635
mockStrategies.isEnabled = areMocksSupported
637636
staticsMocking.isEnabled = areMocksSupported && mockStrategies.item != MockStrategyApi.NO_MOCKS
638637

639-
codegenLanguages.item =
640-
if (model.srcClasses.all { it is KtUltraLightClass }) CodegenLanguage.KOTLIN else CodegenLanguage.JAVA
638+
codegenLanguages.item = model.codegenLanguage
641639

642640
val installedTestFramework = TestFramework.allItems.singleOrNull { it.isInstalled }
643641
currentFrameworkItem = when (parametrizedTestSources.isSelected) {

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/components/TestFolderComboWithBrowseButton.kt

+12-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import javax.swing.DefaultComboBoxModel
1818
import javax.swing.JList
1919
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
2020
import org.utbot.common.PathUtil
21+
import org.utbot.framework.plugin.api.CodegenLanguage
2122
import org.utbot.intellij.plugin.models.GenerateTestsModel
2223
import org.utbot.intellij.plugin.ui.utils.addDedicatedTestRoot
2324
import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle
@@ -58,7 +59,17 @@ class TestFolderComboWithBrowseButton(private val model: GenerateTestsModel) :
5859
val suggestedModules =
5960
if (model.project.isBuildWithGradle) model.project.allModules() else model.potentialTestModules
6061

61-
val testRoots = suggestedModules.flatMap { it.suitableTestSourceRoots().toList() }.toMutableList()
62+
val testRootsByLanguage = CodegenLanguage.allItems.associateWith { language ->
63+
suggestedModules.flatMap { module ->
64+
module.suitableTestSourceRoots(language)
65+
}
66+
}
67+
68+
// testRoots for default codegen language should go before other testRoots (this impacts default-selected test root item)
69+
val testRoots = with (testRootsByLanguage.entries) {
70+
filter { it.key == model.codegenLanguage } + filter { it.key != model.codegenLanguage }
71+
}.flatMap { it.value }.toMutableList()
72+
6273
// this method is blocked for Gradle, where multiple test modules can exist
6374
model.testModule.addDedicatedTestRoot(testRoots)
6475

@@ -95,7 +106,6 @@ class TestFolderComboWithBrowseButton(private val model: GenerateTestsModel) :
95106
}
96107

97108
private fun configureRootsCombo(testRoots: List<VirtualFile>) {
98-
// unfortunately, Gradle creates Kotlin test source root with Java source root type, so type is misleading
99109
val selectedRoot = testRoots.first()
100110

101111
// do not update model.testModule here, because fake test source root could have been chosen

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/ModuleUtils.kt

+19-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,8 @@ private fun Module.suitableTestSourceFolders(codegenLanguage: CodegenLanguage):
145145

146146
return sourceFolders
147147
.filterNot { it.isForGeneratedSources() }
148-
.filter { it.rootType == codegenLanguage.testRootType() }
148+
.filter { it.isTestSource }
149+
.filter { it.expectedLanguageForTests == codegenLanguage }
149150
// Heuristics: User is more likely to choose the shorter path
150151
.sortedBy { it.url.length }
151152
}
@@ -275,3 +276,20 @@ private fun jdkVersionBy(sdk: Sdk?): JavaSdkVersion {
275276
}
276277
return jdkVersion
277278
}
279+
280+
private val SourceFolder.expectedLanguageForTests: CodegenLanguage?
281+
get() {
282+
// unfortunately, Gradle creates Kotlin test source root with Java source root type, so type is misleading,
283+
// and we should try looking for name first
284+
if (file?.name == "kotlin")
285+
return CodegenLanguage.KOTLIN
286+
287+
if (file?.name == "java")
288+
return CodegenLanguage.JAVA
289+
290+
return when (rootType) {
291+
CodegenLanguage.KOTLIN.testRootType() -> CodegenLanguage.KOTLIN
292+
CodegenLanguage.JAVA.testRootType() -> CodegenLanguage.JAVA
293+
else -> null
294+
}
295+
}

0 commit comments

Comments
 (0)