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); +}
