Skip to content

Default value of codegen language and test framework is improved in UI #499 #500 #507

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 13, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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