diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt index ea62f8a914..4b4d1a1992 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt @@ -123,6 +123,7 @@ import javax.swing.JList import javax.swing.JPanel import kotlin.streams.toList import org.jetbrains.concurrency.thenRun +import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass import org.utbot.intellij.plugin.ui.utils.allLibraries private const val RECENTS_KEY = "org.utbot.recents" @@ -182,6 +183,15 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m title = "Generate tests with UtBot" setResizable(false) + TestFramework.allItems.forEach { + it.isInstalled = findFrameworkLibrary(model.project, model.testModule, it) != null + } + MockFramework.allItems.forEach { + it.isInstalled = findFrameworkLibrary(model.project, model.testModule, it) != null + } + StaticsMocking.allItems.forEach { it.isConfigured = staticsMockingConfigured() } + + // Configure notification urls callbacks TestsReportNotifier.urlOpeningListener.callbacks[TestReportUrlOpeningListener.mockitoSuffix]?.plusAssign { if (createMockFrameworkNotificationDialog() == Messages.YES) { @@ -426,7 +436,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m .toSet() val selectedMethods = selectedMembers.filter { it.member is PsiMethod }.toSet() - model.selectedMethods = if (selectedMethods.isEmpty()) null else selectedMethods + model.selectedMethods = if (selectedMethods.any()) selectedMethods else null model.testFramework = testFrameworks.item model.mockStrategy = mockStrategies.item @@ -572,7 +582,6 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m cbSpecifyTestPackage.isEnabled = model.srcClasses.all { cl -> cl.packageName.isNotEmpty() } val settings = model.project.service() - codegenLanguages.item = settings.codegenLanguage mockStrategies.item = settings.mockStrategy staticsMocking.item = settings.staticsMocking parametrizedTestSources.item = settings.parametrizedTestSource @@ -581,15 +590,19 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m mockStrategies.isEnabled = areMocksSupported staticsMocking.isEnabled = areMocksSupported && mockStrategies.item != MockStrategyApi.NO_MOCKS - //We do not support parameterized tests for JUnit4 + codegenLanguages.item = + if (model.srcClasses.all { it is KtUltraLightClass }) CodegenLanguage.KOTLIN else CodegenLanguage.JAVA + + + val installedTestFramework = TestFramework.allItems.singleOrNull { it.isInstalled } currentFrameworkItem = when (parametrizedTestSources.item) { - ParametrizedTestSource.DO_NOT_PARAMETRIZE -> settings.testFramework - ParametrizedTestSource.PARAMETRIZE -> - if (settings.testFramework == Junit4) TestFramework.parametrizedDefaultItem else settings.testFramework + ParametrizedTestSource.DO_NOT_PARAMETRIZE -> installedTestFramework ?: settings.testFramework + ParametrizedTestSource.PARAMETRIZE -> installedTestFramework + ?: if (settings.testFramework != Junit4) settings.testFramework else TestFramework.parametrizedDefaultItem } updateTestFrameworksList(settings.parametrizedTestSource) - updateParametrizationVisibility(settings.testFramework) + updateParametrizationEnabled(currentFrameworkItem) updateMockStrategyList() updateStaticMockingStrategyList() @@ -839,7 +852,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m val item = comboBox.item as TestFramework currentFrameworkItem = item - updateParametrizationVisibility(currentFrameworkItem) + updateParametrizationEnabled(currentFrameworkItem) } parametrizedTestSources.addActionListener { event -> @@ -889,10 +902,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m ParametrizedTestSource.DO_NOT_PARAMETRIZE -> TestFramework.defaultItem ParametrizedTestSource.PARAMETRIZE -> TestFramework.parametrizedDefaultItem } - enabledTestFrameworks.forEach { - it.isInstalled = findFrameworkLibrary(model.project, model.testModule, it) != null - if (it.isInstalled && !defaultItem.isInstalled) defaultItem = it - } + enabledTestFrameworks.forEach { if (it.isInstalled && !defaultItem.isInstalled) defaultItem = it } testFrameworks.model = DefaultComboBoxModel(enabledTestFrameworks.toTypedArray()) testFrameworks.item = if (currentFrameworkItem in enabledTestFrameworks) currentFrameworkItem else defaultItem @@ -912,7 +922,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m } //We would like to disable parametrization options for JUnit4 - private fun updateParametrizationVisibility(testFramework: TestFramework) { + private fun updateParametrizationEnabled(testFramework: TestFramework) { when (testFramework) { Junit4 -> parametrizedTestSources.isEnabled = false Junit5, @@ -921,9 +931,6 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m } private fun updateMockStrategyList() { - MOCKITO.isInstalled = - findFrameworkLibrary(model.project, model.testModule, MOCKITO) != null - mockStrategies.renderer = object : ColoredListCellRenderer() { override fun customizeCellRenderer( list: JList, value: MockStrategyApi?, @@ -938,8 +945,6 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m } private fun updateStaticMockingStrategyList() { - val staticsMockingConfigured = staticsMockingConfigured() - StaticsMocking.allItems.forEach { it.isConfigured = staticsMockingConfigured } staticsMocking.renderer = object : ColoredListCellRenderer() { override fun customizeCellRenderer( list: JList, value: StaticsMocking?,