<?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.4.29.v20200521</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>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>
    <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>
  </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>
