You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2018/04/20 13:36:43 UTC

[2/3] deltaspike git commit: DELTASPIKE-1338 support for ClassFilter per @TestControl test

DELTASPIKE-1338 support for ClassFilter per @TestControl test


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/3f219d6f
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/3f219d6f
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/3f219d6f

Branch: refs/heads/deltaspike-1.8.x
Commit: 3f219d6fbf87186edcd934848bff80ae608a6af7
Parents: f7c12d7
Author: gpetracek <gp...@apache.org>
Authored: Fri Apr 20 15:12:56 2018 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Fri Apr 20 15:24:02 2018 +0200

----------------------------------------------------------------------
 .../deltaspike/testcontrol/api/TestControl.java |  9 +++++
 .../testcontrol/api/junit/CdiTestRunner.java    |  2 +-
 .../api/junit/CdiTestSuiteRunner.java           | 40 ++++++++++++++++----
 .../api/literal/TestControlLiteral.java         |  7 ++++
 4 files changed, 50 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3f219d6f/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
index 5753250..7885fb2 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/TestControl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.deltaspike.testcontrol.api;
 
+import org.apache.deltaspike.core.spi.filter.ClassFilter;
 import org.apache.deltaspike.core.api.projectstage.ProjectStage;
 
 import java.lang.annotation.Annotation;
@@ -64,6 +65,14 @@ public @interface TestControl
      */
     Class<? extends Label> activeAlternativeLabel() default Label.class;
 
+    //with cdi 1.1+ it can be used to implement labeled-alternatives without text based config
+    //(details see DELTASPIKE-1338)
+    /**
+     * low-level filter (mainly needed for special cases if labeled-alternatives aren't enough)
+     * @return the class-filter class which should be used for the current test-class
+     */
+    Class<? extends ClassFilter> classFilter() default ClassFilter.class;
+
     interface Label
     {
     }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3f219d6f/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
index f50650c..11be0d4 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestRunner.java
@@ -467,7 +467,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
                     // Note that Weld 1 was "flat" anyway, so this property only affects newer versions of Weld
                     System.setProperty("org.jboss.weld.se.archive.isolation", "false");
 
-                    CdiTestSuiteRunner.applyAlternativeLabel(testClass);
+                    CdiTestSuiteRunner.applyTestSpecificMetaData(testClass);
 
                     container.boot(CdiTestSuiteRunner.getTestContainerConfig());
                     setContainerStarted();

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3f219d6f/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
index bfe0b45..5a31765 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/junit/CdiTestSuiteRunner.java
@@ -22,6 +22,7 @@ import org.apache.deltaspike.cdise.api.CdiContainer;
 import org.apache.deltaspike.cdise.api.CdiContainerLoader;
 import org.apache.deltaspike.core.api.config.ConfigResolver;
 import org.apache.deltaspike.core.api.config.PropertyLoader;
+import org.apache.deltaspike.core.spi.filter.ClassFilter;
 import org.apache.deltaspike.core.spi.activation.Deactivatable;
 import org.apache.deltaspike.core.spi.config.ConfigSource;
 import org.apache.deltaspike.core.util.ClassDeactivationUtils;
@@ -111,7 +112,7 @@ public class CdiTestSuiteRunner extends Suite
 
         if (!containerStarted)
         {
-            applyAlternativeLabel(getTestClass().getJavaClass());
+            applyTestSpecificMetaData(getTestClass().getJavaClass());
 
             container.boot(getTestContainerConfig());
             containerStarted = true;
@@ -219,16 +220,17 @@ public class CdiTestSuiteRunner extends Suite
     }
 
     //just here, because all shared methods are in this class
-    static void applyAlternativeLabel(Class<?> currentAnnotationSource)
+    static void applyTestSpecificMetaData(Class<?> currentAnnotationSource)
     {
-        String activeAlternativeLabel = checkForLabeledAlternativeConfig(currentAnnotationSource);
-        initTestEnvConfig(currentAnnotationSource, activeAlternativeLabel);
+        TestControl testControl = currentAnnotationSource.getAnnotation(TestControl.class);
+        String activeAlternativeLabel = checkForLabeledAlternativeConfig(testControl);
+
+        initTestEnvConfig(currentAnnotationSource, activeAlternativeLabel, testControl);
     }
 
-    private static String checkForLabeledAlternativeConfig(Class<?> currentAnnotationSource)
+    private static String checkForLabeledAlternativeConfig(TestControl testControl)
     {
         String activeAlternativeLabel = "";
-        TestControl testControl = currentAnnotationSource.getAnnotation(TestControl.class);
 
         if (testControl != null)
         {
@@ -258,7 +260,7 @@ public class CdiTestSuiteRunner extends Suite
         return activeAlternativeLabel;
     }
 
-    private static void initTestEnvConfig(Class<?> testClass, String activeAlternativeLabel)
+    private static void initTestEnvConfig(Class<?> testClass, String activeAlternativeLabel, TestControl testControl)
     {
         if (ClassDeactivationUtils.isActivated(TestConfigSource.class))
         {
@@ -283,6 +285,18 @@ public class CdiTestSuiteRunner extends Suite
             testConfigSource.getProperties().put("activeAlternativeLabel", activeAlternativeLabel);
 
             testConfigSource.getProperties().put("activeAlternativeLabelSource", testClass.getName());
+
+            if (testControl != null)
+            {
+                testConfigSource.getProperties().put(TestControl.class.getName(), testClass.getName());
+                testConfigSource.getProperties().put(ClassFilter.class.getName(), testControl.classFilter().getName());
+            }
+            else
+            {
+                //reset it to avoid leaks between tests
+                testConfigSource.getProperties().put(TestControl.class.getName(), TestControl.class.getName());
+                testConfigSource.getProperties().put(ClassFilter.class.getName(), ClassFilter.class.getName());
+            }
         }
         else
         {
@@ -290,6 +304,18 @@ public class CdiTestSuiteRunner extends Suite
             System.setProperty("activeAlternativeLabel", activeAlternativeLabel); //will be picked up by ds-core
 
             System.setProperty("activeAlternativeLabelSource", testClass.getName()); //can be used for custom logic
+
+            if (testControl != null) //can be used for custom logic
+            {
+                System.setProperty(TestControl.class.getName(), testClass.getName());
+                System.setProperty(ClassFilter.class.getName(), testControl.classFilter().getName());
+            }
+            else
+            {
+                //reset it to avoid leaks between tests
+                System.setProperty(TestControl.class.getName(), TestControl.class.getName());
+                System.setProperty(ClassFilter.class.getName(), ClassFilter.class.getName());
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/3f219d6f/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
index f9d789b..80a15d0 100644
--- a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
+++ b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/api/literal/TestControlLiteral.java
@@ -18,6 +18,7 @@
  */
 package org.apache.deltaspike.testcontrol.api.literal;
 
+import org.apache.deltaspike.core.spi.filter.ClassFilter;
 import org.apache.deltaspike.core.api.projectstage.ProjectStage;
 import org.apache.deltaspike.core.util.metadata.AnnotationInstanceProvider;
 import org.apache.deltaspike.testcontrol.api.TestControl;
@@ -66,4 +67,10 @@ public class TestControlLiteral extends AnnotationLiteral<TestControl> implement
     {
         return defaultInstance.activeAlternativeLabel();
     }
+
+    @Override
+    public Class<? extends ClassFilter> classFilter()
+    {
+        return defaultInstance.classFilter();
+    }
 }