@@ -74,6 +74,7 @@ import com.intellij.util.ui.UIUtil
74
74
import com.intellij.util.ui.components.BorderLayoutPanel
75
75
import java.awt.BorderLayout
76
76
import java.awt.Color
77
+ import java.awt.Dimension
77
78
import java.awt.event.ActionEvent
78
79
import java.nio.file.Files
79
80
import java.nio.file.Path
@@ -90,6 +91,8 @@ import javax.swing.JComboBox
90
91
import javax.swing.JComponent
91
92
import javax.swing.JList
92
93
import javax.swing.JPanel
94
+ import javax.swing.JSpinner
95
+ import javax.swing.text.DefaultFormatter
93
96
import kotlin.streams.toList
94
97
import org.jetbrains.concurrency.Promise
95
98
import org.jetbrains.concurrency.thenRun
@@ -179,8 +182,16 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
179
182
MINIMUM_TIMEOUT_VALUE_IN_SECONDS ,
180
183
Int .MAX_VALUE ,
181
184
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" )
184
195
185
196
private lateinit var panel: DialogPanel
186
197
@@ -193,7 +204,16 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
193
204
)
194
205
195
206
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 {
197
217
it.renderer = CodeGenerationSettingItemRenderer ()
198
218
}
199
219
}
@@ -243,7 +263,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
243
263
@Suppress(" UNCHECKED_CAST" )
244
264
override fun createCenterPanel (): JComponent {
245
265
panel = panel {
246
- row(" Test source root:" ) {
266
+ row(" Test sources root:" ) {
247
267
component(testSourceFolderField)
248
268
}
249
269
row(" Testing framework:" ) {
@@ -253,25 +273,21 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
253
273
)
254
274
}
255
275
row { component(parametrizedTestSources) }
256
- row(" Mock strategy:" ) {
276
+ row(" Mocking strategy:" ) {
257
277
makePanelWithHelpTooltip(
258
278
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." )
260
281
)
261
282
}
262
283
row { component(staticsMocking)}
263
284
row(" Test generation timeout:" ) {
264
- cell{
285
+ cell {
265
286
component(timeoutSpinner)
266
287
label(" seconds per class" )
288
+ component(ContextHelpLabel .create(" Set the timeout for all test generation processes per class to complete." ))
267
289
}
268
290
}
269
- row {
270
- component(cbSpecifyTestPackage)
271
- }.apply { visible = false }
272
- row(" Destination package:" ) {
273
- component(testPackageField)
274
- }.apply { visible = false }
275
291
276
292
row(" Generate tests for:" ) {}
277
293
row {
@@ -380,7 +396,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
380
396
srcClasses.flatMap { it.extractFirstLevelMembers(false ) }
381
397
} else {
382
398
srcClasses.map { MemberInfo (it) }
383
- }
399
+ }.toSortedSet { o1, o2 -> o1.displayName.compareTo(o2.displayName, true ) }
384
400
385
401
checkMembers(items)
386
402
membersTable.setMemberInfos(items)
@@ -392,7 +408,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
392
408
membersTable.preferredScrollableViewportSize = size(- 1 , height)
393
409
}
394
410
395
- private fun checkMembers (allMembers : List <MemberInfo >) {
411
+ private fun checkMembers (allMembers : Collection <MemberInfo >) {
396
412
val selectedDisplayNames = model.selectedMembers.map { it.displayName }
397
413
val selectedMembers = allMembers.filter { it.displayName in selectedDisplayNames }
398
414
0 commit comments