<?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.

  To test with the maven wrapper, you should add the wrapperDistroDir too.

    mvn clean test -Prun-its -Dmaven.repo.local=<path-to-local-repo>  -DmavenDistro=<path-to-bin-archive> -DwrapperDistroDir=<path-to-wrapper-distro-directory> -DmavenWrapper=<path-to-wrapper-jar>

  Tests can pick up the maven.wrapper.distrodir system property to unpack it into their testDir to verify the wrapper.

  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>https://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.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
      <version>3.3.0</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>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-archiver</artifactId>
      <version>3.6.0</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.sisu</groupId>
      <artifactId>org.eclipse.sisu.plexus</artifactId>
      <version>0.3.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-repository-metadata</artifactId>
      <version>3.6.3</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>
            <property>
              <name>maven.wrapper.distrodir</name>
              <value>${wrapperDistroDir}</value>
            </property>
            <property>
              <name>maven.distro</name>
              <value>${mavenDistro}</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>3.0.0</version>
            <executions>
              <execution>
                <id>unpack-maven-distro</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <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" />
                  </target>
                </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>3.0.0</version>
            <executions>
              <execution>
                <id>unpack-maven-distro</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <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" />
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>maven-wrapper</id>
      <activation>
        <property>
          <name>mavenWrapper</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>2.5.2</version>
            <executions>
              <!-- install, so it can be called via a URL -->
              <execution>
                <id>prepare-wrapper</id>
                <phase>process-test-resources</phase>
                <goals>
                  <goal>install-file</goal>
                </goals>
                <configuration>
                  <file>${mavenWrapper}</file>
                </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>3.0.0</version>
            <executions>
              <execution>
                <id>copy-maven-distro</id>
                <phase>process-test-classes</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target>
                    <delete dir="${preparedMavenHome}" />
                    <copy todir="${preparedMavenHome}" overwrite="true">
                      <fileset dir="${mavenHome}" />
                    </copy>
                    <chmod dir="${preparedMavenHome}/bin" perm="ugo+rx"
                      includes="mvn,mvnDebug" />
                  </target>
                </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>
