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/03/01 20:53:05 UTC
deltaspike git commit: DELTASPIKE-1319 basic support for test-suites
and minor improvements
Repository: deltaspike
Updated Branches:
refs/heads/master 5a8369ae9 -> ca6b722bd
DELTASPIKE-1319 basic support for test-suites and minor improvements
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/ca6b722b
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/ca6b722b
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/ca6b722b
Branch: refs/heads/master
Commit: ca6b722bd0cea0975580d74fefd53f25e9330cc5
Parents: 5a8369a
Author: gpetracek <gp...@apache.org>
Authored: Thu Mar 1 21:50:11 2018 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Thu Mar 1 21:50:11 2018 +0100
----------------------------------------------------------------------
.../testcontrol/api/junit/CdiTestRunner.java | 41 +------
.../api/junit/CdiTestSuiteRunner.java | 122 +++++++++++++++++++
2 files changed, 124 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ca6b722b/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 c855b40..f50650c 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
@@ -50,7 +50,6 @@ import javax.enterprise.context.SessionScoped;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
-import javax.inject.Named;
import javax.inject.Singleton;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
@@ -468,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");
- checkForLabeledAlternativeConfig(testClass);
+ CdiTestSuiteRunner.applyAlternativeLabel(testClass);
container.boot(CdiTestSuiteRunner.getTestContainerConfig());
setContainerStarted();
@@ -493,43 +492,6 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
startScopes(container, testClass, null, restrictedScopes.toArray(new Class[restrictedScopes.size()]));
}
- private void checkForLabeledAlternativeConfig(Class<?> testClass)
- {
- String activeAlternativeLabel = "";
- TestControl testControl = testClass.getAnnotation(TestControl.class);
-
- if (testControl != null)
- {
- Class<? extends TestControl.Label> activeTypedAlternativeLabel =
- testControl.activeAlternativeLabel();
-
- if (!TestControl.Label.class.equals(activeTypedAlternativeLabel))
- {
- Named labelName = activeTypedAlternativeLabel.getAnnotation(Named.class);
-
- if (labelName != null)
- {
- activeAlternativeLabel = labelName.value();
- }
- else
- {
- String labelClassName = activeTypedAlternativeLabel.getSimpleName();
- activeAlternativeLabel = labelClassName.substring(0, 1).toLowerCase();
-
- if (labelClassName.length() > 1)
- {
- activeAlternativeLabel += labelClassName.substring(1);
- }
- }
- }
- }
- //always set it even if it is empty (it might overrule the value of the prev. test
- System.setProperty("activeAlternativeLabel", activeAlternativeLabel); //will be picked up by ds-core
-
- //TODO discuss a spi which allows to run such tests in parallel
- System.setProperty("activeAlternativeLabelSource", testClass.getName()); //can be used for custom logic
- }
-
private void bootExternalContainers(Class testClass)
{
if (!this.testControl.startExternalContainers())
@@ -886,4 +848,5 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
return Collections.unmodifiableList(cdiTestRunner.testContext.externalContainers);
}
+
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/ca6b722b/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 e24dda6..bfe0b45 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,10 @@ 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.activation.Deactivatable;
+import org.apache.deltaspike.core.spi.config.ConfigSource;
+import org.apache.deltaspike.core.util.ClassDeactivationUtils;
+import org.apache.deltaspike.testcontrol.api.TestControl;
import org.junit.runner.Description;
import org.junit.runner.Runner;
import org.junit.runner.notification.Failure;
@@ -31,8 +35,12 @@ import org.junit.runners.Suite;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
+import javax.inject.Named;
+import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -103,6 +111,8 @@ public class CdiTestSuiteRunner extends Suite
if (!containerStarted)
{
+ applyAlternativeLabel(getTestClass().getJavaClass());
+
container.boot(getTestContainerConfig());
containerStarted = true;
}
@@ -207,4 +217,116 @@ public class CdiTestSuiteRunner extends Suite
CUSTOM_TEST_CONTAINER_CONFIG_FILE_KEY, DEFAULT_TEST_CONTAINER_CONFIG_FILE_NAME);
return PropertyLoader.getProperties(cdiTestRunnerConfig);
}
+
+ //just here, because all shared methods are in this class
+ static void applyAlternativeLabel(Class<?> currentAnnotationSource)
+ {
+ String activeAlternativeLabel = checkForLabeledAlternativeConfig(currentAnnotationSource);
+ initTestEnvConfig(currentAnnotationSource, activeAlternativeLabel);
+ }
+
+ private static String checkForLabeledAlternativeConfig(Class<?> currentAnnotationSource)
+ {
+ String activeAlternativeLabel = "";
+ TestControl testControl = currentAnnotationSource.getAnnotation(TestControl.class);
+
+ if (testControl != null)
+ {
+ Class<? extends TestControl.Label> activeTypedAlternativeLabel =
+ testControl.activeAlternativeLabel();
+
+ if (!TestControl.Label.class.equals(activeTypedAlternativeLabel))
+ {
+ Named labelName = activeTypedAlternativeLabel.getAnnotation(Named.class);
+
+ if (labelName != null)
+ {
+ activeAlternativeLabel = labelName.value();
+ }
+ else
+ {
+ String labelClassName = activeTypedAlternativeLabel.getSimpleName();
+ activeAlternativeLabel = labelClassName.substring(0, 1).toLowerCase();
+
+ if (labelClassName.length() > 1)
+ {
+ activeAlternativeLabel += labelClassName.substring(1);
+ }
+ }
+ }
+ }
+ return activeAlternativeLabel;
+ }
+
+ private static void initTestEnvConfig(Class<?> testClass, String activeAlternativeLabel)
+ {
+ if (ClassDeactivationUtils.isActivated(TestConfigSource.class))
+ {
+ TestConfigSource testConfigSource = null;
+
+ for (ConfigSource configSource : ConfigResolver.getConfigSources())
+ {
+ if (configSource instanceof TestConfigSource)
+ {
+ //if it happens: parallel test-execution can't be supported with labeled alternatives
+ testConfigSource = (TestConfigSource) configSource;
+ }
+ }
+
+ if (testConfigSource == null)
+ {
+ testConfigSource = new TestConfigSource();
+ ConfigResolver.addConfigSources(Arrays.<ConfigSource>asList(testConfigSource));
+ }
+
+ //always set it even if it is empty (it might overrule the value of the prev. test
+ testConfigSource.getProperties().put("activeAlternativeLabel", activeAlternativeLabel);
+
+ testConfigSource.getProperties().put("activeAlternativeLabelSource", testClass.getName());
+ }
+ else
+ {
+ //always set it even if it is empty (it might overrule the value of the prev. test
+ System.setProperty("activeAlternativeLabel", activeAlternativeLabel); //will be picked up by ds-core
+
+ System.setProperty("activeAlternativeLabelSource", testClass.getName()); //can be used for custom logic
+ }
+ }
+
+ //config-sources are already stored per classloader
+ //keep it public to allow type-safe deactivation (if needed)
+ public static class TestConfigSource implements ConfigSource, Deactivatable
+ {
+ private Map<String, String> testConfig = new ConcurrentHashMap<String, String>();
+
+ @Override
+ public int getOrdinal()
+ {
+ return Integer.MIN_VALUE;
+ }
+
+ @Override
+ public Map<String, String> getProperties()
+ {
+ return testConfig;
+ }
+
+ @Override
+ public String getPropertyValue(String key)
+ {
+ return testConfig.get(key);
+ }
+
+ @Override
+ public String getConfigName()
+ {
+ return "ds-test-config";
+ }
+
+ @Override
+ public boolean isScannable()
+ {
+ return true;
+ }
+ }
}