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