5252
5353public class UtplsqlRunner implements RealtimeReporterEventConsumer {
5454 private static final Logger logger = Logger.getLogger(UtplsqlRunner.class.getName());
55+ private static final int DEBUG_TIMEOUT_SECONDS = 60*60;
5556
5657 private final boolean withCodeCoverage;
5758 private final List<String> pathList;
@@ -141,6 +142,7 @@ public void dispose() {
141142 if (frame != null) {
142143 frame.setVisible(false);
143144 }
145+ run.setConsumerConn(null);
144146 }
145147
146148 @SuppressWarnings("StatementWithEmptyBody")
@@ -165,7 +167,7 @@ public void process(final RealtimeReporterEvent event) {
165167 }
166168 }
167169
168- private String getSysdate() {
170+ public static String getSysdate() {
169171 final Date dateTime = new Date(System.currentTimeMillis());
170172 final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'000'");
171173 return df.format(dateTime);
@@ -183,6 +185,7 @@ private void initRun() {
183185 run.setTotalNumberOfTests(-1);
184186 run.setCurrentTestNumber(0);
185187 run.setStatus(UtplsqlResources.getString("RUNNER_INITIALIZING_TEXT"));
188+ run.setConsumerConn(consumerConn);
186189 panel.setModel(run);
187190 panel.update(realtimeReporterId);
188191 }
@@ -200,7 +203,7 @@ private void doProcess(final PostRunEvent event) {
200203 run.setExecutionTime(event.getExecutionTime());
201204 run.setErrorStack(event.getErrorStack());
202205 run.setServerOutput(event.getServerOutput());
203- run.setStatus(UtplsqlResources.getString("RUNNER_FINNISHED_TEXT "));
206+ run.setStatus(UtplsqlResources.getString("RUNNER_FINISHED_TEXT "));
204207 panel.update(realtimeReporterId);
205208 }
206209
@@ -323,26 +326,33 @@ private void produce() {
323326
324327 private void consume() {
325328 try {
326- logger.fine(() -> "Consuming events from reporter id " + realtimeReporterId + " in realtime...");
327- final RealtimeReporterDao dao = new RealtimeReporterDao(consumerConn);
328- dao.consumeReport(realtimeReporterId, this);
329- logger.fine(() -> "All events consumed.");
330- if (withCodeCoverage) {
331- String html = dao.getHtmlCoverage(coverageReporterId);
332- CodeCoverageReporter.openInBrowser(html);
329+ try {
330+ logger.fine(() -> "Consuming events from reporter id " + realtimeReporterId + " in realtime...");
331+ final RealtimeReporterDao dao = new RealtimeReporterDao(consumerConn);
332+ if (!debug) {
333+ dao.consumeReport(realtimeReporterId, this);
334+ } else {
335+ dao.consumeReport(realtimeReporterId, this, DEBUG_TIMEOUT_SECONDS);
336+ }
337+ logger.fine(() -> "All events consumed.");
338+ if (withCodeCoverage) {
339+ String html = dao.getHtmlCoverage(coverageReporterId);
340+ CodeCoverageReporter.openInBrowser(html);
341+ }
342+ } catch (Exception e) {
343+ logger.severe(() -> "Error while consuming events for reporter id " + realtimeReporterId + ": " + e.getMessage() + ".");
344+ }
345+ } finally {
346+ if (run.getTotalNumberOfTests() < 0) {
347+ run.setStatus(UtplsqlResources.getString("RUNNER_NO_TESTS_FOUND_TEXT"));
348+ run.setExecutionTime((System.currentTimeMillis() - Double.valueOf(run.getStart())) / 1000);
349+ run.setEndTime(getSysdate());
350+ run.setTotalNumberOfTests(0);
351+ panel.update(realtimeReporterId);
352+ }
353+ if (isRunningInSqlDeveloper()) {
354+ dispose();
333355 }
334- } catch (Exception e) {
335- logger.severe(() -> "Error while consuming events for reporter id " + realtimeReporterId + ": " + e.getMessage() + ".");
336- }
337- if (run.getTotalNumberOfTests() < 0) {
338- run.setStatus(UtplsqlResources.getString("RUNNER_NO_TESTS_FOUND_TEXT"));
339- run.setExecutionTime((System.currentTimeMillis() - Double.valueOf(run.getStart())) / 1000);
340- run.setEndTime(getSysdate());
341- run.setTotalNumberOfTests(0);
342- panel.update(realtimeReporterId);
343- }
344- if (isRunningInSqlDeveloper()) {
345- dispose();
346356 }
347357 }
348358
0 commit comments