-----------------------------------------------------
INTRODUCTION
-----------------------------------------------------

This document explains how to configure TCK artifacts
to run standalone and web profile tcks.

----------------------------------------------------
REQUIREMENTS
----------------------------------------------------

1* Apache Tomcat 6 latest version.
2* Copy the following jars into Tomcat lib/ folder
  - geronimo-atinject_1.0_spec-1.0.jar
  - geronimo-interceptor_1.1_spec-1.0.jar
  - geronimo-jcdi_1.0_spec-1.0.jar
  - openwebbeans-spi-1.0.0-SNAPSHOT.jar
  - openwebbeans-tomcat6-1.0.0-SNAPSHOT.jar

--------------------------------------------------
TCK Configuration Files
--------------------------------------------------
There are two XML files that need to be updated for
standalone and web profile testing.

###################################################
Standalone TCK Configuration
###################################################

############### jboss-test-harness.properties in webbeans-tck###############################
org.jboss.jsr299.tck.spi.Managers=org.apache.webbeans.test.tck.ManagersImpl
org.jboss.jsr299.tck.spi.Beans=org.apache.webbeans.test.tck.BeansImpl
org.jboss.jsr299.tck.spi.Contexts=org.apache.webbeans.test.tck.ContextsImpl
org.jboss.testharness.spi.StandaloneContainers=org.apache.webbeans.test.tck.StandaloneContainersImpl
org.jboss.testharness.spi.Containers=org.apache.webbeans.test.tck.ContainersImpl
org.jboss.jsr299.tck.spi.EL=org.apache.webbeans.test.tck.ELImpl
org.jboss.testharness.standalone=true
############################################################################################

############## openwebbeans.properties in webbeans-tck######################################
org.apache.webbeans.spi.JNDIService=org.apache.webbeans.corespi.se.DefaultJndiService
org.apache.webbeans.spi.ScannerService=org.apache.webbeans.test.tck.mock.TCKMetaDataDiscoveryImpl
org.apache.webbeans.spi.deployer.useEjbMetaDataDiscoveryService=true
############################################################################################

###################################################
Web Profile TCK
###################################################

############### jboss-test-harness.properties in webbeans-tck###############################
org.jboss.jsr299.tck.spi.Managers=org.apache.webbeans.test.tck.ManagersImpl
org.jboss.jsr299.tck.spi.Beans=org.apache.webbeans.test.tck.BeansImpl
org.jboss.jsr299.tck.spi.Contexts=org.apache.webbeans.test.tck.ContextsImpl
org.jboss.testharness.spi.StandaloneContainers=org.apache.webbeans.test.tck.StandaloneContainersImpl
org.jboss.testharness.spi.Containers=org.apache.webbeans.test.tck.ContainersImpl
org.jboss.jsr299.tck.spi.EL=org.apache.webbeans.test.tck.ELImpl
org.jboss.testharness.standalone=false
org.jboss.testharness.libraryDirectory=target/dependency/lib
org.jboss.testharness.runIntegrationTests=true
org.jboss.testharness.api.TestLauncher=org.jboss.testharness.impl.runner.servlet.ServletTestLauncher
############################################################################################

############## openwebbeans.properties in webbeans-tck######################################
org.apache.webbeans.spi.deployer.useEjbMetaDataDiscoveryService=false
############################################################################################

###########################################
Running Standalone TCK From Maven 
###########################################
1* Do the above configuration
2* Run "mvn clean test -Ptck" from webbeans-tck root

##########################################
Running WebProfile TCK From Maven
##########################################
1* Do the above configuration
2* Open webbeans-tck/pom.xml
3* Change "standalone-suite.xml" with "webprofile-suite.xml" in "maven-surefire-plugin"
4* Change "tomcat.home" with your Apache 6 path in "maven-surefire-plugin"
5* Run "mvn clean test -Ptck" from webbeans-tck root

##############################################################
Running and Debugging TCK Tests in Eclipse with TestNG Plugin
##############################################################
1* Download and setup TestNG plugin from testng.org/doc/eclipse.html
2* Import webbeans-tck and other projects into Eclipse
3* Open Run/Debug Configuration... in Eclipse
4* Right Click to TestNG and Click New
5* In opened window, select webbeans-tck as "Project" and standalone-suite.xml
or webprofile-suite.xml as "Suite" file
6* In opened window, click "Arguments" tab and add "-Dtomcat.home=/path/to/your/tomcat"
in "VM Arguments"
7* Click Debug

-------------------------------------------------------------------------------------
ENJOY!
-------------------------------------------------------------------------------------
