[jboss-svn-commits] JBoss Common SVN: r3684 - in arquillian/trunk: api and 46 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 13 07:47:54 EST 2009


Author: aslak
Date: 2009-11-13 07:47:53 -0500 (Fri, 13 Nov 2009)
New Revision: 3684

Added:
   arquillian/trunk/api/
   arquillian/trunk/api/pom.xml
   arquillian/trunk/api/src/
   arquillian/trunk/api/src/main/
   arquillian/trunk/api/src/main/java/
   arquillian/trunk/api/src/main/java/org/
   arquillian/trunk/api/src/main/java/org/jboss/
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Artifact.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactGenerator.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactType.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Controlable.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployer.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployment.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ExpectedException.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Packaging.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/PackagingType.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ResourceDescriptor.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestMethodExecutor.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestResult.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerController.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerDeployer.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ForceRestartController.java
   arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/NoContainerController.java
   arquillian/trunk/api/src/main/resources/
   arquillian/trunk/build/
   arquillian/trunk/build/pom.xml
   arquillian/trunk/demo/
   arquillian/trunk/demo/pom.xml
   arquillian/trunk/demo/src/
   arquillian/trunk/demo/src/main/
   arquillian/trunk/demo/src/main/java/
   arquillian/trunk/demo/src/main/java/com/
   arquillian/trunk/demo/src/main/java/com/acme/
   arquillian/trunk/demo/src/main/java/com/acme/ejb/
   arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManager.java
   arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManagerBean.java
   arquillian/trunk/demo/src/main/resources/
   arquillian/trunk/demo/src/test/
   arquillian/trunk/demo/src/test/java/
   arquillian/trunk/demo/src/test/java/com/
   arquillian/trunk/demo/src/test/java/com/acme/
   arquillian/trunk/demo/src/test/java/com/acme/ejb/
   arquillian/trunk/demo/src/test/java/com/acme/ejb/GreetingManagerTest.java
   arquillian/trunk/demo/src/test/resources/
   arquillian/trunk/impl-base/
   arquillian/trunk/impl-base/pom.xml
   arquillian/trunk/impl-base/src/
   arquillian/trunk/impl-base/src/main/
   arquillian/trunk/impl-base/src/main/java/
   arquillian/trunk/impl-base/src/main/java/org/
   arquillian/trunk/impl-base/src/main/java/org/jboss/
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTest.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTestBuilder.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/JbossEmbeddedContainer.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/NullArtifactGenerator.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/ServletMethodExecutor.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/TestResultImpl.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/UserCreatedArtifactGenerator.java
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/runner/
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/runner/servlet/
   arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/runner/servlet/InContainerListener.java
   arquillian/trunk/impl-base/src/main/resources/
   arquillian/trunk/impl-base/src/test/
   arquillian/trunk/impl-base/src/test/java/
   arquillian/trunk/impl-base/src/test/resources/
   arquillian/trunk/junit/
   arquillian/trunk/junit/pom.xml
   arquillian/trunk/junit/src/
   arquillian/trunk/junit/src/main/
   arquillian/trunk/junit/src/main/java/
   arquillian/trunk/junit/src/main/java/org/
   arquillian/trunk/junit/src/main/java/org/jboss/
   arquillian/trunk/junit/src/main/java/org/jboss/arquillian/
   arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/
   arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java
   arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/ServletTestRunner.java
   arquillian/trunk/junit/src/main/resources/
   arquillian/trunk/junit/src/test/
   arquillian/trunk/junit/src/test/java/
   arquillian/trunk/junit/src/test/java/org/
   arquillian/trunk/junit/src/test/java/org/jboss/
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/
   arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/APITestCase.java
   arquillian/trunk/junit/src/test/resources/
   arquillian/trunk/pom.xml
Log:
ARQ-16 ARQ-17 ARQ-6 ARQ-5 ARQ-8 Initial commit fo structure, first api test and Devoxx Demo


Added: arquillian/trunk/api/pom.xml
===================================================================
--- arquillian/trunk/api/pom.xml	                        (rev 0)
+++ arquillian/trunk/api/pom.xml	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+   <!-- Parent -->
+   <parent>
+      <groupId>org.jboss.arquillian</groupId>
+      <artifactId>arquillian-parent</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+      <relativePath>../build/pom.xml</relativePath>
+   </parent>
+
+   <!-- Model Version -->
+   <modelVersion>4.0.0</modelVersion>
+
+   <!-- Artifact Configuration -->
+   <artifactId>arquillian-api</artifactId>
+   <version>0.0.1-SNAPSHOT</version>
+   <name>Arquillian API</name>
+   <description>Client View of the Arquillian Project</description>
+
+
+   <!-- Properties -->
+   <properties>
+
+      <!-- Versioning -->
+
+   </properties>
+
+   <!-- Dependencies -->
+   <dependencies>
+      <dependency>
+         <groupId>org.jboss.tmpdpl</groupId>
+         <artifactId>tmpdpl-api</artifactId>
+      </dependency>
+      <dependency>
+         <groupId>org.jboss.tmpdpl</groupId>
+         <artifactId>tmpdpl-api-shrinkwrap</artifactId>
+         <version>0.1.1-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+         <groupId>org.jboss.shrinkwrap</groupId>
+         <artifactId>shrinkwrap-api</artifactId>
+      </dependency>
+      <dependency>
+         <groupId>org.jboss.shrinkwrap</groupId>
+         <artifactId>shrinkwrap-impl-base</artifactId>
+      </dependency>
+   </dependencies>
+</project>
+

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Artifact.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Artifact.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Artifact.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,31 @@
+package org.jboss.arquillian.api;
+
+import java.lang.annotation.Documented;
+import static java.lang.annotation.ElementType.TYPE;
+import java.lang.annotation.Retention;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Target;
+
+/**
+ * Mark this class as requiring an artifact to be deployed for the
+ * container. By default all classes in the current package, as well as support
+ * classes, will be deployed. The resultant artifact may not support session beans.
+ * <p/>
+ * This test may be a unit test (in which case, if the suite is run in
+ * standalone mode, the artifact itself won't be deployed, just the contained
+ * classes and xml config files).
+ *
+ * @author Pete Muir
+ * @see Classes
+ * @see IntegrationTest
+ * @see Packaging
+ * @see Resources
+ */
+ at Documented
+ at Retention(RUNTIME)
+ at Target(TYPE)
+public @interface Artifact {
+	ArtifactType artifactType() default ArtifactType.JSR299;
+
+	boolean addCurrentPackage() default true;
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactGenerator.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactGenerator.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactGenerator.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,11 @@
+package org.jboss.arquillian.api;
+
+import org.jboss.shrinkwrap.api.Archive;
+
+public interface ArtifactGenerator 
+{
+   // Packaging SPI
+   Archive<?> generateArtifact(Class<?> testCase);
+   void generateArtifact(Class<?> testCase, Archive<?> baseArtifact);
+
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactType.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactType.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ArtifactType.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,5 @@
+package org.jboss.arquillian.api;
+
+public enum ArtifactType {
+	JSR299, JSR303
+}
\ No newline at end of file

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Controlable.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Controlable.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Controlable.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,10 @@
+package org.jboss.arquillian.api;
+
+// TODO: throws ControllerException
+public interface Controlable
+{
+   void start() throws Exception;
+   
+   void stop() throws Exception;
+   
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployer.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployer.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployer.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,12 @@
+package org.jboss.arquillian.api;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.tmpdpl.api.container.DeploymentException;
+
+public interface Deployer
+{
+
+   void deploy(Archive<?> archive) throws DeploymentException;
+   void undeploy(Archive<?> archive) throws DeploymentException;
+
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployment.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployment.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Deployment.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,15 @@
+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;
+
+ at Documented
+ at Retention(RUNTIME)
+ at Target(ElementType.METHOD)
+public @interface Deployment {
+
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ExpectedException.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ExpectedException.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ExpectedException.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,35 @@
+package org.jboss.arquillian.api;
+
+/**
+ * Thrown if an exception was expected, but non occurred
+ * 
+ * @author Pete Muir
+ *
+ */
+public class ExpectedException extends RuntimeException
+{
+   private static final long serialVersionUID = 1L;
+
+   public ExpectedException()
+   {
+      super();
+   }
+
+   public ExpectedException(String message, Throwable cause)
+   {
+      super(message, cause);
+   }
+
+   public ExpectedException(String message)
+   {
+      super(message);
+   }
+
+   public ExpectedException(Throwable cause)
+   {
+      super(cause);
+   }
+   
+   
+   
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Packaging.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Packaging.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/Packaging.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,28 @@
+package org.jboss.arquillian.api;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Mark this test as requiring specific packaging when deployed to a container
+ * for intgration testing.
+ * 
+ * @see IntegrationTest
+ * @see Artifact
+ * 
+ * @author Pete Muir
+ *
+ */
+ at Documented
+ at Retention(RUNTIME)
+ at Target(TYPE)
+public @interface Packaging
+{
+   
+   PackagingType value() default PackagingType.WAR;
+   
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/PackagingType.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/PackagingType.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/PackagingType.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,5 @@
+package org.jboss.arquillian.api;
+
+public enum PackagingType {
+	EAR, WAR
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ResourceDescriptor.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ResourceDescriptor.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/ResourceDescriptor.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,12 @@
+package org.jboss.arquillian.api;
+
+import java.net.URL;
+
+public interface ResourceDescriptor
+{
+   
+   public String getName();
+   
+   public URL getSource();
+   
+}
\ No newline at end of file

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestMethodExecutor.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestMethodExecutor.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestMethodExecutor.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,11 @@
+package org.jboss.arquillian.api;
+
+import java.lang.reflect.Method;
+
+public interface TestMethodExecutor
+{
+   Method getMethod();
+   Object getInstance();
+   void invoke() throws Throwable;
+   
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestResult.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestResult.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/TestResult.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,47 @@
+package org.jboss.arquillian.api;
+
+import java.io.Serializable;
+
+/**
+ * A test result which may be serialized for communicate between client and
+ * server
+ * 
+ * @author Pete Muir
+ *
+ */
+public interface TestResult extends Serializable
+{
+   
+   /**
+    * The test status
+    * @author Pete Muir
+    *
+    */
+   public enum Status
+   {
+      /**
+       * The test passed
+       */
+      PASSED,
+      /**
+       * The test failed
+       */
+      FAILED,
+      /**
+       * The test was skipped due to some deployment problem
+       */
+      SKIPPED;
+   }
+   
+   /**
+    * Get the status of this test
+    */
+   public Status getStatus();
+   
+   /**
+    * If the test failed, the exception that was thrown. It does not need to be
+    * the root cause.
+    */
+   public Throwable getThrowable();
+   
+}
\ No newline at end of file

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerController.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerController.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerController.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,24 @@
+package org.jboss.arquillian.api.container;
+
+import org.jboss.arquillian.api.Controlable;
+import org.jboss.tmpdpl.api.shrinkwrap.container.ArchiveContainer;
+
+public class ContainerController implements Controlable
+{
+   private ArchiveContainer container;
+
+   public ContainerController(ArchiveContainer containers)
+   {
+      this.container = containers;
+   }
+   
+   public void start() throws Exception
+   {
+      //container.setup();
+   }
+   
+   public void stop() throws Exception
+   {
+      //container.cleanup();
+   }
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerDeployer.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerDeployer.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ContainerDeployer.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,48 @@
+package org.jboss.arquillian.api.container;
+
+import org.jboss.arquillian.api.Deployer;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.tmpdpl.api.container.DeploymentException;
+import org.jboss.tmpdpl.api.shrinkwrap.container.ArchiveContainer;
+
+public class ContainerDeployer implements Deployer
+{
+   private ArchiveContainer container;
+   
+   public ContainerDeployer(ArchiveContainer container)
+   {
+      this.container = container;
+   }
+
+   public void deploy(Archive<?> archive) throws DeploymentException
+   {
+      if(archive == null) 
+      {
+         throw new IllegalArgumentException("Can not deploy null artifact");
+      }
+      try 
+      {
+         container.deploy(archive);
+      } 
+      catch (Exception e) 
+      {
+         throw new DeploymentException("Could not deploy artifact " + archive.getName(), e);
+      }
+   }
+
+   public void undeploy(Archive<?> archive) throws DeploymentException
+   {
+      if(archive == null) 
+      {
+         throw new IllegalArgumentException("Can not undeploy null artifact");
+      }
+      try 
+      {
+         container.undeploy(archive);
+      } 
+      catch (Exception e) 
+      {
+         throw new DeploymentException("Could not undeploy artifact " + archive.getName(), e);
+      }
+   }
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ForceRestartController.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ForceRestartController.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/ForceRestartController.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,29 @@
+package org.jboss.arquillian.api.container;
+
+import org.jboss.arquillian.api.Controlable;
+import org.jboss.tmpdpl.api.shrinkwrap.container.ArchiveContainer;
+
+public class ForceRestartController implements Controlable
+{
+   private ArchiveContainer container;
+   
+   public ForceRestartController(ArchiveContainer containers)
+   {
+      this.container = containers;
+   }
+
+   public void start() throws Exception
+   {
+      try {
+         //container.cleanup();
+      } catch (Exception e) {
+         // no-op
+      }
+      //container.setup();
+   }
+
+   public void stop() throws Exception
+   {
+      //container.cleanup();      
+   }
+}

Added: arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/NoContainerController.java
===================================================================
--- arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/NoContainerController.java	                        (rev 0)
+++ arquillian/trunk/api/src/main/java/org/jboss/arquillian/api/container/NoContainerController.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,19 @@
+package org.jboss.arquillian.api.container;
+
+import org.jboss.arquillian.api.Controlable;
+import org.jboss.tmpdpl.api.shrinkwrap.container.ArchiveContainer;
+
+public class NoContainerController implements Controlable
+{
+   public NoContainerController(ArchiveContainer container)
+   {
+   }
+   
+   public void start() throws Exception
+   {
+   }
+   
+   public void stop() throws Exception
+   {
+   }
+}

Added: arquillian/trunk/build/pom.xml
===================================================================
--- arquillian/trunk/build/pom.xml	                        (rev 0)
+++ arquillian/trunk/build/pom.xml	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+  vi:ts=2:sw=2:expandtab:
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <!-- Parent -->
+  <parent>
+    <groupId>org.jboss</groupId>
+    <artifactId>jboss-parent</artifactId>
+    <version>4</version>
+  </parent>
+
+  <!-- Model Version -->
+  <modelVersion>4.0.0</modelVersion>
+
+  <!-- Artifact Configuration -->
+  <groupId>org.jboss.arquillian</groupId>
+  <artifactId>arquillian-build</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <name>Arquillian Build</name>
+  <description>Arquillian Build Configuration</description>
+  <packaging>pom</packaging>
+
+  <!-- Properties -->
+  <properties>
+
+    <!-- Versioning -->
+    <version.junit_junit>4.6</version.junit_junit>
+
+  </properties>
+
+  <!-- SCM -->
+  <scm>
+    <connection>scm:svn:http://anonsvn.jboss.org/repos/common/arquillian/trunk</connection>
+    <developerConnection>scm:svn:https://svn.jboss.org/repos/common/arquillian/trunk</developerConnection>
+    <url>http://anonsvn.jboss.org/repos/common/arquillian/trunk</url>
+  </scm>
+
+  <!-- Issues -->
+  <issueManagement>
+    <system>jira</system>
+    <url>http://jira.jboss.com/jira/browse/ARQ</url>
+  </issueManagement>
+
+  <!-- Licenses -->
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+    </license>
+  </licenses>
+
+  <!-- Build -->
+  <build>
+
+    <plugins>
+
+      <!-- JBoss-specific Packaging -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>jboss-packaging-maven-plugin</artifactId>
+        <version>2.0-beta-1</version>
+        <extensions>true</extensions>
+      </plugin>
+
+      <!-- Compiler -->
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <inherited>true</inherited>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+          <showDeprecation>false</showDeprecation>
+          <showWarnings>true</showWarnings>
+          <optimize>true</optimize>
+          <compilerVersion>1.6</compilerVersion>
+          <fork>true</fork>
+          <argLine>-Xmx512M</argLine>
+          <executable>${JAVA_HOME}/bin/javac</executable>
+        </configuration>
+      </plugin>
+
+      <!-- Surefire -->
+      <plugin>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <redirectTestOutputToFile>true</redirectTestOutputToFile>
+          <trimStackTrace>false</trimStackTrace>
+          <printSummary>true</printSummary>
+          <includes>
+            <include>**/*TestCase.java</include>
+            <include>**/*TestSuite.java</include>
+          </includes>
+          <forkMode>always</forkMode>
+          <reportFormat>xml</reportFormat>
+        </configuration>
+      </plugin>
+
+      <!-- Maven Release Plugin Configuration -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+        <configuration>
+          <tagBase>https://svn.jboss.org/repos/common/arquillian/tags</tagBase>
+        </configuration>
+      </plugin>
+
+      <!-- Enforce Maven Environment -->
+      <plugin>
+        <artifactId>maven-enforcer-plugin
+                      </artifactId>
+        <executions>
+          <execution>
+            <id>enforce-maven-environment</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <rules>
+            <requireMavenVersion>
+              <version>[2.0.9,2.4)</version> <!-- Must be Maven 2.0.9 >= x > 2.1  -->
+            </requireMavenVersion>
+            <requireJavaVersion>
+              <version>1.6.0</version> <!-- Must be JDK6 -->
+            </requireJavaVersion>
+            <requireProperty>
+              <property>env.JAVA_HOME</property>
+              <message>"JAVA_HOME needs to be set to compile"</message>
+            </requireProperty>
+          </rules>
+        </configuration>
+      </plugin>
+
+    </plugins>
+
+  </build>
+
+  <!-- Dependency Management -->
+  <dependencyManagement>
+    <dependencies>
+
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>${version.junit_junit}</version>
+        <scope>test</scope>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
+
+  <!-- Reporting -->
+  <reporting>
+    <plugins>
+
+      <!-- Cobertura (Code Coverage) -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>cobertura-maven-plugin</artifactId>
+        <configuration>
+          <formats>
+            <format>html</format>
+            <format>xml</format>
+          </formats>
+        </configuration>
+      </plugin>
+
+      <!-- FindBugs -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+        <configuration>
+          <xmlOutput>true</xmlOutput>
+          <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
+        </configuration>
+      </plugin>
+
+      <!-- JavaDoc / APIViz -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>2.5</version>
+        <configuration>
+          <doclet>org.jboss.apiviz.APIviz</doclet>
+          <docletArtifact>
+            <groupId>org.jboss.apiviz</groupId>
+            <artifactId>apiviz</artifactId>
+            <version>1.3.0.GA</version>
+          </docletArtifact>
+          <useStandardDocletOptions>true</useStandardDocletOptions>
+          <charset>UTF-8</charset>
+          <encoding>UTF-8</encoding>
+          <docencoding>UTF-8</docencoding>
+          <breakiterator>true</breakiterator>
+          <version>true</version>
+          <author>true</author>
+          <keywords>true</keywords>
+          <additionalparam> 
+            -sourceclasspath ${project.build.outputDirectory}
+          </additionalparam>
+        </configuration>
+      </plugin>
+
+
+    </plugins>
+  </reporting>
+
+</project>
+

Added: arquillian/trunk/demo/pom.xml
===================================================================
--- arquillian/trunk/demo/pom.xml	                        (rev 0)
+++ arquillian/trunk/demo/pom.xml	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+   <!-- Model Version -->
+   <modelVersion>4.0.0</modelVersion>
+
+   <!-- Artifact Configuration -->
+   <groupId>iorg.jboss.arquillian</groupId>
+   <artifactId>arquillian-demo</artifactId>
+   <version>0.0.1-SNAPSHOT</version>
+   <name>Arquillian Demo</name>
+   <description>Demo of Arquillian Usage</description>
+
+
+   <!-- Properties -->
+   <properties>
+
+      <!-- Versioning -->
+      <version.org.jboss.arquillian_arquillian>0.0.1-SNAPSHOT</version.org.jboss.arquillian_arquillian>
+      <version.org.jboss.embedded_embedded>0.1.0-SNAPSHOT</version.org.jboss.embedded_embedded>
+
+   </properties>
+
+   <!-- Dependencies -->
+   <dependencies>
+
+      <dependency>
+         <groupId>org.jboss.arquillian</groupId>
+         <artifactId>arquillian-api</artifactId>
+         <version>${version.org.jboss.arquillian_arquillian}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.jboss.arquillian</groupId>
+         <artifactId>arquillian-junit</artifactId>
+         <version>${version.org.jboss.arquillian_arquillian}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.jboss.embedded</groupId>
+         <artifactId>jboss-embedded-assembly</artifactId>
+         <version>${version.org.jboss.embedded_embedded}</version>
+         <classifier>launcher</classifier>
+      </dependency>
+
+      <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+	 <version>4.7</version>
+         <scope>test</scope>
+      </dependency>
+
+   </dependencies>
+</project>
+

Added: arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManager.java
===================================================================
--- arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManager.java	                        (rev 0)
+++ arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManager.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,6 @@
+package com.acme.ejb;
+
+public interface GreetingManager
+{
+   String greet(String userName);
+}

Added: arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManagerBean.java
===================================================================
--- arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManagerBean.java	                        (rev 0)
+++ arquillian/trunk/demo/src/main/java/com/acme/ejb/GreetingManagerBean.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,15 @@
+package com.acme.ejb;
+
+import javax.ejb.Local;
+import javax.ejb.Stateless;
+
+ at Local(GreetingManager.class)
+ at Stateless
+public class GreetingManagerBean implements GreetingManager
+{
+   @Override
+   public String greet(String userName)
+   {
+      return "Hello " + userName;
+   }
+}

Added: arquillian/trunk/demo/src/test/java/com/acme/ejb/GreetingManagerTest.java
===================================================================
--- arquillian/trunk/demo/src/test/java/com/acme/ejb/GreetingManagerTest.java	                        (rev 0)
+++ arquillian/trunk/demo/src/test/java/com/acme/ejb/GreetingManagerTest.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,37 @@
+package com.acme.ejb;
+
+import javax.ejb.EJB;
+
+import junit.framework.Assert;
+
+import org.jboss.arquillian.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archives;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+ at RunWith(Arquillian.class)
+public class GreetingManagerTest
+{
+   @Deployment
+   public static JavaArchive createDeployment() {
+      return Archives.create("test.jar", JavaArchive.class)
+               .addClasses(
+                     GreetingManager.class,
+                     GreetingManagerBean.class);
+   }
+   
+   @EJB
+   private GreetingManager greetingManager;
+   
+   @Test
+   public void shouldGreetUser() throws Exception {
+      
+      String userName = "Devoxx";
+      
+      Assert.assertEquals(
+            "Hello " + userName,
+            greetingManager.greet(userName));
+   }
+}

Added: arquillian/trunk/impl-base/pom.xml
===================================================================
--- arquillian/trunk/impl-base/pom.xml	                        (rev 0)
+++ arquillian/trunk/impl-base/pom.xml	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+   <!--
+  vi:ts=2:sw=2:expandtab:
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+   <!-- Parent -->
+   <parent>
+      <groupId>org.jboss.arquillian</groupId>
+      <artifactId>arquillian-build</artifactId>
+      <version>0.0.1-SNAPSHOT</version>
+      <relativePath>../build/pom.xml</relativePath>
+   </parent>
+
+   <!-- Model Version -->
+   <modelVersion>4.0.0</modelVersion>
+
+   <!-- Artifact Configuration -->
+   <artifactId>arquillian-impl-base</artifactId>
+   <version>0.0.1-SNAPSHOT</version>
+   <name>Arquillian Implementation Base</name>
+   <description>Common Base for Implementations of the  Project</description>
+
+
+   <!-- Properties -->
+   <properties>
+
+      <!-- Versioning -->
+      <version.org.jboss.arquillian_arquillian.api>0.0.1-SNAPSHOT</version.org.jboss.arquillian_arquillian.api>
+
+   </properties>
+
+   <!-- Dependencies -->
+   <dependencies>
+
+      <!-- 
+    org.jboss.shrinkwrap    
+     -->
+      <dependency>
+         <groupId>org.jboss.arquillian</groupId>
+         <artifactId>arquillian-api</artifactId>
+         <version>${version.org.jboss.arquillian_arquillian.api}</version>
+      </dependency>
+      <dependency>
+         <groupId>org.jboss.embedded</groupId>
+         <artifactId>jboss-embedded-assembly</artifactId>
+         <version>0.1.0-SNAPSHOT</version>
+         <classifier>launcher</classifier>
+      </dependency>
+
+      <!-- 
+    External Projects
+     -->
+      <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+         <scope>compile</scope>
+      </dependency>
+
+   </dependencies>
+
+   <build>
+      <plugins>
+         <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-jar-plugin</artifactId>
+            <executions>
+               <execution>
+                  <goals>
+                     <goal>test-jar</goal>
+                  </goals>
+               </execution>
+            </executions>
+         </plugin>
+      </plugins>
+   </build>
+</project>
+

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTest.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTest.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTest.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,133 @@
+package org.jboss.arquillian.impl;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import javax.naming.InitialContext;
+
+import org.jboss.arquillian.api.Artifact;
+import org.jboss.arquillian.api.ArtifactGenerator;
+import org.jboss.arquillian.api.Controlable;
+import org.jboss.arquillian.api.Deployer;
+import org.jboss.arquillian.api.Packaging;
+import org.jboss.arquillian.api.TestMethodExecutor;
+import org.jboss.shrinkwrap.api.Archive;
+
+public class DeployableTest
+{
+   private static boolean inContainer = false;
+   
+   public static boolean isInContainer()
+   {
+      return inContainer;
+   }
+
+   public static void setInContainer(boolean inContainer)
+   {
+      DeployableTest.inContainer = inContainer;
+   }
+
+   private Controlable containerController;
+   private Deployer containerDeployer;
+   
+   public DeployableTest(Controlable containerController, Deployer containerDeployer)
+   {
+      this.containerController = containerController;
+      this.containerDeployer = containerDeployer;
+   }
+   
+   public Controlable getContainerController() 
+   {
+      return containerController;
+   }
+
+   public Deployer getDeployer() 
+   {
+      return containerDeployer;
+   }
+
+   
+   // TODO: throws MissingArtifactSupportException
+   // TODO: SPI lookup based on artifactType
+   // TODO: loadArtifactGenerator() ?
+   public ArtifactGenerator getArtifactGenerator(Artifact artifact) 
+   {
+      if(DeployableTest.isInContainer()) 
+      {
+         return new NullArtifactGenerator();
+      }
+      return new UserCreatedArtifactGenerator();
+   }
+
+   public ArtifactGenerator getArtifactGenerator(Packaging packaging) 
+   {
+      if(DeployableTest.isInContainer()) 
+      {
+         return new NullArtifactGenerator();
+      }
+      return new UserCreatedArtifactGenerator();
+   }
+   
+   public Archive<?> generateArtifact(Class<?> testCase) 
+   {
+//      ArtifactGenerator artifactGenerator = getArtifactGenerator(
+//            this.getClass().getAnnotation(Artifact.class));
+//      
+//      ArtifactGenerator packagingGenerator = getArtifactGenerator(
+//            this.getClass().getAnnotation(Packaging.class));
+//      
+//      TCKArtifact artifact = packagingGenerator.generateArtifact(this.getClass());
+//      artifactGenerator.generateArtifact(this.getClass(), artifact);
+//      
+//      return artifact;
+      return getArtifactGenerator((Artifact)null).generateArtifact(testCase);
+   }
+
+   public void run(TestMethodExecutor executor) throws Throwable 
+   {
+      if(inContainer) 
+      {
+         injectClass(executor.getInstance());
+         executor.invoke();
+      } 
+      else 
+      {
+         new ServletMethodExecutor(executor).invoke();
+      }
+   }
+   
+   void injectClass(Object testCase) 
+   {
+      try 
+      {
+         Class<? extends Annotation> ejbAnnotationClass = (Class<? extends Annotation>)Thread.currentThread()
+                     .getContextClassLoader().loadClass("javax.ejb.EJB");
+         
+         for(Field field : testCase.getClass().getDeclaredFields()) 
+         {
+            if(field.isAnnotationPresent(ejbAnnotationClass)) 
+            {
+               Object ejb = lookupEJB(field);
+               field.setAccessible(true);
+               field.set(testCase, ejb);
+            }
+         }
+      } 
+      catch (Exception e) 
+      {
+         throw new RuntimeException("Could not inject members", e);
+      }
+   }
+   
+   private Object lookupEJB(Field field) throws Exception 
+   {
+      InitialContext context = new InitialContext();
+      return context.lookup("test/" + field.getType().getSimpleName() + "Bean/local");
+   }
+   
+   void invokeMethod(Method testMethod, Class<?> testCase) 
+   {
+   }
+
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTestBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTestBuilder.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/DeployableTestBuilder.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,60 @@
+package org.jboss.arquillian.impl;
+
+import javax.security.auth.login.Configuration;
+
+import org.jboss.arquillian.api.Controlable;
+import org.jboss.arquillian.api.Deployer;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.tmpdpl.api.container.DeploymentException;
+
+public class DeployableTestBuilder
+{
+   private DeployableTestBuilder() {}
+   
+   // TODO: lookup/load container, setup DeployableTest
+   public static DeployableTest build(Configuration config) 
+   {
+      Controlable controller = null;
+      Deployer deployer = null;
+      
+      if(DeployableTest.isInContainer()) 
+      {
+         controller = new MockContainer();
+         deployer = new MockContainer();
+      }
+      else 
+      {
+         JbossEmbeddedContainer container = new JbossEmbeddedContainer();
+         controller = container;
+         deployer = container;
+      }
+
+      return new DeployableTest(
+            controller,
+            deployer
+            );
+   }
+   
+   private static class MockContainer implements Controlable, Deployer 
+   {
+      @Override
+      public void start() throws Exception
+      {
+      }
+
+      @Override
+      public void stop() throws Exception
+      {
+      }
+
+      @Override
+      public void deploy(Archive<?> archive) throws DeploymentException
+      {
+      }
+
+      @Override
+      public void undeploy(Archive<?> archive) throws DeploymentException
+      {
+      }
+   }
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/JbossEmbeddedContainer.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/JbossEmbeddedContainer.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/JbossEmbeddedContainer.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,43 @@
+package org.jboss.arquillian.impl;
+
+import org.jboss.arquillian.api.Controlable;
+import org.jboss.arquillian.api.Deployer;
+import org.jboss.embedded.api.server.JBossASEmbeddedServer;
+import org.jboss.embedded.core.server.JBossASEmbeddedServerImpl;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.tmpdpl.api.container.DeploymentException;
+
+public class JbossEmbeddedContainer implements Controlable, Deployer
+{
+   private JBossASEmbeddedServer server;
+   
+   public JbossEmbeddedContainer()
+   {
+      server = new JBossASEmbeddedServerImpl();
+   }
+
+   @Override
+   public void start() throws Exception
+   {
+      server.initialize();
+      server.start();
+   }
+   
+   @Override
+   public void stop() throws Exception
+   {
+      server.shutdown();
+   }
+   
+   @Override
+   public void deploy(Archive<?> archive) throws DeploymentException
+   {
+      server.deploy(archive);
+   }
+   
+   @Override
+   public void undeploy(Archive<?> archive) throws DeploymentException
+   {
+      server.undeploy(archive);
+   }
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/NullArtifactGenerator.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/NullArtifactGenerator.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/NullArtifactGenerator.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,20 @@
+package org.jboss.arquillian.impl;
+
+import org.jboss.arquillian.api.ArtifactGenerator;
+import org.jboss.shrinkwrap.api.Archive;
+
+public class NullArtifactGenerator implements ArtifactGenerator
+{
+
+   @Override
+   public Archive<?> generateArtifact(Class<?> testCase)
+   {
+      return null;
+   }
+   
+   @Override
+   public void generateArtifact(Class<?> testCase, Archive<?> baseArtifact)
+   {
+      
+   }
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/ServletMethodExecutor.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/ServletMethodExecutor.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/ServletMethodExecutor.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,105 @@
+package org.jboss.arquillian.impl;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Method;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.jboss.arquillian.api.TestMethodExecutor;
+import org.jboss.arquillian.api.TestResult;
+
+public class ServletMethodExecutor implements TestMethodExecutor
+{
+   private TestMethodExecutor originalExecutor;
+   
+   public ServletMethodExecutor(TestMethodExecutor originalExecutor)
+   {
+      this.originalExecutor = originalExecutor;
+   }
+   
+   @Override
+   public Object getInstance()
+   {
+      return originalExecutor.getInstance();
+   }
+   
+   @Override
+   public Method getMethod()
+   {
+      return originalExecutor.getMethod();
+   }
+   
+   @Override
+   public void invoke() throws Throwable
+   {
+      Class<?> testClass = getInstance().getClass();
+      String url = "http://localhost:8080/test/?outputMode=serializedObject&className=" + testClass.getName() + "&methodName=" + getMethod().getName();
+      long timeoutTime = System.currentTimeMillis() + 1000;
+      boolean interrupted = false;
+      while (timeoutTime > System.currentTimeMillis())
+      {
+         URLConnection connection = new URL(url).openConnection();
+         if (!(connection instanceof HttpURLConnection))
+         {
+            throw new IllegalStateException("Not an http connection! " + connection);
+         }
+         HttpURLConnection httpConnection = (HttpURLConnection) connection;
+         httpConnection.setUseCaches(false);
+         httpConnection.setDefaultUseCaches(false);
+         try
+         {
+            httpConnection.connect();
+            if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK)
+            {
+               ObjectInputStream ois = new ObjectInputStream(httpConnection.getInputStream());
+               Object o;
+               try
+               {
+                  o = ois.readObject();
+               }
+               catch (ClassNotFoundException e)
+               {
+                  IOException ioException = new IOException();
+                  ioException.initCause(e);
+                  throw ioException;
+               }
+               ois.close();
+               if (!(o instanceof TestResult))
+               {
+                  throw new IllegalStateException("Error reading test results - expected a TestResult but got " + o);
+               }
+               TestResult result = (TestResult) o;
+               
+               if(result.getThrowable() != null) {
+                  throw result.getThrowable();
+               }
+               return;
+            }
+            else if (httpConnection.getResponseCode() != HttpURLConnection.HTTP_NOT_FOUND)
+            {
+               throw new IllegalStateException("Error launching test " + testClass.getName() + " at " + url + ". Got " + httpConnection.getResponseCode() + " ("+ httpConnection.getResponseMessage() + ")");
+            }
+            try
+            {
+               Thread.sleep(200);
+            }
+            catch (InterruptedException e)
+            {
+               interrupted = true;
+            }
+         }
+         finally
+         {
+            httpConnection.disconnect();
+         }
+      }
+      if (interrupted)
+      {
+         Thread.currentThread().interrupt();
+      }
+      throw new IllegalStateException("Error launching test " + testClass.getName() + " at " + url + ". Kept on getting 404s.");
+   }
+   
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/TestResultImpl.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/TestResultImpl.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/TestResultImpl.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,29 @@
+package org.jboss.arquillian.impl;
+
+import org.jboss.arquillian.api.TestResult;
+
+public class TestResultImpl implements TestResult
+{
+   private static final long serialVersionUID = 1L;
+
+   private Status status;
+   private Throwable throwable;
+
+   public TestResultImpl(Status status, Throwable throwable)
+   {
+      this.status = status;
+      this.throwable = throwable;
+   }
+
+   @Override
+   public Status getStatus()
+   {
+      return status;
+   }
+   
+   @Override
+   public Throwable getThrowable()
+   {
+      return throwable;
+   }
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/UserCreatedArtifactGenerator.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/UserCreatedArtifactGenerator.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/UserCreatedArtifactGenerator.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,48 @@
+package org.jboss.arquillian.impl;
+
+import java.lang.reflect.Method;
+
+import org.jboss.arquillian.api.ArtifactGenerator;
+import org.jboss.arquillian.api.Deployment;
+import org.jboss.shrinkwrap.api.Archive;
+
+public class UserCreatedArtifactGenerator implements ArtifactGenerator
+{
+
+   @Override
+   public Archive<?> generateArtifact(Class<?> testCase)
+   {
+      Method deploymentMethod = findDeploymentMethod(testCase);
+      if(deploymentMethod == null) 
+      {
+         throw new RuntimeException("No static method annotated with " + Deployment.class.getName() + " found");
+      }
+      try 
+      {
+         return (Archive<?>)deploymentMethod.invoke(null);
+      } 
+      catch (Exception e) 
+      {
+         throw new RuntimeException("Could not get Deploymnet", e);
+      }
+   }
+   
+   @Override
+   public void generateArtifact(Class<?> testCase, Archive<?> baseArtifact)
+   {
+      // TODO Auto-generated method stub
+      
+   }
+   
+   private Method findDeploymentMethod(Class<?> testCase) {
+      
+      Method[] methods = testCase.getMethods();
+      for(Method method: methods)
+      {
+         if(method.isAnnotationPresent(Deployment.class)) {
+            return method;
+         }
+      }
+      return null;
+   }
+}

Added: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/runner/servlet/InContainerListener.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/runner/servlet/InContainerListener.java	                        (rev 0)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/runner/servlet/InContainerListener.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,20 @@
+package org.jboss.arquillian.impl.runner.servlet;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.jboss.arquillian.impl.DeployableTest;
+
+public class InContainerListener implements ServletContextListener
+{
+   @Override
+   public void contextDestroyed(ServletContextEvent event)
+   {
+   }
+   
+   @Override
+   public void contextInitialized(ServletContextEvent event)
+   {
+      DeployableTest.setInContainer(true);
+   }
+}
\ No newline at end of file

Added: arquillian/trunk/junit/pom.xml
===================================================================
--- arquillian/trunk/junit/pom.xml	                        (rev 0)
+++ arquillian/trunk/junit/pom.xml	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+  vi:ts=2:sw=2:expandtab:
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <!-- Parent -->
+  <parent>
+    <groupId>org.jboss.arquillian</groupId>
+    <artifactId>arquillian-build</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../build/pom.xml</relativePath>
+  </parent>
+
+  <!-- Model Version -->
+  <modelVersion>4.0.0</modelVersion>
+
+  <!-- Artifact Configuration -->
+  <artifactId>arquillian-junit</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <name>Arquillian JUnit Implementation</name>
+  <description>JUnit Implementations for the the Project</description>
+
+
+  <!-- Properties -->
+  <properties>
+
+    <!-- Versioning -->
+    <version.org.jboss.arquillian_arquillian.impl-base>0.0.1-SNAPSHOT</version.org.jboss.arquillian_arquillian.impl-base>
+
+  </properties>
+
+  <!-- Dependencies -->
+  <dependencies>
+
+    <!-- 
+    org.jboss.shrinkwrap    
+     -->
+    <dependency>
+      <groupId>org.jboss.arquillian</groupId>
+      <artifactId>arquillian-impl-base</artifactId>
+      <version>${version.org.jboss.arquillian_arquillian.impl-base}</version>
+    </dependency>
+    <!-- 
+    External Projects
+     -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
+

Added: arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java
===================================================================
--- arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java	                        (rev 0)
+++ arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/Arquillian.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,141 @@
+package org.jboss.arquillian.junit;
+
+import java.lang.reflect.Method;
+
+import java.util.List;
+
+import org.jboss.arquillian.api.TestMethodExecutor;
+import org.jboss.arquillian.impl.DeployableTest;
+import org.jboss.arquillian.impl.DeployableTestBuilder;
+import org.jboss.arquillian.impl.runner.servlet.InContainerListener;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.Archives;
+import org.jboss.shrinkwrap.api.descriptor.WebArchiveDescriptor;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+// TODO: where to put start/stop container..
+public class Arquillian extends BlockJUnit4ClassRunner
+{
+   private static DeployableTest deployableTest;
+   
+   private Archive<?> archive = null;
+   
+   public Arquillian(Class<?> klass) throws InitializationError
+   {
+      super(klass);
+      deployableTest = DeployableTestBuilder.build(null);
+   }
+
+
+   @Override
+   // TODO: exclude @Integration test classes
+   protected List<FrameworkMethod> computeTestMethods()
+   {
+      return super.computeTestMethods();
+   }
+
+   @Override
+   protected Statement withBeforeClasses(Statement statement)
+   {
+      final Statement originalStatement = super.withBeforeClasses(statement);
+      return new Statement() 
+      {
+         @Override
+         public void evaluate() throws Throwable
+         {
+            archive = deployableTest.generateArtifact(
+                  Arquillian.this.getTestClass().getJavaClass());
+            
+            if(archive instanceof WebArchive) {
+               WebArchive webArchive = (WebArchive)archive;
+               webArchive.addPackages(
+                     true,
+                     Package.getPackage("org.junit"),
+                     Package.getPackage("org.jboss.arquillian.api"), 
+                     Package.getPackage("org.jboss.arquillian.impl"),
+                     Package.getPackage("org.jboss.arquillian.junit"));
+               
+               webArchive.as(WebArchiveDescriptor.class)
+                  .addListener(InContainerListener.class)
+                  .addServlet(ServletTestRunner.class, "/*");
+            }
+            if(archive instanceof JavaArchive) {
+               EnterpriseArchive ear = Archives.create("test.ear", EnterpriseArchive.class);
+
+               WebArchive war = Archives.create("test.war", WebArchive.class)
+                     .addPackages(
+                        true,
+                        Package.getPackage("org.junit"),
+                        Package.getPackage("org.jboss.arquillian.api"), 
+                        Package.getPackage("org.jboss.arquillian.impl"),
+                        Package.getPackage("org.jboss.arquillian.junit"))
+                     .addClass(Arquillian.this.getTestClass().getJavaClass());
+               
+               war.as(WebArchiveDescriptor.class)
+                  .addListener(InContainerListener.class)
+                  .addServlet(ServletTestRunner.class, "/*");
+                  
+               ear.addModule(war)
+                  .addModule(archive);
+             
+               archive = ear;
+            }
+            
+            deployableTest.getContainerController().start();
+            deployableTest.getDeployer().deploy(archive);
+            originalStatement.evaluate();
+         }
+      };
+   }
+   
+   @Override
+   protected Statement withAfterClasses(Statement statement)
+   {
+      final Statement originalStatement = super.withAfterClasses(statement);
+      return new Statement() 
+      {
+         @Override
+         public void evaluate() throws Throwable
+         {
+            originalStatement.evaluate();
+            deployableTest.getDeployer().undeploy(archive);
+            deployableTest.getContainerController().stop();
+         }
+      };
+   }
+   
+   @Override
+   protected Statement methodInvoker(final FrameworkMethod method, final Object test)
+   {
+      return new Statement()
+      {
+         @Override
+         public void evaluate() throws Throwable
+         {
+            deployableTest.run(new TestMethodExecutor()
+            {
+               public void invoke() throws Throwable
+               {
+                  method.invokeExplosively(test);
+               }
+               
+               public Method getMethod()
+               {
+                  return method.getMethod();
+               }
+               
+               public Object getInstance()
+               {
+                  return test;
+               }
+            });
+         }
+      };
+   }
+}

Added: arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/ServletTestRunner.java
===================================================================
--- arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/ServletTestRunner.java	                        (rev 0)
+++ arquillian/trunk/junit/src/main/java/org/jboss/arquillian/junit/ServletTestRunner.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,123 @@
+package org.jboss.arquillian.junit;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jboss.arquillian.api.TestResult;
+import org.jboss.arquillian.api.TestResult.Status;
+import org.jboss.arquillian.impl.TestResultImpl;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.Request;
+import org.junit.runner.Result;
+
+public class ServletTestRunner extends HttpServlet
+{
+
+   private static final long serialVersionUID = 1L;
+
+   @Override
+   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
+   {
+      String methodName = null;
+      if (req.getParameter("methodName") != null)
+      {
+         methodName = req.getParameter("methodName");
+      }
+      Class<?> testClass = null;
+      if (req.getParameter("className") != null)
+      {
+         String className = req.getParameter("className");
+         try {
+            testClass = Thread.currentThread().getContextClassLoader().loadClass(className);
+         } catch (Exception e) {
+            resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not load test class");
+         }
+      } else {
+         resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "No class specified");
+         return;
+      }
+
+      String outputMode;
+      if (req.getParameter("outputMode") != null)
+      {
+         outputMode = (String) req.getParameter("outputMode");
+      }
+      else
+      {
+         outputMode = "html";
+      }
+      if (outputMode.equals("serializedObject") && methodName == null)
+      {
+         resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "No method name specified");
+         return;
+      }
+
+      JUnitCore runner = new JUnitCore();
+      Result result = runner.run(
+            Request.method(
+                  testClass, 
+                  methodName));
+      
+      if (outputMode.equals("html"))
+      {
+         resp.setContentType("text/html");
+         resp.setStatus(HttpServletResponse.SC_OK);
+         PrintWriter writer = resp.getWriter();
+         writer.write("<html>\n");
+         writer.write("<head><title>TCK Report</title></head>\n");
+         writer.write("<body>\n");
+         writer.write("<h2>Configuration</h2>\n");
+         writer.write("<table>\n");
+         writer.write("<tr>\n");
+         writer.write("<td><b>Method</b></td><td><b>Status</b></td>\n");
+         writer.write("</tr>\n");
+
+         writer.write("</table>\n");
+         writer.write("<h2>Tests</h2>\n");
+         writer.write("<table>\n");
+         writer.write("<tr>\n");
+         writer.write("<td><b>Method</b></td><td><b>Status</b></td>\n");
+         writer.write("</tr>\n");
+
+         writer.write("</table>\n");
+         writer.write("</body>\n");
+      }
+      else if (outputMode.equals("serializedObject"))
+      {
+         ObjectOutputStream oos = new ObjectOutputStream(resp.getOutputStream());
+         TestResult testResult = convertToTestResult(result);
+         
+         oos.writeObject(testResult);
+         resp.setStatus(HttpServletResponse.SC_OK);
+         oos.flush();
+         oos.close();
+      }
+      else
+      {
+         resp.sendError(500, "No report format specified");
+      }
+   }
+   
+   private TestResult convertToTestResult(Result result) 
+   {
+      Status status = Status.PASSED;
+      Throwable throwable = null;
+      
+      if(result.getFailureCount() > 0) 
+      {
+         status = Status.FAILED;
+         throwable = result.getFailures().get(0).getException();
+      }
+      if(result.getIgnoreCount() > 0) 
+      {
+         status = Status.SKIPPED;
+      }
+      return new TestResultImpl(status, throwable);
+   }
+}

Added: arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/APITestCase.java
===================================================================
--- arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/APITestCase.java	                        (rev 0)
+++ arquillian/trunk/junit/src/test/java/org/jboss/arquillian/junit/APITestCase.java	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,34 @@
+package org.jboss.arquillian.junit;
+
+import org.jboss.arquillian.api.Deployment;
+import org.jboss.shrinkwrap.api.Archives;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+ at RunWith(Arquillian.class)
+public class APITestCase
+{
+   @Deployment
+   public static WebArchive createDeployment() 
+   {
+      return Archives.create("test.war", WebArchive.class)
+            .addClass(APITestCase.class);
+   }
+   
+   @Test
+   public void myTestCase() throws Exception {
+      System.out.println("test run");
+   }
+   
+   @Test
+   public void myFailingTestCase() throws Exception {
+      Assert.assertTrue(false);      
+   }
+
+   @Test(expected = IllegalArgumentException.class)
+   public void myExpectedFailingTestCase() throws Exception {
+      throw new IllegalArgumentException("This is ok");
+   }
+}

Added: arquillian/trunk/pom.xml
===================================================================
--- arquillian/trunk/pom.xml	                        (rev 0)
+++ arquillian/trunk/pom.xml	2009-11-13 12:47:53 UTC (rev 3684)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+  vi:ts=2:sw=2:expandtab:
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <!-- Parent -->
+  <parent>
+    <groupId>org.jboss</groupId>
+    <artifactId>jboss-parent</artifactId>
+    <version>4</version>
+  </parent>
+
+  <!-- Model Information -->
+  <modelVersion>4.0.0</modelVersion>
+
+  <!-- Artifact Information  -->
+  <groupId>org.jboss.arquillian</groupId>
+  <artifactId>arquillian-parent</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <name>Arguillian Aggregator</name>
+  <url>http://www.jboss.org</url>
+  <description>Arguillian Aggregator</description>
+
+  <!-- Aggregate Modules -->
+  <modules>
+    <module>api</module>
+    <module>build</module>
+    <module>impl-base</module>
+    <module>junit</module>
+  </modules>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.jboss.tmpdpl</groupId>
+        <artifactId>tmpdpl-api</artifactId>
+        <version>0.1.1-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+        <groupId>org.jboss.tmpdpl</groupId>
+        <artifactId>tmpdpl-api-shrinkwrap</artifactId>
+        <version>0.1.1-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+           <groupId>org.jboss.shrinkwrap</groupId>
+           <artifactId>shrinkwrap-api</artifactId>
+           <version>1.0.0-SNAPSHOT</version>
+      </dependency>
+      <dependency>
+           <groupId>org.jboss.shrinkwrap</groupId>
+           <artifactId>shrinkwrap-impl-base</artifactId>
+           <version>1.0.0-SNAPSHOT</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+</project>



More information about the jboss-svn-commits mailing list