[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