◐ Shell
reader mode source ↗
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
File filter
Conversations
Jump to
Diff view
Apply and reload
Show whitespace
Diff view
Apply and reload
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,25 @@

import java.awt.Desktop;
import java.io.File;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;

import org.utplsql.sqldev.dal.RealtimeReporterDao;
import org.utplsql.sqldev.dal.UtplsqlDao;
import org.utplsql.sqldev.exception.GenericDatabaseAccessException;
Expand All @@ -42,22 +50,25 @@

public class CodeCoverageReporter {
private static final Logger logger = Logger.getLogger(CodeCoverageReporter.class.getName());

private String connectionName;
private Connection conn;
private List<String> pathList;
private List<String> includeObjectList;
private CodeCoverageReporterDialog frame;
private String schemas;
private String includeObjects;
private String excludeObjects;

public CodeCoverageReporter(final List<String> pathList, final List<String> includeObjectList,
final String connectionName) {
this.pathList = pathList;
this.includeObjectList = includeObjectList;
setDefaultSchema();
setConnection(connectionName);
}

// constructor for testing purposes only
Expand All @@ -67,6 +78,7 @@ public CodeCoverageReporter(final List<String> pathList, final List<String> incl
this.includeObjectList = includeObjectList;
this.conn = conn;
setDefaultSchema();
}

private void setConnection(final String connectionName) {
Expand Down Expand Up @@ -105,6 +117,59 @@ private void setDefaultSchema() {
}
}

private ArrayList<String> toStringList(final String s) {
final ArrayList<String> list = new ArrayList<>();
if (s != null && !s.isEmpty()) {
Expand Down Expand Up @@ -142,7 +207,7 @@ private void run() {

private void runCodeCoverageWithRealtimeReporter() {
final UtplsqlRunner runner = new UtplsqlRunner(pathList, toStringList(schemas), toStringList(includeObjects),
toStringList(excludeObjects), connectionName);
runner.runTestAsync();
}

Expand All @@ -152,7 +217,7 @@ private void runCodeCoverageStandalone() {
coverageConn = conn != null ? conn : DatabaseTools.cloneConnection(connectionName);
final UtplsqlDao dao = new UtplsqlDao(coverageConn);
final String html = dao.htmlCodeCoverage(pathList, toStringList(schemas),
toStringList(includeObjects), toStringList(excludeObjects));
openInBrowser(html);
} finally {
try {
Expand All @@ -174,7 +239,7 @@ public static void openInBrowser(String html) {
final URL url = file.toURI().toURL();
logger.fine(() -> "Opening " + url.toExternalForm() + " in browser...");
final Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE) && url != null) {
desktop.browse(url.toURI());
logger.fine(() -> url.toExternalForm() + " opened in browser.");
} else {
Expand Down Expand Up @@ -229,9 +294,7 @@ public void setExcludeObjects(final String excludeObjects) {
}

public Thread runAsync() {
final Thread thread = new Thread(() -> {
run();
});
thread.setName("code coverage reporter");
thread.start();
return thread;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.io.IOException;
import java.io.StringReader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.ResultSet;
Expand Down Expand Up @@ -108,11 +109,11 @@ public void produceReport(final String reporterId, final List<String> pathList)

public void produceReportWithCoverage(final String realtimeReporterId, final String coverageReporterId,
final List<String> pathList, final List<String> schemaList, final List<String> includeObjectList,
final List<String> excludeObjectList) {
StringBuilder sb = new StringBuilder();
sb.append("DECLARE\n");
sb.append(" l_rt_rep ut_realtime_reporter := ut_realtime_reporter();\n");
sb.append(" l_cov_rep ut_coverage_html_reporter := ut_coverage_html_reporter();\n");
sb.append("BEGIN\n");
sb.append(" l_rt_rep.set_reporter_id(?);\n");
sb.append(" l_rt_rep.output_buffer.init();\n");
Expand Down @@ -143,7 +144,7 @@ public void produceReportWithCoverage(final String realtimeReporterId, final Str
sb.append(" sys.dbms_output.disable;\n");
sb.append("END;");
final String plsql = sb.toString();
final Object[] binds = { realtimeReporterId, coverageReporterId };
jdbcTemplate.update(plsql, binds);
}

Expand Down
14 changes: 12 additions & 2 deletions sqldev/src/main/java/org/utplsql/sqldev/dal/UtplsqlDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package org.utplsql.sqldev.dal;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
Expand Up @@ -907,12 +908,14 @@ public OutputLines doInCallableStatement(final CallableStatement cs) throws SQLE
* @param excludeObjectList
* list of objects to be excluded from coverage analysis. None, if
* empty
* @return HTML code coverage report in HTML format
* @throws DataAccessException
* if there is a problem
*/
public String htmlCodeCoverage(final List<String> pathList, final List<String> schemaList,
final List<String> includeObjectList, final List<String> excludeObjectList) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT column_value\n");
sb.append(" FROM table(\n");
Expand All @@ -935,7 +938,14 @@ public String htmlCodeCoverage(final List<String> pathList, final List<String> s
sb.append(StringTools.getCSV(excludeObjectList, 16));
sb.append(" ),\n");
}
sb.append(" a_reporter => ut_coverage_html_reporter()\n");
sb.append(" )\n");
sb.append(" )");
final String sql = sb.toString();
Expand Down
Loading
Toggle all file notes Toggle all file annotations