@@ -74,6 +74,7 @@ import com.intellij.util.ui.UIUtil
7474import com.intellij.util.ui.components.BorderLayoutPanel
7575import java.awt.BorderLayout
7676import java.awt.Color
77+ import java.awt.Dimension
7778import java.awt.event.ActionEvent
7879import java.nio.file.Files
7980import java.nio.file.Path
@@ -90,6 +91,8 @@ import javax.swing.JComboBox
9091import javax.swing.JComponent
9192import javax.swing.JList
9293import javax.swing.JPanel
94+ import javax.swing.JSpinner
95+ import javax.swing.text.DefaultFormatter
9396import kotlin.streams.toList
9497import org.jetbrains.concurrency.Promise
9598import org.jetbrains.concurrency.thenRun
@@ -179,8 +182,16 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
179182 MINIMUM_TIMEOUT_VALUE_IN_SECONDS ,
180183 Int .MAX_VALUE ,
181184 MINIMUM_TIMEOUT_VALUE_IN_SECONDS
182- )
183- private val parametrizedTestSources = JCheckBox (" Parametrized tests" )
185+ ).also {
186+ when (val editor = it.editor) {
187+ is JSpinner .DefaultEditor -> {
188+ when (val formatter = editor.textField.formatter) {
189+ is DefaultFormatter -> {formatter.allowsInvalid = false }
190+ }
191+ }
192+ }
193+ }
194+ private val parametrizedTestSources = JCheckBox (" Parameterized tests" )
184195
185196 private lateinit var panel: DialogPanel
186197
@@ -193,7 +204,16 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
193204 )
194205
195206 private fun <T : CodeGenerationSettingItem > createComboBox (values : Array <T >) : ComboBox <T > {
196- return ComboBox <T >(DefaultComboBoxModel (values)).also {
207+ val comboBox = object : ComboBox <T >(DefaultComboBoxModel (values)) {
208+ var maxWidth = 0
209+ // Don't shrink strategy
210+ override fun getPreferredSize (): Dimension {
211+ val size = super .getPreferredSize()
212+ if (size.width > maxWidth) maxWidth = size.width
213+ return size.apply { width = maxWidth }
214+ }
215+ }
216+ return comboBox.also {
197217 it.renderer = CodeGenerationSettingItemRenderer ()
198218 }
199219 }
@@ -243,7 +263,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
243263 @Suppress(" UNCHECKED_CAST" )
244264 override fun createCenterPanel (): JComponent {
245265 panel = panel {
246- row(" Test source root:" ) {
266+ row(" Test sources root:" ) {
247267 component(testSourceFolderField)
248268 }
249269 row(" Testing framework:" ) {
@@ -253,25 +273,21 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
253273 )
254274 }
255275 row { component(parametrizedTestSources) }
256- row(" Mock strategy:" ) {
276+ row(" Mocking strategy:" ) {
257277 makePanelWithHelpTooltip(
258278 mockStrategies,
259- ContextHelpLabel .create(" Mock everything around the target class or the whole package except the system classes. Otherwise mock nothing." )
279+ ContextHelpLabel .create(" Mock everything around the target class or the whole package except the system classes. " +
280+ " Otherwise, mock nothing. Mockito will be installed, if you don't have one." )
260281 )
261282 }
262283 row { component(staticsMocking)}
263284 row(" Test generation timeout:" ) {
264- cell{
285+ cell {
265286 component(timeoutSpinner)
266287 label(" seconds per class" )
288+ component(ContextHelpLabel .create(" Set the timeout for all test generation processes per class to complete." ))
267289 }
268290 }
269- row {
270- component(cbSpecifyTestPackage)
271- }.apply { visible = false }
272- row(" Destination package:" ) {
273- component(testPackageField)
274- }.apply { visible = false }
275291
276292 row(" Generate tests for:" ) {}
277293 row {
@@ -380,7 +396,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
380396 srcClasses.flatMap { it.extractFirstLevelMembers(false ) }
381397 } else {
382398 srcClasses.map { MemberInfo (it) }
383- }
399+ }.toSortedSet { o1, o2 -> o1.displayName.compareTo(o2.displayName, true ) }
384400
385401 checkMembers(items)
386402 membersTable.setMemberInfos(items)
@@ -392,7 +408,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
392408 membersTable.preferredScrollableViewportSize = size(- 1 , height)
393409 }
394410
395- private fun checkMembers (allMembers : List <MemberInfo >) {
411+ private fun checkMembers (allMembers : Collection <MemberInfo >) {
396412 val selectedDisplayNames = model.selectedMembers.map { it.displayName }
397413 val selectedMembers = allMembers.filter { it.displayName in selectedDisplayNames }
398414
0 commit comments