Skip to content

Spring UI fixes and general UI refactoring #2369

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 6 commits into from
Jul 6, 2023
Merged
Show file tree
Hide file tree
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 @@ -1594,6 +1594,8 @@ enum class MockStrategyApi(
// We use OTHER_CLASSES strategy as default one in `No configuration` mode
// and as unique acceptable in other modes (combined with type replacement).
val springDefaultItem = OTHER_CLASSES
// We use NO_MOCKS strategy in integration tests because they are based on fuzzer that is not compatible with mocks
val springIntegrationTestItem = NO_MOCKS
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -448,13 +448,15 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
"Otherwise, mock nothing. Mockito will be installed, if you don't have one."
)
}.enabledIf(ComboBoxPredicate(springConfig) {
model.projectType != ProjectType.Spring || !isSpringConfigSelected()
model.projectType == ProjectType.PureJvm || !isSpringConfigSelected()
})
row { cell(staticsMocking)}
row {
cell(parametrizedTestSources)
contextHelp("Parametrization is not supported in some configurations, e.g. if mocks are used.")
}
}.enabledIf(ComboBoxPredicate(springConfig) {
model.projectType == ProjectType.PureJvm
})
row("Test generation timeout:") {
cell(BorderLayoutPanel().apply {
addToLeft(timeoutSpinner)
Expand Down Expand Up @@ -852,7 +854,8 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
else -> settings.mockStrategy
}
staticsMocking.isSelected = settings.staticsMocking == MockitoStaticMocking
parametrizedTestSources.isSelected = settings.parametrizedTestSource == ParametrizedTestSource.PARAMETRIZE
parametrizedTestSources.isSelected = (settings.parametrizedTestSource == ParametrizedTestSource.PARAMETRIZE
&& model.projectType == ProjectType.PureJvm)

mockStrategies.isEnabled = true
staticsMocking.isEnabled = mockStrategies.item != MockStrategyApi.NO_MOCKS
Expand Down Expand Up @@ -1102,23 +1105,14 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
with((event.source as JComboBox<*>).selectedItem) {
if (this is VirtualFile) {
model.setSourceRootAndFindTestModule(this@with)
}
else {
} else {
model.setSourceRootAndFindTestModule(null)
}
}
}

mockStrategies.addActionListener { event ->
val comboBox = event.source as ComboBox<*>
val item = comboBox.item as MockStrategyApi

staticsMocking.isEnabled = item != MockStrategyApi.NO_MOCKS
if (!staticsMocking.isEnabled) {
staticsMocking.isSelected = false
}

updateParametrizationEnabled()
mockStrategies.addActionListener { _ ->
updateControlsEnabledStatus()
}

testFrameworks.addActionListener { event ->
Expand All @@ -1127,11 +1121,11 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m

currentFrameworkItem = item

updateParametrizationEnabled()
updateControlsEnabledStatus()
}

codegenLanguages.addActionListener { _ ->
updateParametrizationEnabled()
updateControlsEnabledStatus()
}

parametrizedTestSources.addActionListener { _ ->
Expand All @@ -1141,62 +1135,49 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
ParametrizedTestSource.DO_NOT_PARAMETRIZE
}

when (parametrizedTestSource) {
ParametrizedTestSource.PARAMETRIZE -> {
mockStrategies.item = MockStrategyApi.NO_MOCKS
staticsMocking.isEnabled = false
staticsMocking.isSelected = false
}
ParametrizedTestSource.DO_NOT_PARAMETRIZE -> {
mockStrategies.isEnabled = true
if (mockStrategies.item != MockStrategyApi.NO_MOCKS) {
staticsMocking.isEnabled = true
staticsMocking.isSelected = true
}
}
}

updateTestFrameworksList(parametrizedTestSource)
updateControlsEnabledStatus()
}

springConfig.addActionListener { _ ->
if (isSpringConfigSelected()) {
mockStrategies.item = MockStrategyApi.springDefaultItem
mockStrategies.isEnabled = false
updateMockStrategyListForConfigGuidedTypeReplacements()

staticsMocking.isEnabled = false
staticsMocking.isSelected = true
if (isXmlSpringConfigUsed()) {
springTestsType.item = SpringTestsType.defaultItem
}

springTestsType.let {
it.isEnabled = !isXmlSpringConfigUsed()
if (!it.isEnabled) springTestsType.item = SpringTestsType.defaultItem
if (springTestsType.item == UNIT_TESTS) {
mockStrategies.item = MockStrategyApi.springDefaultItem
}
profileNames.isEnabled = true
} else {
mockStrategies.item = when (model.projectType) {
ProjectType.Spring -> MockStrategyApi.springDefaultItem
else -> MockStrategyApi.defaultItem
}
mockStrategies.isEnabled = true
updateMockStrategyList()

staticsMocking.isEnabled = true
staticsMocking.isSelected = mockStrategies.item != MockStrategyApi.NO_MOCKS

springTestsType.isEnabled = false
springTestsType.item = SpringTestsType.defaultItem

profileNames.isEnabled = false
profileNames.text = ""
}
updateMockStrategyList()
updateControlsEnabledStatus()
}

springTestsType.addActionListener { event ->
val comboBox = event.source as ComboBox<*>
val item = comboBox.item as SpringTestsType

updateTestFrameworkList(item)

when (item) {
UNIT_TESTS -> {
mockStrategies.item = MockStrategyApi.springDefaultItem
}
INTEGRATION_TESTS -> {
mockStrategies.item = MockStrategyApi.springIntegrationTestItem
}
}
updateMockStrategyList()
updateControlsEnabledStatus()
}

cbSpecifyTestPackage.addActionListener {
Expand Down Expand Up @@ -1263,27 +1244,28 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
}
}

private fun updateMockStrategyList() {
mockStrategies.renderer = object : ColoredListCellRenderer<MockStrategyApi>() {
override fun customizeCellRenderer(
list: JList<out MockStrategyApi>, value: MockStrategyApi,
index: Int, selected: Boolean, hasFocus: Boolean
) {
this.append(value.displayName, SimpleTextAttributes.REGULAR_ATTRIBUTES)
if (value != MockStrategyApi.NO_MOCKS && !MOCKITO.isInstalled) {
this.append(WILL_BE_INSTALLED_LABEL, SimpleTextAttributes.ERROR_ATTRIBUTES)
}
}
}
private fun updateStaticMockEnabled() {
val mockStrategyIsSupported = mockStrategies.item != MockStrategyApi.NO_MOCKS

staticsMocking.isEnabled = mockStrategyIsSupported && !isSpringConfigSelected()
staticsMocking.isSelected = mockStrategyIsSupported
}

private fun updateMockStrategyListForConfigGuidedTypeReplacements() {
private fun updateMockStrategyList() {
mockStrategies.renderer = object : ColoredListCellRenderer<MockStrategyApi>() {
override fun customizeCellRenderer(
list: JList<out MockStrategyApi>, value: MockStrategyApi,
index: Int, selected: Boolean, hasFocus: Boolean
) {
this.append("Mock using Spring configuration", SimpleTextAttributes.REGULAR_ATTRIBUTES)
if(mockStrategies.item == MockStrategyApi.springDefaultItem && isSpringConfigSelected()) {
this.append("Mock using Spring configuration", SimpleTextAttributes.REGULAR_ATTRIBUTES)
}
else{
this.append(value.displayName, SimpleTextAttributes.REGULAR_ATTRIBUTES)
if (value != MockStrategyApi.NO_MOCKS && !MOCKITO.isInstalled) {
this.append(WILL_BE_INSTALLED_LABEL, SimpleTextAttributes.ERROR_ATTRIBUTES)
}
}
}
}
}
Expand Down Expand Up @@ -1343,6 +1325,31 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m

}
}

private fun updateControlsEnabledStatus() {
mockStrategies.isEnabled = true

updateParametrizationEnabled()
updateStaticMockEnabled()

if (model.projectType == ProjectType.Spring) {
updateSpringControlsEnabledStatus()
}
}

private fun updateSpringControlsEnabledStatus() {
// Parametrized tests are not supported for Spring
parametrizedTestSources.isEnabled = false

if (isSpringConfigSelected()) {
mockStrategies.isEnabled = false
profileNames.isEnabled = true
springTestsType.isEnabled = !isXmlSpringConfigUsed()
} else {
profileNames.isEnabled = false
springTestsType.isEnabled = false
}
}
}

fun GenerateTestsModel.getActionText() : String =
Expand Down