[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