You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by sk...@apache.org on 2021/07/23 15:34:45 UTC

[netbeans] branch master updated: [NETBEANS-5863] "Test results" spuriously clears tests during run and shows success despite failure + fixed.

This is an automated email from the ASF dual-hosted git repository.

skygo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 64d1203  [NETBEANS-5863] "Test results" spuriously clears tests during run and shows success despite failure + fixed.
     new f09836b  Merge pull request #3072 from dbalek/dbalek/NETBEANS-5863
64d1203 is described below

commit 64d120338a6ea9b66d552dd489f642f5043d5178
Author: Dusan Balek <du...@oracle.com>
AuthorDate: Fri Jul 23 14:32:08 2021 +0200

    [NETBEANS-5863] "Test results" spuriously clears tests during run and shows success despite failure + fixed.
---
 .../gsf/testrunner/ui/ResultDisplayHandler.java    | 93 +++++++++++++++++++---
 .../modules/gsf/testrunner/ui/api/Manager.java     | 22 +++--
 .../ui/api/TestResultDisplayHandler.java           | 13 ++-
 3 files changed, 96 insertions(+), 32 deletions(-)

diff --git a/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/ResultDisplayHandler.java b/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/ResultDisplayHandler.java
index dd2a5f3..b82e742 100644
--- a/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/ResultDisplayHandler.java
+++ b/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/ResultDisplayHandler.java
@@ -23,6 +23,7 @@ import java.awt.Component;
 import java.awt.EventQueue;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.lang.ref.WeakReference;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -52,7 +53,78 @@ import org.openide.windows.OutputWriter;
  *
  * @author Marian Petras. Erno Mononen
  */
-public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<ResultDisplayHandler> {
+public final class ResultDisplayHandler {
+
+    private static TestResultDisplayHandler.Spi<?> providerInstance = null;
+
+    public static TestResultDisplayHandler.Spi<?> getProvider() {
+        if (providerInstance == null) {
+            providerInstance = new ResultDisplayHandlerProvider();
+        }
+        return providerInstance;
+    }
+
+    private static class ResultDisplayHandlerProvider implements TestResultDisplayHandler.Spi<WeakReference<ResultDisplayHandler>> {
+
+        @Override
+        public WeakReference<ResultDisplayHandler> create(TestSession session) {
+            return new WeakReference<>(new ResultDisplayHandler(session));
+        }
+
+        @Override
+        public void displayOutput(WeakReference<ResultDisplayHandler> token, String text, boolean error) {
+            ResultDisplayHandler handler = token.get();
+            if (handler != null) {
+                handler.displayOutput(text, error);
+            }
+        }
+
+        @Override
+        public void displaySuiteRunning(WeakReference<ResultDisplayHandler> token, String suiteName) {
+            ResultDisplayHandler handler = token.get();
+            if (handler != null) {
+                handler.displaySuiteRunning(suiteName);
+            }
+        }
+
+        @Override
+        public void displaySuiteRunning(WeakReference<ResultDisplayHandler> token, TestSuite suite) {
+            ResultDisplayHandler handler = token.get();
+            if (handler != null) {
+                handler.displaySuiteRunning(suite);
+            }
+        }
+
+        @Override
+        public void displayReport(WeakReference<ResultDisplayHandler> token, Report report) {
+            ResultDisplayHandler handler = token.get();
+            if (handler != null) {
+                handler.displayReport(report);
+            }
+        }
+
+        @Override
+        public void displayMessage(WeakReference<ResultDisplayHandler> token, String message) {
+            ResultDisplayHandler handler = token.get();
+            if (handler != null) {
+                handler.displayMessage(message);
+            }
+        }
+
+        @Override
+        public void displayMessageSessionFinished(WeakReference<ResultDisplayHandler> token, String message) {
+            ResultDisplayHandler handler = token.get();
+            if (handler != null) {
+                handler.displayMessageSessionFinished(message);
+            }
+        }
+
+        @Override
+        public int getTotalTests(WeakReference<ResultDisplayHandler> token) {
+            ResultDisplayHandler handler = token.get();
+            return handler != null ? handler.getTotalTests() : 0;
+        }
+    }
 
     private static final Logger LOGGER = Logger.getLogger(ResultDisplayHandler.class.getName());
 
@@ -119,7 +191,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
                 dividerSettings.getLocation());
     }
 
-    public int getTotalTests(final ResultDisplayHandler token) {
+    public int getTotalTests() {
         return statisticsPanel.getTreePanel().getTotalTests();
     }
 
@@ -179,7 +251,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
 
     /**
      */
-    public void displayOutput(final ResultDisplayHandler token, final String text, final boolean error) {
+    public void displayOutput(final String text, final boolean error) {
 
         /* Called from the AntLogger's thread */
 
@@ -221,7 +293,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
      * @param  suiteName  name of the running suite; or {@code null} in the case
      *                    of anonymous suite
      */
-    public void displaySuiteRunning(final ResultDisplayHandler token, String suiteName) {
+    public void displaySuiteRunning(String suiteName) {
 
         synchronized (this) {
 
@@ -241,7 +313,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
      *
      * @param  suite  name of the running suite
      */
-    public void displaySuiteRunning(final ResultDisplayHandler token, TestSuite suite) {
+    public void displaySuiteRunning(TestSuite suite) {
         synchronized (this) {
             assert runningSuite == null;
             suite = (suite != null) ? suite : TestSuite.ANONYMOUS_TEST_SUITE;
@@ -255,7 +327,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
 
     /**
      */
-    public void displayReport(final ResultDisplayHandler token, final Report report) {
+    public void displayReport(final Report report) {
 
         synchronized (this) {
             if (treePanel == null) {
@@ -273,7 +345,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
 
     /**
      */
-    public void displayMessage(final ResultDisplayHandler token, final String msg) {
+    public void displayMessage(final String msg) {
 
         /* Called from the AntLogger's thread */
 
@@ -290,7 +362,7 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
 
     /**
      */
-    public void displayMessageSessionFinished(final ResultDisplayHandler token, final String msg) {
+    public void displayMessageSessionFinished(final String msg) {
 
         /* Called from the AntLogger's thread */
 
@@ -396,9 +468,4 @@ public final class ResultDisplayHandler implements TestResultDisplayHandler.Spi<
     Lookup getLookup() {
         return l;
     }
-
-    @Override
-    public ResultDisplayHandler create(TestSession session) {
-        return null;
-    }
 }
diff --git a/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/Manager.java b/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/Manager.java
index 2a8cca7..513ee43 100644
--- a/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/Manager.java
+++ b/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/Manager.java
@@ -260,6 +260,7 @@ public final class Manager {
             LOGGER.log(Level.FINE, "Finishing session: " + session);
         }
 
+        displayHandlers.remove(session);
         testSessions.remove(session);   //must be after displayMessage(...)
                                          //otherwise the window would get
                                          //activated
@@ -465,7 +466,7 @@ public final class Manager {
     /** singleton of the <code>ResultDisplayHandler</code> */
     // the ResultDisplayHandler holds TestSession and is referenced from other
     // places so we use WeakReference, otherwise there would be memory leak
-    private Map<TestSession,WeakReference<TestResultDisplayHandler>> displayHandlers;
+    private Map<TestSession,TestResultDisplayHandler> displayHandlers;
     private Semaphore lock;
     /**
      */
@@ -475,20 +476,17 @@ public final class Manager {
         assert session != null : Bundle.Null_Session_Error();
         TestResultDisplayHandler displayHandler = null;
         if (displayHandlers != null) {
-            WeakReference<TestResultDisplayHandler> reference = displayHandlers.get(session);
-            if (reference != null) {
-                displayHandler = reference.get();
-            }
+            displayHandler = displayHandlers.get(session);
         } else {
-            displayHandlers = new WeakHashMap<TestSession,WeakReference<TestResultDisplayHandler>>(7);
+            displayHandlers = new WeakHashMap<TestSession,TestResultDisplayHandler>(7);
         }
 
         if (displayHandler == null) {
             displayHandler = TestResultDisplayHandler.create(session);
-            displayHandlers.put(session, new WeakReference<TestResultDisplayHandler>(displayHandler));
-            TestResultDisplayHandler.Spi handlerSpi = displayHandler.getSpi();
-            if (handlerSpi instanceof ResultDisplayHandler) {
-                createIO((ResultDisplayHandler)handlerSpi);
+            displayHandlers.put(session, displayHandler);
+            Object handlerToken = displayHandler.getToken() instanceof WeakReference ? ((WeakReference)displayHandler.getToken()).get() : null;
+            if (handlerToken instanceof ResultDisplayHandler) {
+                createIO((ResultDisplayHandler)handlerToken);
                 lock = new Semaphore(1);
                 try {
                     lock.acquire(1);
@@ -499,8 +497,8 @@ public final class Manager {
 
                     @Override
                     public void run() {
-                        StatisticsPanel comp = (StatisticsPanel) ((ResultDisplayHandler)handlerSpi).getDisplayComponent().getLeftComponent();
-                        ((ResultDisplayHandler)handlerSpi).setTreePanel(comp.getTreePanel());
+                        StatisticsPanel comp = (StatisticsPanel) ((ResultDisplayHandler)handlerToken).getDisplayComponent().getLeftComponent();
+                        ((ResultDisplayHandler)handlerToken).setTreePanel(comp.getTreePanel());
                         lock.release();
                     }
                 });
diff --git a/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/TestResultDisplayHandler.java b/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/TestResultDisplayHandler.java
index e500e9f..a867c7e 100644
--- a/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/TestResultDisplayHandler.java
+++ b/ide/gsf.testrunner.ui/src/org/netbeans/modules/gsf/testrunner/ui/api/TestResultDisplayHandler.java
@@ -40,11 +40,10 @@ public abstract class TestResultDisplayHandler {
      */
     public static final TestResultDisplayHandler create(TestSession session) {
         Spi provider = Lookup.getDefault().lookup(Spi.class);
-        if (provider != null) {
-            return new Impl<>(provider.create(session), provider);
-        } else {
-            return new Impl<>(null, new ResultDisplayHandler(session));
+        if (provider == null) {
+            provider = ResultDisplayHandler.getProvider();
         }
+        return new Impl<>(provider.create(session), provider);
     }
 
     private TestResultDisplayHandler() {
@@ -211,10 +210,10 @@ public abstract class TestResultDisplayHandler {
         }
 
         @Override
-        Spi<T> getSpi() {
-            return spi;
+        T getToken() {
+            return token;
         }
     }
 
-    abstract Spi getSpi();
+    abstract Object getToken();
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists