8000 call the PL/SQL debugger when testing via realtime reporter · utPLSQL/utPLSQL-SQLDeveloper@8ed6eb1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8ed6eb1

Browse files
call the PL/SQL debugger when testing via realtime reporter
1 parent 22c2898 commit 8ed6eb1

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlRunner.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,14 @@
2626

2727
import javax.swing.JFrame;
2828

29+
import oracle.dbtools.raptor.runner.DBStarterFactory;
30+
import oracle.ide.Context;
31+
import oracle.jdevimpl.runner.debug.DebuggingProcess;
32+
import oracle.jdevimpl.runner.run.JRunner;
2933
import org.utplsql.sqldev.coverage.CodeCoverageReporter;
3034
import org.utplsql.sqldev.dal.RealtimeReporterDao;
3135
import org.utplsql.sqldev.dal.RealtimeReporterEventConsumer;
36+
import org.utplsql.sqldev.exception.GenericRuntimeException;
3237
import org.utplsql.sqldev.model.DatabaseTools;
3338
import org.utplsql.sqldev.model.SystemTools;
3439
import org.utplsql.sqldev.model.runner.PostRunEvent;
@@ -63,6 +68,7 @@ public class UtplsqlRunner implements RealtimeReporterEventConsumer {
6368
private JFrame frame; // for testing purposes only (outside of SQL Developer)
6469
private Thread producerThread;
6570
private Thread consumerThread;
71+
private Context context; // required for debugging
6672

6773
public UtplsqlRunner(final List<String> pathList, final String connectionName) {
6874
this.withCodeCoverage = false;
@@ -121,6 +127,10 @@ private void setConnection(final String connectionName) {
121127
this.connectionName = connectionName;
122128
}
123129

130+
public void enableDebugging(Context context) {
131+
this.context = context;
132+
}
133+
124134
public void dispose() {
125135
// running in SQL Developer
126136
DatabaseTools.closeConnection(producerConn);
@@ -275,14 +285,31 @@ private void doProcess(final PostTestEvent event) {
275285
panel.update(realtimeReporterId);
276286
}
277287

288+
private void produceReportWithDebugger(String anonymousPlsqlBlock) {
289+
try {
290+
Context processContext = JRunner.prepareProcessContext(context, false);
291+
DebuggingProcess process = new DebuggingProcess(processContext);
292+
DBStarterFactory.PlSqlStarter starter = new DBStarterFactory.PlSqlStarter(process, anonymousPlsqlBlock, connectionName, context);
293+
starter.start();
294+
} catch (Throwable t) {
295+
String msg = t.getClass().getName() + " while debugging utPLSQL test.";
296+
logger.severe(() -> msg);
297+
throw new GenericRuntimeException(msg);
298+
}
299+
}
300+
278301
private void produce() {
279302
try {
280303
logger.fine(() -> "Running utPLSQL tests and producing events via reporter id " + realtimeReporterId + "...");
281304
final RealtimeReporterDao dao = new RealtimeReporterDao(producerConn);
282305
if (withCodeCoverage) {
283306
dao.produceReportWithCoverage(realtimeReporterId, coverageReporterId, pathList, schemaList, includeObjectList, excludeObjectList);
284307
} else {
285-
dao.produceReport(realtimeReporterId, pathList);
308+
if (context == null) {
309+
dao.produceReport(realtimeReporterId, pathList);
310+
} else {
311+
produceReportWithDebugger(dao.getProduceReportPlsql(realtimeReporterId, pathList));
312+
}
286313
}
287314
logger.fine(() -> "All events produced for reporter id " + realtimeReporterId + ".");
288315
} catch (Exception e) {

0 commit comments

Comments
 (0)
0