Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e68a3c9

Browse files
committedOct 10, 2022
Select Kotlin test src root by default when generating for Kotlin
1 parent dc586fa commit e68a3c9

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
@@ -19,6 +19,7 @@ import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile
1919
import com.intellij.psi.PsiClass
2020
import com.intellij.psi.PsiJavaFile
2121
import com.intellij.refactoring.util.classMembers.MemberInfo
22+
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
2223
import org.jetbrains.kotlin.psi.KtFile
2324
import org.utbot.framework.plugin.api.JavaDocCommentStyle
2425
import org.utbot.framework.util.ConflictTriggers
@@ -56,13 +57,14 @@ data class GenerateTestsModel(
5657
?: error("Could not find module for $newTestSourceRoot")
5758
}
5859

60+
var codegenLanguage = if (srcClasses.all { it is KtUltraLightClass }) CodegenLanguage.KOTLIN else CodegenLanguage.JAVA
61+
5962
var testPackageName: String? = null
6063
lateinit var testFramework: TestFramework
6164
lateinit var mockStrategy: MockStrategyApi
6265
lateinit var mockFramework: MockFramework
6366
lateinit var staticsMocking: StaticsMocking
6467
lateinit var parametrizedTestSource: ParametrizedTestSource
65-
lateinit var codegenLanguage: CodegenLanguage
6668
lateinit var runtimeExceptionTestsBehaviour: RuntimeExceptionTestsBehaviour
6769
lateinit var hangingTestsTimeout: HangingTestsTimeout
6870
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
@@ -95,7 +95,6 @@ import javax.swing.JSpinner
9595
import javax.swing.text.DefaultFormatter
9696
import org.jetbrains.concurrency.Promise
9797
import org.jetbrains.concurrency.thenRun
98-
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
9998
import org.utbot.common.PathUtil.toPath
10099
import org.utbot.framework.UtSettings
101100
import org.utbot.framework.codegen.ForceStaticMocking
@@ -651,8 +650,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
651650
mockStrategies.isEnabled = areMocksSupported
652651
staticsMocking.isEnabled = areMocksSupported && mockStrategies.item != MockStrategyApi.NO_MOCKS
653652

654-
codegenLanguages.item =
655-
if (model.srcClasses.all { it is KtUltraLightClass }) CodegenLanguage.KOTLIN else CodegenLanguage.JAVA
653+
codegenLanguages.item = model.codegenLanguage
656654

657655
val installedTestFramework = TestFramework.allItems.singleOrNull { it.isInstalled }
658656
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)
Please sign in to comment.