Skip to content

Commit 64cbad0

Browse files
add code coverage context menu on overview table
1 parent 84ffaeb commit 64cbad0

File tree

1 file changed

+43
-22
lines changed

1 file changed

+43
-22
lines changed

sqldev/src/main/java/org/utplsql/sqldev/ui/runner/RunnerPanel.java

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public class RunnerPanel {
117117
private JTable testOverviewTable;
118118
private JMenuItem testOverviewRunMenuItem;
119119
private JMenuItem testOverviewRunWorksheetMenuItem;
120+
private JMenuItem testOverviewCodeCoverageMenuItem;
120121
private JCheckBoxMenuItem showTestDescriptionCheckBoxMenuItem;
121122
private JCheckBoxMenuItem showWarningIndicatorCheckBoxMenuItem;
122123
private JCheckBoxMenuItem showInfoIndicatorCheckBoxMenuItem;
@@ -200,6 +201,7 @@ private void resetDerived() {
200201
testOverviewTable.getRowSorter().setSortKeys(null);
201202
testOverviewRunMenuItem.setEnabled(false);
202203
testOverviewRunWorksheetMenuItem.setEnabled(false);
204+
testOverviewCodeCoverageMenuItem.setEnabled(false);
203205
testIdTextArea.setText(null);
204206
testOwnerTextField.setText(null);
205207
testPackageTextField.setText(null);
@@ -656,6 +658,42 @@ private JPanel makeLabelledCounterComponent(final JLabel label, final JComponent
656658
groupPanel.setPreferredSize(dim);
657659
return groupPanel;
658660
}
661+
662+
private void runCodeCoverage(boolean selectedOnly) {
663+
final Connection conn = DatabaseTools.getConnection(currentRun.getConnectionName());
664+
final UtplsqlDao dao = new UtplsqlDao(conn);
665+
final List<String> pathList = new ArrayList<>();
666+
final HashSet<String> testPackages = new HashSet<>();
667+
if (selectedOnly) {
668+
// pathList and unique testPackages based on selected tests
669+
for (final int rowIndex : testOverviewTable.getSelectedRows()) {
670+
final int row = testOverviewTable.convertRowIndexToModel(rowIndex);
671+
final Test test = testOverviewTableModel.getTest(row);
672+
final String path = test.getOwnerName() + "." + test.getObjectName() + "." + test.getProcedureName();
673+
pathList.add(path);
674+
testPackages.add(test.getOwnerName() + "." + test.getObjectName());
675+
}
676+
} else {
677+
// pathList and unique testPackages based on currentRun
678+
pathList.addAll(currentRun.getPathList());
679+
for (Test t : currentRun.getTests().values()) {
680+
testPackages.add(t.getOwnerName() + "." + t.getObjectName());
681+
}
682+
}
683+
// add dependencies of every test package (one DB call per test package)
684+
final HashSet<String> includeObjects = new HashSet<>();
685+
for (String testPackage : testPackages) {
686+
String[] obj = testPackage.split("\\.");
687+
includeObjects.addAll(dao.includes(obj[0], obj[1]));
688+
}
689+
// remove test packages
690+
for (String testPackage : testPackages) {
691+
includeObjects.remove(testPackage.toUpperCase());
692+
}
693+
final CodeCoverageReporter reporter = new CodeCoverageReporter(pathList,
694+
includeObjects.stream().sorted().collect(Collectors.toList()), currentRun.getConnectionName());
695+
reporter.showParameterWindow();
696+
}
659697

660698
private void initializeGUI() {
661699
// Base panel containing all components
@@ -696,28 +734,7 @@ private void initializeGUI() {
696734
final ToolbarButton codeCoverageButton = new ToolbarButton(UtplsqlResources.getIcon("CODE_COVERAGE_ICON"));
697735
codeCoverageButton.setToolTipText(UtplsqlResources.getString("RUNNER_CODE_COVERAGE_TOOLTIP"));
698736
codeCoverageButton.setBorder(buttonBorder);
699-
codeCoverageButton.addActionListener(event -> {
700-
final Connection conn = DatabaseTools.getConnection(currentRun.getConnectionName());
701-
final UtplsqlDao dao = new UtplsqlDao(conn);
702-
final HashSet<String> testPackages = new HashSet<>();
703-
// create unique list of all test packages
704-
for (Test t : currentRun.getTests().values()) {
705-
testPackages.add(t.getOwnerName() + "." + t.getObjectName());
706-
}
707-
// add dependencies of every test package
708-
final HashSet<String> includeObjects = new HashSet<>();
709-
for (String testPackage : testPackages) {
710-
String[] obj = testPackage.split("\\.");
711-
includeObjects.addAll(dao.includes(obj[0], obj[1]));
712-
}
713-
// remove test packages
714-
for (String testPackage : testPackages) {
715-
includeObjects.remove(testPackage.toUpperCase());
716-
}
717-
final CodeCoverageReporter reporter = new CodeCoverageReporter(currentRun.getPathList(),
718-
includeObjects.stream().sorted().collect(Collectors.toList()), currentRun.getConnectionName());
719-
reporter.showParameterWindow();
720-
});
737+
codeCoverageButton.addActionListener(event -> runCodeCoverage(false));
721738
toolbar.add(codeCoverageButton);
722739
toolbar.add(Box.createHorizontalGlue());
723740
runComboBoxModel = new DefaultComboBoxModel<>();
@@ -908,6 +925,7 @@ private void initializeGUI() {
908925
syncDetailTab();
909926
testOverviewRunMenuItem.setEnabled(true);
910927
testOverviewRunWorksheetMenuItem.setEnabled(true);
928+
testOverviewCodeCoverageMenuItem.setEnabled(true);
911929
}
912930
});
913931
testOverviewTable.addMouseListener(new MouseAdapter() {
@@ -976,6 +994,9 @@ public Component getTableCellRendererComponent(final JTable table, final Object
976994
worksheet.runTestAsync();
977995
});
978996
testOverviewPopupMenu.add(testOverviewRunWorksheetMenuItem);
997+
testOverviewCodeCoverageMenuItem = new JMenuItem(UtplsqlResources.getString("MENU_CODE_COVERAGE_LABEL"), UtplsqlResources.getIcon("CODE_COVERAGE_ICON"));
998+
testOverviewCodeCoverageMenuItem.addActionListener(event -> runCodeCoverage(true));
999+
testOverviewPopupMenu.add(testOverviewCodeCoverageMenuItem);
9791000
testOverviewPopupMenu.add(new JSeparator());
9801001
showSuccessfulTestsCheckBoxMenuItem = new JCheckBoxMenuItem(UtplsqlResources.getString("PREF_SHOW_SUCCESSFUL_TESTS_LABEL").replace("?", ""), true);
9811002
showSuccessfulTestsCheckBoxMenuItem.addActionListener(event -> {

0 commit comments

Comments
 (0)