[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