<?xml version="1.0"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
  license agreements. See the NOTICE file distributed with this work for additional 
  information regarding copyright ownership. The ASF licenses this file to 
  You under the Apache License, Version 2.0 (the "License"); you may not use 
  this file except in compliance with the License. You may obtain a copy of 
  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
  by applicable law or agreed to in writing, software distributed under the 
  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
  OF ANY KIND, either express or implied. See the License for the specific 
  language governing permissions and limitations under the License. -->
<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/xsd/maven-4.0.0.xsd">
         
  <modelVersion>4.0.0</modelVersion>
  
  <parent>
    <artifactId>arquillian</artifactId>
    <groupId>org.apache.tomee</groupId>
    <version>8.0.7-SNAPSHOT</version>
  </parent>
  
  <artifactId>arquillian-tomee-tests</artifactId>
  <packaging>pom</packaging>

  <name>TomEE :: Arquillian Adaptors Parent :: Tests</name>

  <modules>
    <module>arquillian-tomee-webprofile-tests</module>
    <module>arquillian-tomee-jaxrs-tests</module>
    <module>arquillian-tomee-jaxws-tests</module>
    <module>arquillian-tomee-jms-tests</module>
    <module>arquillian-tomee-codi-tests</module>
    <module>arquillian-tomee-config-tests</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>javaee-api</artifactId>
    </dependency>

    <dependency>
      <groupId>org.jboss.shrinkwrap.resolver</groupId>
      <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
      <version>${version.shrinkwrap.resolver.bom}</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpcore</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpcore</artifactId>
      <version>4.2.4</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>ziplock</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.jboss.arquillian.junit</groupId>
      <artifactId>arquillian-junit-container</artifactId>
      <version>${version.arquillian}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.2.2</version>
    </dependency>

    <dependency>
      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
      <artifactId>shrinkwrap-descriptors-impl-javaee</artifactId>
      <version>${version.shrinkwrap.descriptor}</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
      <artifactId>shrinkwrap-descriptors-api-javaee</artifactId>
      <version>${version.shrinkwrap.descriptor}</version>
    </dependency>

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>arquillian-tomee-embedded</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>arquillian-tomee-remote</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>arquillian-tomee-webapp-remote</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency> <!-- tomee-embedded needs it + dependencies but tomee-*-remote doesn't need dependencies so to avoid conflicts bringing it back here -->
      <groupId>${project.groupId}</groupId>
      <artifactId>openejb-core</artifactId>
      <version>${project.version}</version>
    </dependency>


    <!-- for tests with Hibernate -->

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.3.9.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.3.9.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate.common</groupId>
      <artifactId>hibernate-commons-annotations</artifactId>
      <version>4.0.5.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>antlr</groupId>
      <artifactId>antlr</artifactId>
      <version>2.7.7</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss</groupId>
      <artifactId>jandex</artifactId>
      <version>1.1.0.Final</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.logging</groupId>
      <artifactId>jboss-logging</artifactId>
      <version>3.1.3.GA</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.logging</groupId>
      <artifactId>jboss-logging-annotations</artifactId>
      <version>1.2.0.Beta1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.18.1-GA</version>
      <scope>provided</scope>
    </dependency>

    <!-- just to get it in the correct order -->
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apache-tomee</artifactId>
      <version>${project.version}</version>
      <classifier>webprofile</classifier>
      <type>zip</type>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat</artifactId>
      <version>${tomcat.version}</version>
      <type>zip</type>
    </dependency>
  </dependencies>

  <profiles>

    <profile>
      <id>default</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>

      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>test-tomee-embedded</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${maven.test.skip}</skip>
                  <argLine>-javaagent:${settings.localRepository}/org/apache/tomee/openejb-javaagent/${project.version}/openejb-javaagent-${project.version}.jar</argLine>
                  <systemPropertyVariables>
                    <tomee.version>${project.version}</tomee.version>
                    <arquillian.launch>tomee-embedded</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-embedded</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <skip>true</skip>
              <parallel>none</parallel>
              <threadCount>1</threadCount>
              <reuseForks>true</reuseForks>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>all-adapters</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>configure-adapters</id>
                <phase>test</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <source>
                    // goal: manage the profile-under-test property
                    // -&gt; set to webprofile use all distributions
                    // -&gt; set to plus use only plus
                    // -&gt; set to plume use only plume
                    def props = project.properties

                    def skip = props['maven.test.skip']

                    props['skip.embedded'] = 'true'
                    props['skip.remote.webprofile'] = 'true'
                    props['skip.remote.plus'] = 'true'
                    props['skip.remote.plume'] = 'true'
                    props['skip.webapp.webprofile'] = 'true'
                    props['skip.webapp.plus'] = 'true'
                    props['skip.webapp.plume'] = 'true'
                    props['skip.remote.microprofile'] = 'true'
                    props['skip.webapp.microprofile'] = 'true'

                    if ("true" != skip) {
                      def minProfile = props['profile-under-test']

                      if ("webprofile" == minProfile) {
                        props['skip.embedded'] = 'false'
                        props['skip.remote.webprofile'] = 'false'
                        props['skip.webapp.webprofile'] = 'false'
                        props['skip.remote.plus'] = 'false'
                        props['skip.webapp.plus'] = 'false'
                        props['skip.remote.plume'] = 'false'
                        props['skip.webapp.plume'] = 'false'
                      } else if ("plus" == minProfile) {
                        props['skip.embedded'] = 'false'
                        props['skip.remote.plus'] = 'false'
                        props['skip.webapp.plus'] = 'false'
                        props['skip.remote.plume'] = props['skip.remote.plume'] ? props['skip.remote.plume'] : 'false'
                        props['skip.webapp.plume'] = props['skip.webapp.plume'] ? props['skip.webapp.plume'] : 'false'
                      }
                    }

                    println("Embedded adapter activated ? " + !Boolean.parseBoolean(props['skip.embedded']))
                    println("Remote webprofile adapter activated ? " +
                        !Boolean.parseBoolean(props['skip.remote.webprofile']))
                    println("Remote plus adapter activated ? " + !Boolean.parseBoolean(props['skip.remote.plus']))
                    println("Remote plume adapter activated ? " + !Boolean.parseBoolean(props['skip.remote.plume']))
                    println("Webapp weprofile adapter activated ? " +
                        !Boolean.parseBoolean(props['skip.webapp.webprofile']))
                    println("Webapp plus adapter activated ? " + !Boolean.parseBoolean(props['skip.webapp.plus']))
                    println("Webapp plume adapter activated ? " + !Boolean.parseBoolean(props['skip.webapp.plume']))
                  </source>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>

              <execution>
                <id>test-tomee-remote</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${skip.remote.webprofile}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>webprofile</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-remote-secpol</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${skip.remote.webprofile}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>webprofile</tomee.classifier>
                    <arquillian.launch>tomee-remote-secpol</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-embedded</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${skip.embedded}</skip>
                  <argLine>-javaagent:${settings.localRepository}/org/apache/tomee/openejb-javaagent/${project.version}/openejb-javaagent-${project.version}.jar -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=768M</argLine>
                  <systemPropertyVariables>
                    <tomee.version>${project.version}</tomee.version>
                    <arquillian.launch>tomee-embedded</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-embedded</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-remote-plume</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${skip.remote.plume}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>plume</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                  <excludes>
                    <exclude>**/AppComposerTest.java</exclude>
                  </excludes>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-remote-plus</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${skip.remote.plus}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>plus</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-remote-microprofile</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${skip.remote.microprofile}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>microprofile</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <skip>true</skip>
              <parallel>none</parallel>
              <threadCount>1</threadCount>
              <reuseForks>true</reuseForks>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>


    <profile>
      <id>buildbot</id>

      <dependencies>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>arquillian-tomee-embedded</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>arquillian-tomee-remote</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>arquillian-tomee-webapp-remote</artifactId>
          <version>${project.version}</version>
        </dependency>

        <!-- just to get it in the correct order -->
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>apache-tomee</artifactId>
          <version>${project.version}</version>
          <classifier>webprofile</classifier>
          <type>zip</type>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>apache-tomee</artifactId>
          <version>${project.version}</version>
          <classifier>plus</classifier>
          <type>zip</type>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>apache-tomee</artifactId>
          <version>${project.version}</version>
          <classifier>plume</classifier>
          <type>zip</type>
        </dependency>

        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>tomee-webapp</artifactId>
          <version>${project.version}</version>
          <type>war</type>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>tomee-plus-webapp</artifactId>
          <version>${project.version}</version>
          <type>war</type>
        </dependency>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>tomee-plume-webapp</artifactId>
          <version>${project.version}</version>
          <type>war</type>
        </dependency>
        <dependency>
          <groupId>org.apache.tomcat</groupId>
          <artifactId>tomcat</artifactId>
          <version>${tomcat.version}</version>
          <type>zip</type>
        </dependency>

      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${surefire.version}</version>
            <executions>
              <execution>
                <id>test-tomee-embedded</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${maven.test.skip}</skip>
                  <argLine>-XX:MaxPermSize=768M</argLine>
                  <systemPropertyVariables>
                    <tomee.version>${project.version}</tomee.version>
                    <arquillian.launch>tomee-embedded</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-embedded</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>

              <!-- Remote against Web Profile, JAX-RS and Plus -->

              <execution>
                <id>test-tomee-remote-webprofile</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>false</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>webprofile</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-remote-plus</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${maven.test.skip}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>plus</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                </configuration>
              </execution>
              <execution>
                <id>test-tomee-remote-plume</id>
                <phase>test</phase>
                <goals>
                  <goal>test</goal>
                </goals>
                <configuration>
                  <skip>${maven.test.skip}</skip>
                  <systemPropertyVariables>
                    <openejb.arquillian.debug>true</openejb.arquillian.debug>
                    <tomee.version>${project.version}</tomee.version>
                    <tomee.classifier>plume</tomee.classifier>
                    <arquillian.launch>tomee-remote</arquillian.launch>
                    <openejb.arquillian.adapter>tomee-remote</openejb.arquillian.adapter>
                  </systemPropertyVariables>
                  <excludes>
                    <exclude>**/AppComposerTest.java</exclude>
                  </excludes>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <skip>true</skip>
              <parallel>none</parallel>
              <threadCount>1</threadCount>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>


    <profile>
      <!--
      Added to make it easy to quickly verify if something "should" work
      -->
      <id>glassfish-embedded</id>
      <properties>
        <version.glassfish>3.1.2.2</version.glassfish>
        <version.arquillian.glassfish.embedded>1.0.0.CR4</version.arquillian.glassfish.embedded>
        <version.mockito>1.9.0</version.mockito>
        <version.maven.embedded.glassfish.plugin>3.1.1</version.maven.embedded.glassfish.plugin>
        <version.maven.war.plugin>2.1.1</version.maven.war.plugin>
        <version.maven.compiler.plugin>2.3.2</version.maven.compiler.plugin>
        <version.maven.failsafe.plugin>2.11</version.maven.failsafe.plugin>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.jboss.arquillian.junit</groupId>
          <artifactId>arquillian-junit-container</artifactId>
          <version>${version.arquillian}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.glassfish.main.extras</groupId>
          <artifactId>glassfish-embedded-all</artifactId>
          <version>${version.glassfish}</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.jboss.arquillian.container</groupId>
          <artifactId>arquillian-glassfish-embedded-3.1</artifactId>
          <version>${version.arquillian.glassfish.embedded}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

  <properties>
    <profile-under-test>webprofile</profile-under-test>
  </properties>
</project>
