Skip to content

Commit

Permalink
Default value of codegen language and test framework is improved in UI
Browse files Browse the repository at this point in the history
…#499 #500 (#507)

* Default value of codegen language and test framework is improved in UI #499 #500
  • Loading branch information
EgorkaKulikov authored Jul 13, 2022
1 parent c3dcf29 commit 1e5e191
Showing 1 changed file with 23 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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<Settings>()
codegenLanguages.item = settings.codegenLanguage
mockStrategies.item = settings.mockStrategy
staticsMocking.item = settings.staticsMocking
parametrizedTestSources.item = settings.parametrizedTestSource
Expand All @@ -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()
Expand Down Expand Up @@ -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 ->
Expand Down Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -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<MockStrategyApi>() {
override fun customizeCellRenderer(
list: JList<out MockStrategyApi>, value: MockStrategyApi?,
Expand All @@ -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<StaticsMocking>() {
override fun customizeCellRenderer(
list: JList<out StaticsMocking>, value: StaticsMocking?,
Expand Down

0 comments on commit 1e5e191

Please sign in to comment.