@@ -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