Repository: deltaspike
Updated Branches:
  refs/heads/master 2c9a79d8b -> ce629272a


DELTASPIKE-598 TestAware as optional contract for implementations of 
ExternalContainer


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

Branch: refs/heads/master
Commit: c04453c8434edbc786e011c281267ec3652f0ed6
Parents: 2c9a79d
Author: gpetracek <[email protected]>
Authored: Mon May 19 20:49:22 2014 +0200
Committer: gpetracek <[email protected]>
Committed: Mon May 19 20:49:22 2014 +0200

----------------------------------------------------------------------
 .../testcontrol/api/junit/CdiTestRunner.java    | 41 ++++++++++++++++----
 .../deltaspike/testcontrol/spi/TestAware.java   | 28 +++++++++++++
 2 files changed, 61 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/c04453c8/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 f52b40a..093751d 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
@@ -31,6 +31,7 @@ import org.apache.deltaspike.core.util.ServiceUtils;
 import org.apache.deltaspike.testcontrol.api.TestControl;
 import org.apache.deltaspike.testcontrol.api.literal.TestControlLiteral;
 import org.apache.deltaspike.testcontrol.spi.ExternalContainer;
+import org.apache.deltaspike.testcontrol.spi.TestAware;
 import 
org.apache.deltaspike.testcontrol.spi.junit.TestStatementDecoratorFactory;
 import org.junit.Test;
 import org.junit.internal.runners.statements.FailOnTimeout;
@@ -50,6 +51,7 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Singleton;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -153,7 +155,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
         ContainerAwareTestContext currentTestContext =
                 new ContainerAwareTestContext(testControl, this.testContext);
 
-        currentTestContext.applyBeforeMethodConfig();
+        currentTestContext.applyBeforeMethodConfig(method.getMethod());
 
         try
         {
@@ -237,7 +239,9 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
     @Override
     protected Statement withBeforeClasses(Statement statement)
     {
-        return new BeforeClassStatement(super.withBeforeClasses(statement), 
this.testContext);
+        return new BeforeClassStatement(super.withBeforeClasses(statement),
+            this.testContext,
+            getTestClass().getJavaClass());
     }
 
     @Override
@@ -334,17 +338,19 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
     {
         private final Statement wrapped;
         private final ContainerAwareTestContext testContext;
+        private final Class testClass;
 
-        BeforeClassStatement(Statement statement, ContainerAwareTestContext 
testContext)
+        BeforeClassStatement(Statement statement, ContainerAwareTestContext 
testContext, Class testClass)
         {
             this.wrapped = statement;
             this.testContext = testContext;
+            this.testClass = testClass;
         }
 
         @Override
         public void evaluate() throws Throwable
         {
-            testContext.applyBeforeClassConfig();
+            testContext.applyBeforeClassConfig(this.testClass);
             wrapped.evaluate();
         }
     }
@@ -431,7 +437,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
             return this.testControl.logHandler();
         }
 
-        void applyBeforeClassConfig()
+        void applyBeforeClassConfig(Class testClass)
         {
             CdiContainer container = CdiContainerLoader.getCdiContainer();
 
@@ -442,7 +448,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
                     container.boot();
                     setContainerStarted();
 
-                    bootExternalContainers();
+                    bootExternalContainers(testClass);
                 }
             }
 
@@ -462,7 +468,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
             startScopes(container, restrictedScopes.toArray(new 
Class[restrictedScopes.size()]));
         }
 
-        private void bootExternalContainers()
+        private void bootExternalContainers(Class testClass)
         {
             if (!this.testControl.startExternalContainers())
             {
@@ -485,6 +491,10 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
                 {
                     try
                     {
+                        if (externalContainer instanceof TestAware)
+                        {
+                            
((TestAware)externalContainer).setTestClass(testClass);
+                        }
                         externalContainer.boot();
                     }
                     catch (RuntimeException e)
@@ -535,11 +545,12 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
             }
         }
 
-        void applyBeforeMethodConfig()
+        void applyBeforeMethodConfig(Method testMethod)
         {
             this.previousProjectStage = 
ProjectStageProducer.getInstance().getProjectStage();
             ProjectStageProducer.setProjectStage(this.projectStage);
 
+            setCurrentTestMethod(testMethod);
             startScopes(CdiContainerLoader.getCdiContainer());
         }
 
@@ -551,6 +562,7 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
             }
             finally
             {
+                setCurrentTestMethod(null);
                 ProjectStageProducer.setProjectStage(previousProjectStage);
                 previousProjectStage = null;
             }
@@ -697,5 +709,18 @@ public class CdiTestRunner extends BlockJUnit4ClassRunner
             }
             return result;
         }
+
+        private void setCurrentTestMethod(Method testMethod)
+        {
+            List<ExternalContainer> externalContainerList = 
collectExternalContainers(this);
+
+            for (ExternalContainer externalContainer : externalContainerList)
+            {
+                if (externalContainer instanceof TestAware)
+                {
+                    ((TestAware)externalContainer).setTestMethod(testMethod);
+                }
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/c04453c8/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/TestAware.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/TestAware.java
 
b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/TestAware.java
new file mode 100644
index 0000000..8cfafee
--- /dev/null
+++ 
b/deltaspike/modules/test-control/api/src/main/java/org/apache/deltaspike/testcontrol/spi/TestAware.java
@@ -0,0 +1,28 @@
+/*
+ * 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.testcontrol.spi;
+
+import java.lang.reflect.Method;
+
+public interface TestAware
+{
+    void setTestClass(Class testClass);
+
+    void setTestMethod(Method testMethod);
+}

Reply via email to