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

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/deltaspike.git

commit 61276fb338a0ac0127885a26888e4743ffa2bd98
Author: Mark Struberg <[email protected]>
AuthorDate: Mon May 11 12:57:02 2026 +0200

    DELTASPIKE-1366 use junit5 store to keep state
---
 .../testcontrol5/api/junit/CdiTestExtension.java   | 344 ++++++++++++---------
 .../api/junit/CdiTestSuiteExtension.java           |   8 +-
 .../testcontrol5/api/junit/TestConfigSource.java   |  62 ++++
 .../RequestAndSessionScopePerTestMethodTest.java   |   6 +-
 .../uc003/SessionScopePerTestClassTest.java        |   6 +-
 .../test/testcontrol5/uc003/TestSuite.java         |  34 +-
 6 files changed, 306 insertions(+), 154 deletions(-)

diff --git 
a/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestExtension.java
 
b/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestExtension.java
index 1088534ae..b1f6d8027 100644
--- 
a/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestExtension.java
+++ 
b/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestExtension.java
@@ -18,11 +18,16 @@
  */
 package org.apache.deltaspike.testcontrol5.api.junit;
 
+import jakarta.inject.Named;
 import org.apache.deltaspike.cdise.api.CdiContainer;
 import org.apache.deltaspike.cdise.api.CdiContainerLoader;
 import org.apache.deltaspike.cdise.api.ContextControl;
+import org.apache.deltaspike.core.api.config.ConfigResolver;
 import org.apache.deltaspike.core.api.projectstage.ProjectStage;
 import org.apache.deltaspike.core.api.provider.BeanProvider;
+import org.apache.deltaspike.core.spi.config.ConfigSource;
+import org.apache.deltaspike.core.spi.filter.ClassFilter;
+import org.apache.deltaspike.core.util.ClassDeactivationUtils;
 import org.apache.deltaspike.core.util.ExceptionUtils;
 import org.apache.deltaspike.core.util.ProjectStageProducer;
 import org.apache.deltaspike.core.util.ServiceUtils;
@@ -50,6 +55,7 @@ import 
org.junit.jupiter.api.extension.TestInstancePostProcessor;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -68,6 +74,8 @@ public class CdiTestExtension implements BeforeAllCallback, 
AfterAllCallback,
 {
     private static final Logger LOGGER = 
Logger.getLogger(CdiTestExtension.class.getName());
 
+    private static final String STORE_KEY_TEST_CONTEXT = "testContext";
+
     private static final boolean USE_TEST_CLASS_AS_CDI_BEAN;
     private static final boolean ALLOW_INJECTION_POINT_MANIPULATION;
 
@@ -78,36 +86,65 @@ public class CdiTestExtension implements BeforeAllCallback, 
AfterAllCallback,
         ALLOW_INJECTION_POINT_MANIPULATION = 
TestBaseConfig.MockIntegration.ALLOW_MANUAL_INJECTION_POINT_MANIPULATION;
     }
 
-    private static ThreadLocal<Boolean> automaticScopeHandlingActive = new 
ThreadLocal<>();
+    private List<TestStatementDecoratorFactory> statementDecoratorFactories;
 
-    private static ThreadLocal<CdiTestExtension> currentTestExtension = new 
ThreadLocal<>();
+    protected ContainerAwareTestContext getClassTestContext(ExtensionContext 
extensionContext)
+    {
+        final ExtensionContext.Namespace namespace = 
ExtensionContext.Namespace.create(CdiTestExtension.class, 
extensionContext.getUniqueId());
+        final ExtensionContext.Store store = 
extensionContext.getStore(namespace);
+        return store.getOrComputeIfAbsent(STORE_KEY_TEST_CONTEXT, k ->
+            {
+                TestControl testControl = extensionContext.getTestClass()
+                    .map(cls -> 
cls.getAnnotation(TestControl.class)).orElse(null);
 
-    private List<TestStatementDecoratorFactory> statementDecoratorFactories;
+                ContainerAwareTestContext testContext = new 
ContainerAwareTestContext(testControl, null);
 
-    private ContainerAwareTestContext testContext;
+                Class<? extends Handler> logHandlerClass = 
testContext.getLogHandlerClass();
 
-    public CdiTestExtension()
-    {
+                if (!Handler.class.equals(logHandlerClass))
+                {
+                    try
+                    {
+                        LOGGER.addHandler(logHandlerClass.newInstance());
+                    }
+                    catch (Exception e)
+                    {
+                        throw ExceptionUtils.throwAsRuntimeException(e);
+                    }
+                }
+
+                this.statementDecoratorFactories = 
ServiceUtils.loadServiceImplementations(TestStatementDecoratorFactory.class);
+                Collections.sort(this.statementDecoratorFactories,
+                    (f1, f2) -> f1.getOrdinal() > f2.getOrdinal() ? 1 : -1);
+
+                return testContext;
+            }, ContainerAwareTestContext.class);
     }
 
 
+    protected ContainerAwareTestContext getMethodTestContext(ExtensionContext 
methodExtensionContext)
+    {
+        final ExtensionContext.Namespace namespace = 
ExtensionContext.Namespace.create(CdiTestExtension.class, 
methodExtensionContext.getUniqueId());
+        final ExtensionContext.Store store = 
methodExtensionContext.getStore(namespace);
+        return store.getOrComputeIfAbsent(STORE_KEY_TEST_CONTEXT, k ->
+            {
+                TestControl testControl = 
methodExtensionContext.getTestMethod()
+                    .map(cls -> 
cls.getAnnotation(TestControl.class)).orElse(null);
+
+                return new ContainerAwareTestContext(testControl, 
getClassTestContext(methodExtensionContext.getParent().orElse(null)));
+            }, ContainerAwareTestContext.class);
+    }
+
     @Override
     public void postProcessTestInstance(Object testInstance, ExtensionContext 
context) throws Exception
     {
         BeanProvider.injectFields(testInstance);
     }
 
-
     @Override
     public void beforeEach(ExtensionContext extensionContext) throws Exception
     {
-        currentTestExtension.set(this);
-
-        TestControl testControl = extensionContext.getTestMethod()
-                .map(cls -> cls.getAnnotation(TestControl.class)).orElse(null);
-
-        ContainerAwareTestContext currentTestContext =
-                new ContainerAwareTestContext(testControl, this.testContext);
+        ContainerAwareTestContext currentTestContext = 
getMethodTestContext(extensionContext);
 
         extensionContext.getTestMethod().ifPresent(method ->
             {
@@ -120,65 +157,32 @@ public class CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback,
                     throw ExceptionUtils.throwAsRuntimeException(e);
                 }
             });
-
-        this.testContext = currentTestContext;
     }
 
     @Override
     public void afterEach(ExtensionContext extensionContext) throws Exception
     {
-        try
-        {
-            if (this.testContext != null)
-            {
-                this.testContext.applyAfterMethodConfig();
-            }
-        }
-        finally
+        ContainerAwareTestContext currentTestContext = 
getMethodTestContext(extensionContext);
+
+        if (currentTestContext != null)
         {
-            currentTestExtension.set(null);
-            currentTestExtension.remove();
+            currentTestContext.applyAfterMethodConfig();
         }
     }
 
     @Override
     public void beforeAll(ExtensionContext extensionContext) throws Exception
     {
-        if (this.testContext == null)
-        {
-            TestControl testControl = extensionContext.getTestClass()
-                    .map(cls -> 
cls.getAnnotation(TestControl.class)).orElse(null);
-
-            this.testContext = new ContainerAwareTestContext(testControl, 
null);
-
-            Class<? extends Handler> logHandlerClass = 
this.testContext.getLogHandlerClass();
-
-            if (!Handler.class.equals(logHandlerClass))
-            {
-                try
-                {
-                    LOGGER.addHandler(logHandlerClass.newInstance());
-                }
-                catch (Exception e)
-                {
-                    throw ExceptionUtils.throwAsRuntimeException(e);
-                }
-            }
-
-            this.statementDecoratorFactories = 
ServiceUtils.loadServiceImplementations(TestStatementDecoratorFactory.class);
-            Collections.sort(this.statementDecoratorFactories,
-                (f1, f2) -> f1.getOrdinal() > f2.getOrdinal() ? 1 : -1);
-        }
-
-        
this.testContext.applyBeforeClassConfig(extensionContext.getTestClass().orElseThrow());
+        
getClassTestContext(extensionContext).applyBeforeClassConfig(extensionContext.getTestClass().orElseThrow());
     }
 
     @Override
     public void afterAll(ExtensionContext extensionContext) throws Exception
     {
-        if (this.testContext != null)
+        final ContainerAwareTestContext testContext = 
getClassTestContext(extensionContext);
+        if (testContext != null)
         {
-            this.testContext.applyAfterClassConfig();
+            testContext.applyAfterClassConfig();
         }
 
         // TODO destroy all injected beans
@@ -211,7 +215,7 @@ public class CdiTestExtension implements BeforeAllCallback, 
AfterAllCallback,
 
         private boolean containerStarted = false;
 
-        private Stack<Class<? extends Annotation>> startedScopes = new 
Stack<Class<? extends Annotation>>();
+        private Stack<Class<? extends Annotation>> startedScopes = new 
Stack<>();
 
         private List<ExternalContainer> externalContainers;
 
@@ -267,6 +271,10 @@ public class CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback,
                 // Weld 5.0: 
https://docs.jboss.org/weld/reference/5.0.0.Final/en-US/html_single/#_bean_archive_isolation
                 
System.setProperty("org.jboss.weld.environment.servlet.archive.isolation", 
"false");
 
+                String activeAlternativeLabel = 
checkForLabeledAlternativeConfig(testControl);
+
+                initTestEnvConfig(testClass, activeAlternativeLabel, 
testControl);
+
                 container.boot(CdiTestSuiteExtension.getTestContainerConfig());
                 setContainerStarted();
 
@@ -405,6 +413,81 @@ public class CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback,
             }
         }
 
+        private String checkForLabeledAlternativeConfig(TestControl 
testControl)
+        {
+            String activeAlternativeLabel = "";
+
+            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 void initTestEnvConfig(Class<?> testClass, String 
activeAlternativeLabel, TestControl testControl)
+        {
+            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.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());
+
+                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
+            {
+                throw new IllegalStateException("Alternative Environments 
require TestConfigSource to be active");
+            }
+        }
         void setContainerStarted()
         {
             this.containerStarted = true;
@@ -416,83 +499,73 @@ public class CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback,
                                  Method testMethod,
                                  Class<? extends Annotation>... 
restrictedScopes)
         {
-            try
-            {
-                automaticScopeHandlingActive.set(true);
+            ContextControl contextControl = container.getContextControl();
 
-                ContextControl contextControl = container.getContextControl();
+            List<Class<? extends Annotation>> scopeClasses = new ArrayList<>();
 
-                List<Class<? extends Annotation>> scopeClasses = new 
ArrayList<>();
+            Collections.addAll(scopeClasses, this.testControl.startScopes());
 
-                Collections.addAll(scopeClasses, 
this.testControl.startScopes());
+            if (scopeClasses.isEmpty())
+            {
+                addScopesForDefaultBehavior(scopeClasses);
+            }
+            else
+            {
+                List<TestControlValidator> testControlValidatorList =
+                        
ServiceUtils.loadServiceImplementations(TestControlValidator.class);
 
-                if (scopeClasses.isEmpty())
+                for (TestControlValidator testControlValidator : 
testControlValidatorList)
                 {
-                    addScopesForDefaultBehavior(scopeClasses);
-                }
-                else
-                {
-                    List<TestControlValidator> testControlValidatorList =
-                            
ServiceUtils.loadServiceImplementations(TestControlValidator.class);
-
-                    for (TestControlValidator testControlValidator : 
testControlValidatorList)
+                    if (testControlValidator instanceof TestAware)
                     {
-                        if (testControlValidator instanceof TestAware)
+                        if (testMethod != null)
                         {
-                            if (testMethod != null)
-                            {
-                                ((TestAware) 
testControlValidator).setTestMethod(testMethod);
-                            }
-                            ((TestAware) 
testControlValidator).setTestClass(testClass);
+                            ((TestAware) 
testControlValidator).setTestMethod(testMethod);
                         }
-                        try
-                        {
-                            testControlValidator.validate(this.testControl);
-                        }
-                        finally
+                        ((TestAware) 
testControlValidator).setTestClass(testClass);
+                    }
+                    try
+                    {
+                        testControlValidator.validate(this.testControl);
+                    }
+                    finally
+                    {
+                        if (testControlValidator instanceof TestAware)
                         {
-                            if (testControlValidator instanceof TestAware)
-                            {
-                                ((TestAware) 
testControlValidator).setTestClass(null);
-                                ((TestAware) 
testControlValidator).setTestMethod(null);
-                            }
+                            ((TestAware) 
testControlValidator).setTestClass(null);
+                            ((TestAware) 
testControlValidator).setTestMethod(null);
                         }
                     }
                 }
+            }
 
-                for (Class<? extends Annotation> scopeAnnotation : 
scopeClasses)
+            for (Class<? extends Annotation> scopeAnnotation : scopeClasses)
+            {
+                if (this.parent != null && 
this.parent.isScopeStarted(scopeAnnotation))
                 {
-                    if (this.parent != null && 
this.parent.isScopeStarted(scopeAnnotation))
-                    {
-                        continue;
-                    }
+                    continue;
+                }
 
-                    if (isRestrictedScope(scopeAnnotation, restrictedScopes))
-                    {
-                        continue;
-                    }
+                if (isRestrictedScope(scopeAnnotation, restrictedScopes))
+                {
+                    continue;
+                }
 
-                    try
-                    {
-                        contextControl.stopContext(scopeAnnotation);
+                try
+                {
+                    contextControl.stopContext(scopeAnnotation);
 
-                        contextControl.startContext(scopeAnnotation);
-                        this.startedScopes.add(scopeAnnotation);
+                    contextControl.startContext(scopeAnnotation);
+                    this.startedScopes.add(scopeAnnotation);
 
-                        onScopeStarted(scopeAnnotation);
-                    }
-                    catch (RuntimeException e)
-                    {
-                        Logger logger = 
Logger.getLogger(CdiTestExtension.class.getName());
-                        logger.setLevel(Level.SEVERE);
-                        logger.log(Level.SEVERE, "failed to start scope @" + 
scopeAnnotation.getName(), e);
-                    }
+                    onScopeStarted(scopeAnnotation);
+                }
+                catch (RuntimeException e)
+                {
+                    Logger logger = 
Logger.getLogger(CdiTestExtension.class.getName());
+                    logger.setLevel(Level.SEVERE);
+                    logger.log(Level.SEVERE, "failed to start scope @" + 
scopeAnnotation.getName(), e);
                 }
-            }
-            finally
-            {
-                automaticScopeHandlingActive.set(null);
-                automaticScopeHandlingActive.remove();
             }
         }
 
@@ -534,30 +607,20 @@ public class CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback,
 
         private void stopStartedScopes(CdiContainer container)
         {
-            try
+            while (!this.startedScopes.empty())
             {
-                automaticScopeHandlingActive.set(true);
-
-                while (!this.startedScopes.empty())
+                Class<? extends Annotation> scopeAnnotation = 
this.startedScopes.pop();
+                try
                 {
-                    Class<? extends Annotation> scopeAnnotation = 
this.startedScopes.pop();
-                    try
-                    {
-                        
container.getContextControl().stopContext(scopeAnnotation);
-                        onScopeStopped(scopeAnnotation);
-                    }
-                    catch (RuntimeException e)
-                    {
-                        Logger logger = 
Logger.getLogger(CdiTestExtension.class.getName());
-                        logger.setLevel(Level.SEVERE);
-                        logger.log(Level.SEVERE, "failed to stop scope @" + 
scopeAnnotation.getName(), e);
-                    }
+                    container.getContextControl().stopContext(scopeAnnotation);
+                    onScopeStopped(scopeAnnotation);
+                }
+                catch (RuntimeException e)
+                {
+                    Logger logger = 
Logger.getLogger(CdiTestExtension.class.getName());
+                    logger.setLevel(Level.SEVERE);
+                    logger.log(Level.SEVERE, "failed to stop scope @" + 
scopeAnnotation.getName(), e);
                 }
-            }
-            finally
-            {
-                automaticScopeHandlingActive.remove();
-                automaticScopeHandlingActive.set(null);
             }
         }
 
@@ -620,21 +683,24 @@ public class CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback,
 
     public static Boolean isAutomaticScopeHandlingActive()
     {
-        return automaticScopeHandlingActive.get();
+        throw new UnsupportedOperationException("Not supported yet.");
+        //X TODO return automaticScopeHandlingActive.get();
     }
 
     public static List<ExternalContainer> getActiveExternalContainers()
     {
+        throw new UnsupportedOperationException("Not supported yet.");
+/*X TODO
         CdiTestExtension cdiTestExtension = currentTestExtension.get();
 
         if (cdiTestExtension == null ||
-                cdiTestExtension.testContext == null ||
-                cdiTestExtension.testContext.externalContainers == null)
+                cdiTestExtension.externalContainers == null)
         {
             return Collections.emptyList();
         }
 
-        return 
Collections.unmodifiableList(cdiTestExtension.testContext.externalContainers);
+        return 
Collections.unmodifiableList(cdiTestExtension.externalContainers);
+*/
     }
 
 }
diff --git 
a/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestSuiteExtension.java
 
b/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestSuiteExtension.java
index 3c13849da..77ec6a50b 100644
--- 
a/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestSuiteExtension.java
+++ 
b/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/CdiTestSuiteExtension.java
@@ -38,8 +38,8 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 
-
-public class CdiTestSuiteExtension implements BeforeAllCallback, 
AfterAllCallback
+//X TODO this is work in progress and not fully functional right now.
+public class CdiTestSuiteExtension extends CdiTestExtension implements 
BeforeAllCallback, AfterAllCallback
 {
     public static final String CUSTOM_TEST_CONTAINER_CONFIG_FILE_KEY =
             "deltaspike.testcontrol.test-container.config-file";
@@ -60,9 +60,7 @@ public class CdiTestSuiteExtension implements 
BeforeAllCallback, AfterAllCallbac
         STOP_CONTAINER = TestBaseConfig.ContainerIntegration.STOP_CONTAINER;
     }
 
-    public CdiTestSuiteExtension()
-    {
-    }
+
 
     @Override
     public void beforeAll(ExtensionContext extensionContext) throws Exception
diff --git 
a/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/TestConfigSource.java
 
b/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/TestConfigSource.java
new file mode 100644
index 000000000..8ee1ead33
--- /dev/null
+++ 
b/deltaspike/modules/test-control5/api/src/main/java/org/apache/deltaspike/testcontrol5/api/junit/TestConfigSource.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.testcontrol5.api.junit;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.deltaspike.core.spi.activation.Deactivatable;
+import org.apache.deltaspike.core.spi.config.ConfigSource;
+
+//config-sources are already stored per classloader
+//keep it public to allow type-safe deactivation (if needed)
+public 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;
+    }
+}
diff --git 
a/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/RequestAndSessionScopePerTestMethodTest.java
 
b/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/RequestAndSessionScopePerTestMethodTest.java
index 3235484bb..929f48964 100644
--- 
a/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/RequestAndSessionScopePerTestMethodTest.java
+++ 
b/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/RequestAndSessionScopePerTestMethodTest.java
@@ -21,7 +21,8 @@ package org.apache.deltaspike.test.testcontrol5.uc003;
 import org.apache.deltaspike.test.testcontrol5.shared.ApplicationScopedBean;
 import org.apache.deltaspike.test.testcontrol5.shared.RequestScopedBean;
 import org.apache.deltaspike.test.testcontrol5.shared.SessionScopedBean;
-import org.apache.deltaspike.testcontrol5.api.junit.CdiTestExtension;
+import org.apache.deltaspike.testcontrol5.api.junit.CdiTestSuiteExtension;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -33,7 +34,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 //Usually NOT needed! Currently only needed due to our arquillian-setup
 @Tag("SeCategory")
 
-@ExtendWith(CdiTestExtension.class) //starts container once and one session + 
request per test-method
+@ExtendWith(CdiTestSuiteExtension.class) //starts container once and one 
session + request per test-method
+@Disabled //X TODO Disabled for now. We need to define how the test suites in 
Junit5 work with CDI
 //implicitly annotated with @TestControl without the default-scope settings
 public class RequestAndSessionScopePerTestMethodTest
 {
diff --git 
a/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/SessionScopePerTestClassTest.java
 
b/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/SessionScopePerTestClassTest.java
index 55d655005..142d16f0c 100644
--- 
a/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/SessionScopePerTestClassTest.java
+++ 
b/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/SessionScopePerTestClassTest.java
@@ -22,7 +22,8 @@ import 
org.apache.deltaspike.test.testcontrol5.shared.ApplicationScopedBean;
 import org.apache.deltaspike.test.testcontrol5.shared.RequestScopedBean;
 import org.apache.deltaspike.test.testcontrol5.shared.SessionScopedBean;
 import org.apache.deltaspike.testcontrol5.api.TestControl;
-import org.apache.deltaspike.testcontrol5.api.junit.CdiTestExtension;
+import org.apache.deltaspike.testcontrol5.api.junit.CdiTestSuiteExtension;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -35,7 +36,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 //Usually NOT needed! Currently only needed due to our arquillian-setup
 @Tag("SeCategory")
 
-@ExtendWith(CdiTestExtension.class) //starts container and session once and 
one request per test-method
+@ExtendWith(CdiTestSuiteExtension.class) //starts container and session once 
and one request per test-method
+@Disabled //X TODO Disabled for now. We need to define how the test suites in 
Junit5 work with CDI
 @TestControl(startScopes = SessionScoped.class)
 public class SessionScopePerTestClassTest
 {
diff --git 
a/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/TestSuite.java
 
b/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/TestSuite.java
index ced20ca42..6c43ac266 100644
--- 
a/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/TestSuite.java
+++ 
b/deltaspike/modules/test-control5/impl/src/test/java/org/apache/deltaspike/test/testcontrol5/uc003/TestSuite.java
@@ -18,8 +18,15 @@
  */
 package org.apache.deltaspike.test.testcontrol5.uc003;
 
+import org.apache.deltaspike.test.testcontrol5.shared.ApplicationScopedBean;
+import org.apache.deltaspike.testcontrol5.api.junit.CdiTestSuiteExtension;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.platform.suite.api.SelectClasses;
+import org.junit.platform.suite.api.Suite;
 
 //Usually NOT needed! Currently only needed due to our arquillian-setup
 @Tag("SeCategory")
@@ -28,13 +35,28 @@ import org.junit.jupiter.api.Test;
  * JUnit 5 replacement for the JUnit 4 Suite.
  * Each test class with @ExtendWith(CdiTestExtension.class) shares the same 
CDI container.
  */
+@Suite
+@SelectClasses({
+    RequestAndSessionScopePerTestMethodTest.class,
+    SessionScopePerTestClassTest.class
+})
+@ExtendWith(CdiTestSuiteExtension.class) //starts container and session once 
and one request per test-method
+@Disabled //X TODO Disabled for now. We need to define how the test suites in 
Junit5 work with CDI
 public class TestSuite
 {
-    @Test
-    void suiteMarker()
+    @BeforeClass
+    public static void resetSharedState()
     {
-        // This class is a marker for the test suite.
-        // The actual tests are in RequestAndSessionScopePerTestMethodTest and 
SessionScopePerTestClassTest.
-        // They share the same container via CdiTestExtension.
+        ApplicationScopedBean.resetInstanceCount();
+    }
+
+    @AfterClass
+    public static void finalCheckAndCleanup()
+    {
+        if (ApplicationScopedBean.getInstanceCount() != 1)
+        {
+            throw new IllegalStateException("unexpected count");
+        }
+        ApplicationScopedBean.resetInstanceCount();
     }
 }

Reply via email to