You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2019/05/19 13:18:06 UTC

[netbeans] branch master updated: [NETBEANS-2527] Update TestSuites in a Gradle Test Run upon completion.

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

lkishalmi 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 7008327  [NETBEANS-2527] Update TestSuites in a Gradle Test Run upon completion.
7008327 is described below

commit 7008327dd89bce2ab8c81e7322d619677074e436
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Sat May 18 09:25:32 2019 -0700

    [NETBEANS-2527] Update TestSuites in a Gradle Test Run upon completion.
---
 .../gradle/test/GradleTestProgressListener.java    | 52 ++++++++++------------
 .../modules/gradle/test/GradleTestSuite.java       | 45 ++++++++++++++++---
 2 files changed, 64 insertions(+), 33 deletions(-)

diff --git a/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java b/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java
index 383ba7c..ce2f76d 100644
--- a/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java
+++ b/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestProgressListener.java
@@ -23,9 +23,9 @@ import org.netbeans.modules.gradle.api.NbGradleProject;
 import java.util.Collection;
 import org.netbeans.modules.gradle.spi.GradleProgressListenerProvider;
 import java.util.EnumSet;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.gradle.tooling.Failure;
@@ -57,11 +57,12 @@ import org.openide.util.Lookup;
  * @author Laszlo Kishalmi
  */
 @ProjectServiceProvider(service = GradleProgressListenerProvider.class, projectType = NbGradleProject.GRADLE_PLUGIN_TYPE + "/java")
-public class GradleTestProgressListener implements ProgressListener, GradleProgressListenerProvider {
+public final class GradleTestProgressListener implements ProgressListener, GradleProgressListenerProvider {
 
     final private Project project;
     TestSession session;
-    Map<String, Testcase> runningTests = new HashMap<>();
+
+    Map<String, Testcase> runningTests = new ConcurrentHashMap<>();
 
     public GradleTestProgressListener(Project project) {
         this.project = project;
@@ -125,47 +126,42 @@ public class GradleTestProgressListener implements ProgressListener, GradleProgr
     }
 
     private void sessionFinish(TestFinishEvent evt) {
-        TestOperationResult result = evt.getResult();
-        Report report = session.getReport(result.getEndTime() - result.getStartTime());
+        runningTests.clear();
         CoreManager manager = getManager();
         if (manager != null) {
             manager.sessionFinished(session);
-            manager.displayReport(session, report, true);
-            manager.sessionFinished(session);
         }
     }
 
     private void suiteStart(TestStartEvent evt, JvmTestOperationDescriptor op) {
-        if (op.getClassName() != null) {
-            TestSuite suite = new GradleTestSuite(op);
-            session.addSuite(suite);
+    }
+
+    private void suiteFinish(TestFinishEvent evt, JvmTestOperationDescriptor op) {
+        TestOperationResult result = evt.getResult();
+        TestSuite currentSuite = session.getCurrentSuite();
+        String suiteName = GradleTestSuite.suiteName(op);
+        if (suiteName.equals(currentSuite.getName())) {
+            Report report = session.getReport(result.getEndTime() - result.getStartTime());
             CoreManager manager = getManager();
             if (manager != null) {
-                manager.displaySuiteRunning(session, suite);
+                manager.displayReport(session, report, true);
             }
         }
     }
 
-    private void suiteFinish(TestFinishEvent evt, JvmTestOperationDescriptor op) {
-
-    }
-
     private void caseStart(TestStartEvent evt, JvmTestOperationDescriptor op) {
-        Testcase tc = new GradleTestcase(op, session);
-        if (op.getSuiteName() == null) {
-            // Sometimes it is possible to receive testcase execution events
-            // without suite. It is common with TestNG
-            TestSuite currentSuite = session.getCurrentSuite();
-            if ((currentSuite == null) || !currentSuite.getName().equals(op.getClassName())) {
-                TestSuite suite = new GradleTestSuite(op);
-                session.addSuite(suite);
-                CoreManager manager = getManager();
-                if (manager != null) {
-                    manager.displaySuiteRunning(session, suite);
-                }
+        assert session != null;
+        assert op.getParent() != null;
+        TestSuite currentSuite = session.getCurrentSuite();
+        TestSuite newSuite = new GradleTestSuite((JvmTestOperationDescriptor) op.getParent());
+        if ((currentSuite == null) || !currentSuite.equals(newSuite)) {
+            session.addSuite(newSuite);
+            CoreManager manager = getManager();
+            if (manager != null) {
+                manager.displaySuiteRunning(session, newSuite);
             }
         }
-        tc.setClassName(op.getClassName());
+        Testcase tc = new GradleTestcase(op, session);
         runningTests.put(getTestOpKey(op), tc);
         session.addTestCase(tc);
     }
diff --git a/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestSuite.java b/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestSuite.java
index 68e0144..4834d35 100644
--- a/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestSuite.java
+++ b/groovy/gradle.test/src/org/netbeans/modules/gradle/test/GradleTestSuite.java
@@ -19,6 +19,8 @@
 
 package org.netbeans.modules.gradle.test;
 
+import java.util.Objects;
+import org.gradle.tooling.events.OperationDescriptor;
 import org.gradle.tooling.events.test.JvmTestOperationDescriptor;
 import org.netbeans.modules.gsf.testrunner.api.TestSuite;
 
@@ -26,17 +28,50 @@ import org.netbeans.modules.gsf.testrunner.api.TestSuite;
  *
  * @author Laszlo Kishalmi
  */
-public class GradleTestSuite extends TestSuite {
-    
+public final class GradleTestSuite extends TestSuite {
+
     private final JvmTestOperationDescriptor operation;
-    
+
     public GradleTestSuite(JvmTestOperationDescriptor op) {
-        super(op.getClassName());
+        super(suiteName(op));
         this.operation = op;
     }
 
     public JvmTestOperationDescriptor getOperation() {
         return operation;
     }
-    
+
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 29 * hash + Objects.hashCode(this.operation);
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final GradleTestSuite other = (GradleTestSuite) obj;
+        return Objects.equals(this.getName(), other.getName());
+    }
+
+    static String suiteName(OperationDescriptor op) {
+        assert op != null;
+
+        if (op instanceof JvmTestOperationDescriptor) {
+            JvmTestOperationDescriptor desc = (JvmTestOperationDescriptor)op;
+            return desc.getSuiteName() != null ? desc.getSuiteName() : desc.getClassName();
+        } else {
+            return op.getDisplayName() != null ? op.getDisplayName() : op.getName();
+        }
+    }
+
 }


---------------------------------------------------------------------
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