[jboss-svn-commits] JBoss Common SVN: r4300 - in arquillian/trunk: impl-base/src/main/java/org/jboss/arquillian/impl/context and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 21 12:41:20 EDT 2010
Author: aslak
Date: 2010-04-21 12:41:18 -0400 (Wed, 21 Apr 2010)
New Revision: 4300
Added:
arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunMode.java
arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunModeType.java
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocal.java
arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocalTestCase.java
Modified:
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ClientProfileBuilder.java
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContainerProfileBuilder.java
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContextLifecycleManager.java
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ProfileBuilder.java
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/StandaloneProfileBuilder.java
arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/EventTestRunnerAdaptorTestCase.java
Log:
ARQ-71 Added support for RunModes. Arquillian can not deploy the archive, but still run the test locally. For testing Servlets, Remote EJBs etc..
Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunMode.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunMode.java (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunMode.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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.jboss.arquillian.api;
+
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies the RunMode a Test should run in.
+ *
+ * @author <a href="mailto:aknutsen at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+ at Documented
+ at Retention(RUNTIME)
+ at Target(ElementType.TYPE)
+public @interface RunMode
+{
+ RunModeType value();
+}
Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunModeType.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunModeType.java (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/RunModeType.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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.jboss.arquillian.api;
+
+/**
+ * Describes the different RunModes a Single test can run in.
+ *
+ * @author <a href="mailto:aknutsen at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public enum RunModeType
+{
+ /**
+ * In LOCAL mode the @Deployment is processed and deployed to the Container,
+ * but the test will not be executed inside the container.
+ */
+ LOCAL,
+
+ /**
+ * In Remote mode the @Deployment is processed and deployed to the container along side the test
+ * case, the test case is executed inside the container. <br/>
+ * This is the default mode when none specified.
+ */
+ REMOTE
+}
Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ClientProfileBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ClientProfileBuilder.java 2010-04-21 16:27:09 UTC (rev 4299)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ClientProfileBuilder.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -35,6 +35,7 @@
import org.jboss.arquillian.impl.handler.ContainerTestExecuter;
import org.jboss.arquillian.impl.handler.ContainerUndeployer;
import org.jboss.arquillian.impl.handler.ExecutionTimer;
+import org.jboss.arquillian.impl.handler.ActivateRunModeTypeLocal;
/**
* ClientContextCreator
@@ -61,7 +62,7 @@
context.register(After.class, timer);
}
- public void buildClassContext(ClassContext context)
+ public void buildClassContext(ClassContext context, Class<?> testClass)
{
// TODO: move out to SerivceLoader
context.add(DeploymentGenerator.class, new ClientDeploymentGenerator(context.getServiceLoader()));
@@ -69,20 +70,13 @@
context.register(BeforeClass.class, new ArchiveGenerator());
context.register(BeforeClass.class, new ContainerDeployer());
context.register(AfterClass.class, new ContainerUndeployer());
+
+ context.register(BeforeClass.class, new ActivateRunModeTypeLocal());
-// if(runLocally)
-// {
-// context.register(Before.class, new TestCaseEnricher());
-// context.register(Test.class, new TestEventExecuter());
-// }
-// else
-// {
-// context.register(Test.class, new ContainerTestExecuter());
-// }
}
- public void buildTestContext(TestContext context)
+ public void buildTestContext(TestContext context, Object testInstance)
{
context.register(Test.class, new ContainerTestExecuter());
}
Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContainerProfileBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContainerProfileBuilder.java 2010-04-21 16:27:09 UTC (rev 4299)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContainerProfileBuilder.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -33,11 +33,11 @@
{
}
- public void buildClassContext(ClassContext context)
+ public void buildClassContext(ClassContext context, Class<?> testClass)
{
}
- public void buildTestContext(TestContext context)
+ public void buildTestContext(TestContext context, Object testInstance)
{
context.register(Before.class, new TestCaseEnricher());
context.register(Test.class, new TestEventExecuter());
Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContextLifecycleManager.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContextLifecycleManager.java 2010-04-21 16:27:09 UTC (rev 4299)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ContextLifecycleManager.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -130,7 +130,7 @@
if(!classContextStore.contains(testClass))
{
ClassContext classContext = new ClassContext(createRestoreSuiteContext());
- profileBuilder.buildClassContext(classContext);
+ profileBuilder.buildClassContext(classContext, testClass);
classContextStore.putIfAbsent(
testClass,
@@ -169,7 +169,7 @@
if(!testContextStore.contains(testInstance))
{
TestContext testContext = new TestContext(createRestoreClassContext(testInstance.getClass()));
- profileBuilder.buildTestContext(testContext);
+ profileBuilder.buildTestContext(testContext, testInstance);
testContextStore.putIfAbsent(
testInstance,
testContext);
Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ProfileBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ProfileBuilder.java 2010-04-21 16:27:09 UTC (rev 4299)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/ProfileBuilder.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -32,10 +32,10 @@
/**
* @param context
*/
- void buildClassContext(ClassContext context);
+ void buildClassContext(ClassContext context, Class<?> testClass);
/**
* @param context
*/
- void buildTestContext(TestContext context);
+ void buildTestContext(TestContext context, Object testInstance);
}
Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/StandaloneProfileBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/StandaloneProfileBuilder.java 2010-04-21 16:27:09 UTC (rev 4299)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/context/StandaloneProfileBuilder.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -33,7 +33,7 @@
* @see org.jboss.arquillian.impl.context.ProfileBuilder#buildTestContext(org.jboss.arquillian.impl.context.TestContext)
*/
@Override
- public void buildTestContext(TestContext context)
+ public void buildTestContext(TestContext context, Object testInstance)
{
context.register(Before.class, new TestCaseEnricher());
context.register(Test.class, new TestEventExecuter());
Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocal.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocal.java (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocal.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -0,0 +1,92 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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.jboss.arquillian.impl.handler;
+
+import org.jboss.arquillian.api.RunMode;
+import org.jboss.arquillian.api.RunModeType;
+import org.jboss.arquillian.impl.context.ClassContext;
+import org.jboss.arquillian.impl.event.EventHandler;
+import org.jboss.arquillian.impl.event.type.BeforeClass;
+import org.jboss.arquillian.spi.ContainerMethodExecutor;
+import org.jboss.arquillian.spi.TestMethodExecutor;
+import org.jboss.arquillian.spi.TestResult;
+
+/**
+ * Handler that will setup the context as defined by the {@link RunModeType#LOCAL}. <br/>
+ * Only activates local run mode if the TestClass is annotated with a {@link RunModeType#LOCAL} {@link RunMode}.<br/>
+ * <br/>
+ *
+ * <b>Exports:</b><br/>
+ * {@link ContainerMethodExecutor}<br/>
+ *
+ * @author <a href="mailto:aknutsen at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public class ActivateRunModeTypeLocal implements EventHandler<ClassContext, BeforeClass>
+{
+
+ @Override
+ public void callback(ClassContext context, BeforeClass event)
+ throws Exception
+ {
+ if(event.getTestClass().isAnnotationPresent(RunMode.class))
+ {
+ RunModeType runModeType = event.getTestClass().getAnnotation(RunMode.class).value();
+ if(RunModeType.LOCAL == runModeType)
+ {
+ context.add(ContainerMethodExecutor.class, new LocalMethodExecutor());
+ }
+ }
+ }
+
+ // TODO: this is a copy of the protocol-local Executor. Move to SPI and remove protocol local?
+ private static class LocalMethodExecutor implements ContainerMethodExecutor
+ {
+ @Override
+ public TestResult invoke(TestMethodExecutor testMethodExecutor)
+ {
+ try
+ {
+ testMethodExecutor.invoke();
+
+ return new TestResult()
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Throwable getThrowable() { return null; }
+
+ @Override
+ public Status getStatus() { return Status.PASSED; }
+ };
+ }
+ catch (final Throwable e)
+ {
+ return new TestResult()
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Status getStatus() {return Status.FAILED; }
+
+ @Override
+ public Throwable getThrowable() {return e;}
+ };
+ }
+ }
+ }
+}
Modified: arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/EventTestRunnerAdaptorTestCase.java
===================================================================
--- arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/EventTestRunnerAdaptorTestCase.java 2010-04-21 16:27:09 UTC (rev 4299)
+++ arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/EventTestRunnerAdaptorTestCase.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -88,7 +88,7 @@
context.register(org.jboss.arquillian.impl.event.type.AfterClass.class, classEventHandler);
return null;
}
- }).when(profileBuilder).buildClassContext(Mockito.any(ClassContext.class));
+ }).when(profileBuilder).buildClassContext(Mockito.any(ClassContext.class), Mockito.any(Class.class));
Mockito.doAnswer(new Answer<Void>()
{
@@ -100,7 +100,7 @@
context.register(org.jboss.arquillian.impl.event.type.After.class, testEventHandler);
return null;
}
- }).when(profileBuilder).buildTestContext(Mockito.any(TestContext.class));
+ }).when(profileBuilder).buildTestContext(Mockito.any(TestContext.class), Mockito.any(Class.class));
}
@Test
Added: arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocalTestCase.java
===================================================================
--- arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocalTestCase.java (rev 0)
+++ arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/handler/ActivateRunModeTypeLocalTestCase.java 2010-04-21 16:41:18 UTC (rev 4300)
@@ -0,0 +1,92 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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.jboss.arquillian.impl.handler;
+
+import junit.framework.Assert;
+
+import org.jboss.arquillian.api.RunMode;
+import org.jboss.arquillian.api.RunModeType;
+import org.jboss.arquillian.impl.context.ClassContext;
+import org.jboss.arquillian.impl.context.SuiteContext;
+import org.jboss.arquillian.impl.event.type.BeforeClass;
+import org.jboss.arquillian.spi.ContainerMethodExecutor;
+import org.jboss.arquillian.spi.ServiceLoader;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+
+/**
+ * Test case to
+ *
+ * @author <a href="mailto:aknutsen at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+ at RunWith(MockitoJUnitRunner.class)
+public class ActivateRunModeTypeLocalTestCase
+{
+ @Mock
+ private ServiceLoader serviceLoader;
+
+ @Test
+ public void shouldExportContainerMethodExecutorIfLocalMode() throws Exception
+ {
+ ClassContext context = new ClassContext(new SuiteContext(serviceLoader));
+
+ ActivateRunModeTypeLocal handler = new ActivateRunModeTypeLocal();
+ handler.callback(context, new BeforeClass(TestWithRunModeLocal.class));
+
+ Assert.assertNotNull(
+ "Should have exported a " + ContainerMethodExecutor.class,
+ context.get(ContainerMethodExecutor.class));
+ }
+
+ @Test
+ public void shouldNotExportContainerMethodExecutorIfRemoteMode() throws Exception
+ {
+ ClassContext context = new ClassContext(new SuiteContext(serviceLoader));
+
+ ActivateRunModeTypeLocal handler = new ActivateRunModeTypeLocal();
+ handler.callback(context, new BeforeClass(TestWithRunModeRemote.class));
+
+ Assert.assertNull(
+ "Should not have exported a " + ContainerMethodExecutor.class,
+ context.get(ContainerMethodExecutor.class));
+ }
+
+ @Test
+ public void shouldNotExportContainerMethodExecutorIfNoModeSpecified() throws Exception
+ {
+ ClassContext context = new ClassContext(new SuiteContext(serviceLoader));
+
+ ActivateRunModeTypeLocal handler = new ActivateRunModeTypeLocal();
+ handler.callback(context, new BeforeClass(TestWithNoRunMode.class));
+
+ Assert.assertNull(
+ "Should not have exported a " + ContainerMethodExecutor.class,
+ context.get(ContainerMethodExecutor.class));
+ }
+
+ @RunMode(RunModeType.LOCAL)
+ private static class TestWithRunModeLocal { }
+
+ @RunMode(RunModeType.REMOTE)
+ private static class TestWithRunModeRemote { }
+
+ private static class TestWithNoRunMode { }
+}
More information about the jboss-svn-commits
mailing list