@@ -27,12 +27,15 @@ import java.awt.event.ActionListener
27
27
import java.awt.event.FocusEvent
28
28
import java.awt.event.FocusListener
29
29
import java.text.DecimalFormat
30
+ import java.util.ArrayList
30
31
import javax.swing.Box
31
32
import javax.swing.DefaultComboBoxModel
32
33
import javax.swing.JComboBox
33
34
import javax.swing.JComponent
34
35
import javax.swing.JLabel
36
+ import javax.swing.JMenuItem
35
37
import javax.swing.JPanel
38
+ import javax.swing.JPopupMenu
36
39
import javax.swing.JProgressBar
37
40
import javax.swing.JScrollPane
38
41
import javax.swing.JSplitPane
@@ -62,9 +65,9 @@ class RunnerPanel implements FocusListener, ActionListener {
62
65
ToolbarButton refreshButton
63
66
ToolbarButton rerunButton
64
67
ToolbarButton rerunWorksheetButton
65
- DefaultComboBoxModel<ComboBoxItem<String ,String > > runComboBoxModel
68
+ DefaultComboBoxModel<ComboBoxItem<String , String > > runComboBoxModel
66
69
ToolbarButton clearButton
67
- JComboBox<ComboBoxItem<String ,String > > runComboBox
70
+ JComboBox<ComboBoxItem<String , String > > runComboBox
68
71
JLabel statusLabel
69
72
JLabel testCounterValueLabel
70
73
JLabel errorCounterValueLabel
@@ -75,6 +78,8 @@ class RunnerPanel implements FocusListener, ActionListener {
75
78
JProgressBar progressBar;
76
79
TestOverviewTableModel testOverviewTableModel
77
80
JTable testOverviewTable
81
+ JMenuItem testOverviewRunMenuItem
82
+ JMenuItem testOverviewRunWorksheetMenuItem
78
83
JTextArea testIdTextArea
79
84
JTextField testOwnerTextField
80
85
JTextField testPackageTextField
@@ -100,6 +105,8 @@ class RunnerPanel implements FocusListener, ActionListener {
100
105
101
106
private def resetDerived () {
102
107
testOverviewTable. rowSorter. sortKeys = null
108
+ testOverviewRunMenuItem. enabled = false
109
+ testOverviewRunWorksheetMenuItem. enabled = false
103
110
testIdTextArea. text = null
104
111
testOwnerTextField. text = null
105
112
testPackageTextField. text = null
@@ -141,7 +148,8 @@ class RunnerPanel implements FocusListener, ActionListener {
141
148
currentRun = run
142
149
testOverviewTableModel. model = run. tests
143
150
resetDerived
144
- runComboBox. selectedItem = run. name
151
+ val item = new ComboBoxItem<String , String > (currentRun. reporterId, currentRun. name)
152
+ runComboBox. selectedItem = item
145
153
}
146
154
}
147
155
@@ -213,6 +221,16 @@ class RunnerPanel implements FocusListener, ActionListener {
213
221
testErrorStackTextArea. caret. visible = false
214
222
}
215
223
}
224
+
225
+ private def getPathListFromSelectedTests () {
226
+ val pathList = new ArrayList<String >
227
+ for (row : testOverviewTable. selectedRows) {
228
+ val test = testOverviewTableModel. getTest(row)
229
+ val path = ' ' ' «test.ownerName».«test.objectName».«test.procedureName»' ' '
230
+ pathList. add(path)
231
+ }
232
+ return pathList
233
+ }
216
234
217
235
override actionPerformed (ActionEvent e ) {
218
236
if (e. source == refreshButton) {
@@ -239,9 +257,15 @@ class RunnerPanel implements FocusListener, ActionListener {
239
257
currentRun = null
240
258
setModel(run)
241
259
update(run. reporterId)
260
+ } else if (e. source == testOverviewRunMenuItem) {
261
+ val runner = new UtplsqlRunner (pathListFromSelectedTests, currentRun. connectionName)
262
+ runner. runTestAsync
263
+ } else if (e. source == testOverviewRunWorksheetMenuItem) {
264
+ val worksheet = new UtplsqlWorksheetRunner (pathListFromSelectedTests, currentRun. connectionName)
265
+ worksheet. runTestAsync
242
266
}
243
267
}
244
-
268
+
245
269
private static def formatDateTime (String dateTime ) {
246
270
if (dateTime == = null ) {
247
271
return null
@@ -296,8 +320,10 @@ class RunnerPanel implements FocusListener, ActionListener {
296
320
tabIndex = 0
297
321
}
298
322
p. testDetailTabbedPane. selectedIndex = tabIndex
323
+ p. testOverviewRunMenuItem. enabled = true
324
+ p. testOverviewRunWorksheetMenuItem. enabled = true
299
325
}
300
- }
326
+ }
301
327
}
302
328
303
329
static class FailuresRowListener implements ListSelectionListener {
@@ -552,7 +578,17 @@ class RunnerPanel implements FocusListener, ActionListener {
552
578
val timeFormatRenderer = new TimeFormatRenderer
553
579
timeFormatRenderer. horizontalAlignment = JLabel . RIGHT
554
580
overviewTableTime. cellRenderer = timeFormatRenderer
555
- val testOverviewScrollPane = new JScrollPane (testOverviewTable)
581
+ val testOverviewScrollPane = new JScrollPane (testOverviewTable)
582
+
583
+ // Context menu for test overview
584
+ val testOverviewPopupMenu = new JPopupMenu
585
+ testOverviewRunMenuItem = new JMenuItem (" Run test" , UtplsqlResources . getIcon(" RUN_ICON" ));
586
+ testOverviewRunMenuItem. addActionListener(this )
587
+ testOverviewPopupMenu. add(testOverviewRunMenuItem)
588
+ testOverviewRunWorksheetMenuItem = new JMenuItem (" Run test in new worksheet" , UtplsqlResources . getIcon(" RUN_WORKSHEET_ICON" ));
589
+ testOverviewRunWorksheetMenuItem. addActionListener(this )
590
+ testOverviewPopupMenu. add(testOverviewRunWorksheetMenuItem)
591
+ testOverviewTable. componentPopupMenu = testOverviewPopupMenu
556
592
557
593
// Test tabbed pane (Test Properties)
558
594
// - Id
@@ -663,7 +699,7 @@ class RunnerPanel implements FocusListener, ActionListener {
663
699
c. gridy = 4
664
700
c. gridwidth = 1
665
701
c. gridheight = 1
666
- c. insets = new Insets (5 , 5 , 0 , 0 ) // top, left, bottom, right
702
+ c. insets = new Insets (5 , 10 , 0 , 0 ) // top, left, bottom, right
667
703
c. anchor = GridBagConstraints :: NORTHWEST
668
704
c. fill = GridBagConstraints :: NONE
669
705
c. weightx = 0
0 commit comments