[jboss-svn-commits] JBoss Common SVN: r4402 - in arquillian/trunk/junit/src: test/java/org/jboss/arquillian/junit and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 20 17:52:00 EDT 2010


Author: aslak
Date: 2010-05-20 17:52:00 -0400 (Thu, 20 May 2010)
New Revision: 4402

Added:
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/JUnitIntegrationTestCase.java
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestContainerConfiguration.java
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeployableContainer.java
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeploymentPackager.java
   arquillian/trunk/junit/src/test/resources/META-INF/
   arquillian/trunk/junit/src/test/resources/META-INF/services/
   arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.ContainerConfiguration
   arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeployableContainer
   arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeploymentPackager
Modified:
   arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java
Log:
ARQ-106 Based on how Eclipse calls JUnit, AfterSuite is now only called by the last created Runner. This avoids Arquillian event/context confusion.


Modified: arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java
===================================================================
--- arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java	2010-05-20 11:47:42 UTC (rev 4401)
+++ arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java	2010-05-20 21:52:00 UTC (rev 4402)
@@ -47,9 +47,19 @@
 {
    private static ThreadLocal<TestRunnerAdaptor> deployableTest = new ThreadLocal<TestRunnerAdaptor>();
    
+   /*
+    * Eclipse hack:
+    * When running multiple TestCases, Eclipse will create a new runner for each of them.
+    * This results in that AfterSuite is call pr TestCase, but BeforeSuite only on the first created instance.
+    * A instance of all TestCases are created before the first one is started, so we keep track of which one 
+    * was the last one created. The last one created is the only one allowed to call AfterSuite.
+    */
+   private static ThreadLocal<Arquillian> lastCreatedRunner = new ThreadLocal<Arquillian>();
+   
    public Arquillian(Class<?> klass) throws InitializationError
    {
       super(klass);
+      lastCreatedRunner.set(this);
       if(deployableTest.get() == null) 
       {
          Configuration configuration = new XmlConfigurationBuilder().build();
@@ -91,9 +101,10 @@
          {
             try  
             {
-               if(deployableTest.get() != null) 
+               if(deployableTest.get() != null && lastCreatedRunner.get() == Arquillian.this) 
                {
                   deployableTest.get().afterSuite();
+                  lastCreatedRunner.set(null);
                }
             } 
             catch (Exception e) 
@@ -219,4 +230,4 @@
          }
       };
    }
-}
+}
\ No newline at end of file

Added: arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/JUnitIntegrationTestCase.java
===================================================================
--- arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/JUnitIntegrationTestCase.java	                        (rev 0)
+++ arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/JUnitIntegrationTestCase.java	2010-05-20 21:52:00 UTC (rev 4402)
@@ -0,0 +1,118 @@
+/*
+ * 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.junit;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.jboss.arquillian.api.Deployment;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Request;
+import org.junit.runner.Result;
+import org.junit.runner.RunWith;
+
+
+/**
+ * Verify the that JUnit integration adaptor fires the expected events.
+ *
+ * @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public class JUnitIntegrationTestCase
+{
+   public static Map<String, Integer> containerCallbacks = new HashMap<String, Integer>();
+   static 
+   {
+      containerCallbacks.put("setup", 0);
+      containerCallbacks.put("start", 0);
+      containerCallbacks.put("stop", 0);
+      containerCallbacks.put("deploy", 0);
+      containerCallbacks.put("undeploy", 0);
+      containerCallbacks.put("shouldBeInvoked", 0);
+   }
+   
+   public static void wasCalled(String name) 
+   {
+      if(containerCallbacks.containsKey(name))
+      {
+         containerCallbacks.put(name, containerCallbacks.get(name) + 1);
+      }
+      else 
+      {
+         throw new RuntimeException("Unknown callback: " + name);
+      }
+   }
+   
+   @Test
+   public void shouldHandleTheLifecycleCorrectlyOnMultipleTestRuns() throws Throwable 
+   {
+      JUnitCore runner = new JUnitCore();
+      Result result = runner.run(
+            Request.classes(TestClass1.class, TestClass1.class));
+
+      if(result.getFailures().size() > 0)
+      {
+         throw result.getFailures().get(0).getException();
+      }
+      
+      Assert.assertTrue(result.wasSuccessful());
+      
+      assertCallbacks();
+   }
+   
+   private void assertCallbacks() throws Exception
+   {
+      Assert.assertEquals("Verify container only setup once", 
+            1, (int)containerCallbacks.get("setup"));
+
+      Assert.assertEquals("Verify container only started once", 
+            1, (int)containerCallbacks.get("start"));
+
+      Assert.assertEquals("Verify container only stopped once", 
+            1, (int)containerCallbacks.get("stop"));
+
+      Assert.assertEquals("Verify deployed twice", 
+            2, (int)containerCallbacks.get("deploy"));
+
+      Assert.assertEquals("Verify undeployed twice", 
+            2, (int)containerCallbacks.get("undeploy"));
+      
+      Assert.assertEquals("Verify test invoked twice", 
+            2, (int)containerCallbacks.get("shouldBeInvoked"));
+   }
+   
+   @RunWith(Arquillian.class)
+   public static class TestClass1 
+   {
+      @Deployment
+      public static JavaArchive create() 
+      {
+         return ShrinkWrap.create("test.jar", JavaArchive.class);
+      }
+      
+      @Test
+      public void shouldBeInvoked() 
+      {
+         JUnitIntegrationTestCase.wasCalled("shouldBeInvoked");
+      }
+   }
+}

Added: arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestContainerConfiguration.java
===================================================================
--- arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestContainerConfiguration.java	                        (rev 0)
+++ arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestContainerConfiguration.java	2010-05-20 21:52:00 UTC (rev 4402)
@@ -0,0 +1,37 @@
+/*
+ * 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.junit.testspi;
+
+import org.jboss.arquillian.spi.ContainerConfiguration;
+import org.jboss.arquillian.spi.ContainerProfile;
+
+/**
+ * TestContainerConfiguration
+ *
+ * @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public class TestContainerConfiguration implements ContainerConfiguration
+{
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.ContainerConfiguration#getContainerProfile()
+    */
+   public ContainerProfile getContainerProfile()
+   {
+      return ContainerProfile.STANDALONE;
+   }
+}

Added: arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeployableContainer.java
===================================================================
--- arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeployableContainer.java	                        (rev 0)
+++ arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeployableContainer.java	2010-05-20 21:52:00 UTC (rev 4402)
@@ -0,0 +1,97 @@
+/*
+ * 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.junit.testspi;
+
+import org.jboss.arquillian.junit.JUnitIntegrationTestCase;
+import org.jboss.arquillian.spi.Configuration;
+import org.jboss.arquillian.spi.ContainerMethodExecutor;
+import org.jboss.arquillian.spi.Context;
+import org.jboss.arquillian.spi.DeployableContainer;
+import org.jboss.arquillian.spi.DeploymentException;
+import org.jboss.arquillian.spi.LifecycleException;
+import org.jboss.arquillian.spi.TestMethodExecutor;
+import org.jboss.arquillian.spi.TestResult;
+import org.jboss.arquillian.spi.TestResult.Status;
+import org.jboss.shrinkwrap.api.Archive;
+
+/**
+ * TestDeployableContainer
+ *
+ * @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public class TestDeployableContainer implements DeployableContainer
+{
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeployableContainer#setup(org.jboss.arquillian.spi.Context, org.jboss.arquillian.spi.Configuration)
+    */
+   public void setup(Context context, Configuration configuration)
+   {
+      JUnitIntegrationTestCase.wasCalled("setup");
+   }
+
+
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeployableContainer#start(org.jboss.arquillian.spi.Context)
+    */
+   public void start(Context context) throws LifecycleException
+   {
+      JUnitIntegrationTestCase.wasCalled("start");
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeployableContainer#stop(org.jboss.arquillian.spi.Context)
+    */
+   public void stop(Context context) throws LifecycleException
+   {
+      JUnitIntegrationTestCase.wasCalled("stop");
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeployableContainer#deploy(org.jboss.arquillian.spi.Context, org.jboss.shrinkwrap.api.Archive)
+    */
+   public ContainerMethodExecutor deploy(Context context, Archive<?> archive) throws DeploymentException
+   {
+      JUnitIntegrationTestCase.wasCalled("deploy");
+      return new ContainerMethodExecutor()
+      {
+         public TestResult invoke(TestMethodExecutor testMethodExecutor)
+         {
+            TestResult result = new TestResult();
+            try
+            {
+               testMethodExecutor.invoke();
+               result.setStatus(Status.PASSED);
+            }
+            catch (Throwable e) 
+            {
+               result.setStatus(Status.FAILED);
+               result.setThrowable(e);
+            }
+            return result;
+         }
+      };
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeployableContainer#undeploy(org.jboss.arquillian.spi.Context, org.jboss.shrinkwrap.api.Archive)
+    */
+   public void undeploy(Context context, Archive<?> archive) throws DeploymentException
+   {
+      JUnitIntegrationTestCase.wasCalled("undeploy");
+   }
+}

Added: arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeploymentPackager.java
===================================================================
--- arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeploymentPackager.java	                        (rev 0)
+++ arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/testspi/TestDeploymentPackager.java	2010-05-20 21:52:00 UTC (rev 4402)
@@ -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.junit.testspi;
+
+import java.util.Collection;
+
+import org.jboss.arquillian.spi.DeploymentPackager;
+import org.jboss.shrinkwrap.api.Archive;
+
+/**
+ * TestDeploymentPackager
+ *
+ * @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @version $Revision: $
+ */
+public class TestDeploymentPackager implements DeploymentPackager
+{
+   /* (non-Javadoc)
+    * @see org.jboss.arquillian.spi.DeploymentPackager#generateDeployment(org.jboss.shrinkwrap.api.Archive, java.util.Collection)
+    */
+   public Archive<?> generateDeployment(Archive<?> applicationArchive, Collection<Archive<?>> auxiliaryArchives)
+   {
+      return applicationArchive;
+   }
+}

Added: arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.ContainerConfiguration
===================================================================
--- arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.ContainerConfiguration	                        (rev 0)
+++ arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.ContainerConfiguration	2010-05-20 21:52:00 UTC (rev 4402)
@@ -0,0 +1 @@
+org.jboss.arquillian.junit.testspi.TestContainerConfiguration
\ No newline at end of file

Added: arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeployableContainer
===================================================================
--- arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeployableContainer	                        (rev 0)
+++ arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeployableContainer	2010-05-20 21:52:00 UTC (rev 4402)
@@ -0,0 +1 @@
+org.jboss.arquillian.junit.testspi.TestDeployableContainer
\ No newline at end of file

Added: arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeploymentPackager
===================================================================
--- arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeploymentPackager	                        (rev 0)
+++ arquillian/trunk/junit/src/test/resources/META-INF/services/org.jboss.arquillian.spi.DeploymentPackager	2010-05-20 21:52:00 UTC (rev 4402)
@@ -0,0 +1 @@
+org.jboss.arquillian.junit.testspi.TestDeploymentPackager
\ No newline at end of file



More information about the jboss-svn-commits mailing list