<?xml version="1.0" encoding="UTF-8"?>

<!--
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>
    <groupId>org.apache.maven.its</groupId>
    <artifactId>core-its</artifactId>
    <version>2.1-SNAPSHOT</version>
  </parent>

  <artifactId>core-it-suite</artifactId>

  <name>Maven Core ITs suite</name>
  <description>The effective Maven Integration Tests suite.</description>

  <!--
  By default, the project just packages the tests in an artifact. To actually run them, activate the profile "run-its":
  
    mvn clean test -Prun-its
  
  This will subject the Maven version running the build to the integration tests. If you would like to test a different
  Maven distribution, you can use the system property "mavenHome" to specify the path of the Maven distribution to test:
  
    mvn clean test -Prun-its -DmavenHome=<maven-under-test>
  
  Alternatively, you can just specify the version of a previously installed/deployed Maven distribution which will be
  downloaded, unpacked and tested:

    mvn clean test -Prun-its -DmavenVersion=2.2.1
  
  It's also possible to point the ITs at an already downloaded Maven distribution:
  
    mvn clean test -Prun-its -DmavenDistro=<path-to-bin-archive>
  
  To run the ITs using embedded Maven 3.x, additionally activate the profile "embedded".
  
  ITs that don't require to fork Maven can also be run from the IDE using the Maven projects from the workspace if the
  Maven dependencies are added to the test class path.
  
  If you're behind a proxy, use the system properties proxy.host, proxy.port, proxy.user, proxy.pass and
  proxy.nonProxyHosts to specify the required proxy setup for the ITs. Alternatively, set the system property
  maven.it.central to a URL of a local repository manager (anonymous authentication only) that proxies the
  required artifacts.
  -->

  <properties>
    <surefireMemory>-Xmx384m</surefireMemory>
    <!-- The original Maven distribution to test. -->
    <mavenHome>${maven.home}</mavenHome>
    <!-- The (possibly instrumented copy of the) Maven distribution we actually 
      use for the tests. -->
    <preparedMavenHome>${mavenHome}</preparedMavenHome>
    <!-- default properties used to filter the global settings -->
    <maven.it.central>http://repo1.maven.org/maven2</maven.it.central>
    <proxy.active>false</proxy.active>
    <proxy.host>localhost</proxy.host>
    <proxy.port>80</proxy.port>
    <proxy.type>none</proxy.type>
    <proxy.user></proxy.user>
    <proxy.pass></proxy.pass>
    <proxy.nonProxyHosts>localhost</proxy.nonProxyHosts>
    <slf4jVersion>1.6.1</slf4jVersion>
    <jetty9Version>9.0.4.v20130625</jetty9Version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <!-- NOTE: Use compile scope for transitivity. -->
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
      <version>1.5.8</version>
      <!-- NOTE: Use compile scope for transitivity. -->
    </dependency>
    <dependency>
      <groupId>org.apache.maven.its</groupId>
      <artifactId>maven-it-helper</artifactId>
      <version>2.1-SNAPSHOT</version>
      <!-- TODO: not transitive in tests artifact, so must be left in main 
        scope <scope>test</scope> -->
    </dependency>
    <dependency>
      <groupId>org.apache.maven.shared</groupId>
      <artifactId>maven-verifier</artifactId>
      <!-- TODO: not transitive in tests artifact, so must be left in main 
        scope <scope>test</scope> -->
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jetty9Version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.shared</groupId>
      <artifactId>maven-shared-utils</artifactId>
      <version>0.9</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-util</artifactId>
      <version>${jetty9Version}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <version>${jetty9Version}</version>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>16.0</version>
    </dependency>
  </dependencies>

  <build>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
      <testResource>
        <directory>src/test/resources-filtered</directory>
        <filtering>true</filtering>
      </testResource>
    </testResources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <includes>
            <include>**/IntegrationTestSuite.java</include>
          </includes>
          <forkMode>never</forkMode>
          <skip>true</skip>
          <systemProperties>
            <property>
              <name>maven.version</name>
              <value>${maven.version}</value>
            </property>
            <property>
              <name>maven.home</name>
              <value>${preparedMavenHome}</value>
            </property>
            <property>
              <name>maven.it.global-settings.dir</name>
              <value>${project.build.testOutputDirectory}</value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
      <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>

  <profiles>
    <profile>
      <id>parallel</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <parallel>classes</parallel>
              <threadCount>6</threadCount>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>run-its</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <skip>false</skip>
            </configuration>
          </plugin>
        </plugins>
      </build>
      <dependencies>
        <!-- not really used but will force download in the local repo used -->
        <dependency>
          <groupId>org.apache.maven.wagon</groupId>
          <artifactId>wagon-webdav-jackrabbit</artifactId>
          <version>2.0</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>${slf4jVersion}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-simple</artifactId>
          <version>${slf4jVersion}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
    <profile>
      <id>maven-repo-local</id>
      <activation>
        <property>
          <name>maven.repo.local</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <systemProperties combine.children="append">
                <property>
                  <!-- Pass this through to the tests (if set!) to have them 
                    pick the right repository -->
                  <name>maven.repo.local</name>
                  <value>${maven.repo.local}</value>
                </property>
              </systemProperties>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>maven-repo-local-layout</id>
      <activation>
        <property>
          <name>maven.repo.local.layout</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <systemProperties combine.children="append">
                <property>
                  <!-- Pass this through to the tests (if set!) to have them 
                    pick the right repository layout -->
                  <name>maven.repo.local.layout</name>
                  <value>${maven.repo.local.layout}</value>
                </property>
              </systemProperties>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jdk-properties</id>
      <activation>
        <jdk>(,1.8)</jdk>
      </activation>
      <properties>
         <surefireMemory>-Xmx384m -XX:MaxPermSize=192m</surefireMemory>
      </properties>
    </profile> 
    <profile>
      <id>embedded</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <skip>false</skip>
              <forkMode>once</forkMode>
              <argLine>${surefireMemory}
                -Dcom.sun.management.jmxremote=true</argLine>
              <!-- NOTE: Maven plugins have access to the system class path 
                so keep it clean -->
              <useSystemClassLoader>false</useSystemClassLoader>
              <systemProperties combine.children="append">
                <property>
                  <name>verifier.forkMode</name>
                  <value>auto</value>
                </property>
                <property>
                  <name>emma.rt.control</name>
                  <value>false</value>
                </property>
              </systemProperties>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>maven-from-repo</id>
      <activation>
        <property>
          <name>mavenVersion</name>
        </property>
      </activation>
      <properties>
        <mavenHome>${project.build.directory}/apache-maven</mavenHome>
      </properties>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <skip>false</skip>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
              <execution>
                <id>download-maven-distro</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>copy</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.apache.maven</groupId>
                      <artifactId>apache-maven</artifactId>
                      <version>${mavenVersion}</version>
                      <classifier>bin</classifier>
                      <type>zip</type>
                      <destFileName>maven-bin.zip</destFileName>
                    </artifactItem>
                  </artifactItems>
                  <outputDirectory>${project.build.directory}</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.3</version>
            <executions>
              <execution>
                <id>unpack-maven-distro</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <tasks>
                    <delete dir="${mavenHome}" />
                    <unzip src="${project.build.directory}/maven-bin.zip"
                      dest="${mavenHome}">
                      <globmapper from="apache-maven-${mavenVersion}/*"
                        to="*" handledirsep="true" />
                    </unzip>
                    <chmod dir="${mavenHome}/bin" perm="ugo+rx"
                      includes="mvn,mvnDebug" />
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>maven-distro</id>
      <activation>
        <property>
          <name>mavenDistro</name>
        </property>
      </activation>
      <properties>
        <mavenHome>${project.build.directory}/apache-maven</mavenHome>
      </properties>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <skip>false</skip>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
              <execution>
                <id>unpack-maven-distro</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <tasks>
                    <delete dir="${mavenHome}" />
                    <unzip src="${mavenDistro}" dest="${mavenHome}">
                      <regexpmapper from="^([^/]+)/(.*)$"
                        to="\2" handledirsep="true" />
                    </unzip>
                    <chmod dir="${mavenHome}/bin" perm="ugo+rx"
                      includes="mvn,mvnDebug" />
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>emma</id>
      <properties>
        <preparedMavenHome>${project.build.directory}/distro</preparedMavenHome>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <skip>false</skip>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.3</version>
            <executions>
              <execution>
                <id>copy-maven-distro</id>
                <phase>process-test-classes</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <tasks>
                    <delete dir="${preparedMavenHome}" />
                    <copy todir="${preparedMavenHome}" overwrite="true">
                      <fileset dir="${mavenHome}" />
                    </copy>
                    <chmod dir="${preparedMavenHome}/bin" perm="ugo+rx"
                      includes="mvn,mvnDebug" />
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.0</version>
            <executions>
              <execution>
                <id>inject-emma-into-core-realm</id>
                <phase>process-test-classes</phase>
                <goals>
                  <goal>copy</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>emma</groupId>
                      <artifactId>emma</artifactId>
                      <version>2.1.5320</version>
                    </artifactItem>
                  </artifactItems>
                  <outputDirectory>${preparedMavenHome}/lib</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.sonatype.maven.plugin</groupId>
            <artifactId>emma4it-maven-plugin</artifactId>
            <version>1.2</version>
            <configuration>
              <jarSets>
                <jarSet>
                  <directory>${preparedMavenHome}/lib</directory>
                  <includes>
                    <include>maven*.jar</include>
                  </includes>
                </jarSet>
              </jarSets>
              <includes>
                <include>org.apache.maven.*</include>
              </includes>
              <excludes>
                <exclude>*.io.xpp3.*</exclude>
                <exclude>*Exception</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <id>instrument</id>
                <phase>process-test-classes</phase>
                <goals>
                  <goal>instrument</goal>
                </goals>
              </execution>
              <execution>
                <id>report</id>
                <phase>test</phase>
                <goals>
                  <goal>report</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
            <configuration>
              <filesets>
                <fileset>
                  <directory>${basedir}</directory>
                  <includes>
                    <include>coverage.ec</include>
                  </includes>
                </fileset>
              </filesets>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>proxy</id>
      <activation>
        <property>
          <name>proxy.host</name>
        </property>
      </activation>
      <properties>
        <proxy.type>http</proxy.type>
        <proxy.active>true</proxy.active>
      </properties>
    </profile>
  </profiles>
</project>
