<?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.surefire</groupId>
    <artifactId>surefire</artifactId>
    <version>2.19</version>
  </parent>

  <artifactId>surefire-setup-integration-tests</artifactId>

  <name>Maven Surefire Integration Test Setup</name>
  <description>Creates internal M2 local repository in target/it-repo/. The project is not deployed.</description>

  <properties>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <it.settings.showPasswords>false</it.settings.showPasswords>
    <testng.version>5.7</testng.version>
    <surefire.threadcount>2</surefire.threadcount>
    <surefire.build.version>2.8</surefire.build.version>
  </properties>

  <dependencies>
    <dependency>
      <artifactId>maven-failsafe-plugin</artifactId>
      <groupId>org.apache.maven.plugins</groupId>
      <version>${project.version}</version>
      <type>maven-plugin</type>
    </dependency>
    <dependency>
      <artifactId>maven-surefire-report-plugin</artifactId>
      <groupId>org.apache.maven.plugins</groupId>
      <version>${project.version}</version>
      <type>maven-plugin</type>
    </dependency>
    <dependency>
      <artifactId>maven-surefire-plugin</artifactId>
      <groupId>org.apache.maven.plugins</groupId>
      <version>${project.version}</version>
      <type>maven-plugin</type>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-testng</artifactId>
      <version>${project.version}</version>
      <exclusions>
        <!-- SC don't want our surefire getting confused and trying to use the testng runner -->
        <exclusion>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit3</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit4</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit47</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-settings</artifactId>
      <version>2.0.6</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>net.sourceforge.htmlunit</groupId>
      <artifactId>htmlunit</artifactId>
      <version>2.8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.0.1</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-help-plugin</artifactId>
        <version>2.2</version>
        <executions>
          <execution>
            <id>settings.xml</id>
            <phase>generate-test-resources</phase>
            <goals>
              <goal>effective-settings</goal>
            </goals>
            <configuration>
              <output>${project.build.directory}/private/settings.xml</output>
              <showPasswords>${it.settings.showPasswords}</showPasswords>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-invoker-plugin</artifactId>
        <version>1.8</version>
        <configuration>
          <extraArtifacts>
            <extraArtifact>org.apache.maven.surefire:surefire-testng-utils:${project.version}</extraArtifact>
          </extraArtifacts>
          <localRepositoryPath>${project.build.directory}/it-repo</localRepositoryPath>
          <extraArtifacts>
            <extraArtifact>org.testng:testng:4.7:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.0.2:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.1:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.5:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.6:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.7:jar:jdk14</extraArtifact>
            <extraArtifact>org.testng:testng:5.7:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.8:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.9:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.10:jar:jdk15</extraArtifact>
            <extraArtifact>org.testng:testng:5.12.1</extraArtifact>
            <extraArtifact>org.testng:testng:5.13</extraArtifact>
            <extraArtifact>org.testng:testng:5.13.1</extraArtifact>
            <extraArtifact>org.testng:testng:5.14</extraArtifact>
            <extraArtifact>org.testng:testng:5.14.1</extraArtifact>
            <extraArtifact>org.testng:testng:5.14.2</extraArtifact>
            <extraArtifact>org.testng:testng:5.14.9</extraArtifact>
            <extraArtifact>org.testng:testng:6.0</extraArtifact>
            <extraArtifact>org.testng:testng:6.5.1</extraArtifact>
            <extraArtifact>com.google.inject:guice:3.0:jar:no_aop</extraArtifact>
            <extraArtifact>log4j:log4j:1.2.16</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-clean-plugin:2.4.1</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-compiler-plugin:2.3.2</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-compiler-plugin:2.5.1</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-install-plugin:2.3.1</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-compiler-plugin:2.0.2</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-resources-plugin:2.5</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-jar-plugin:2.3.2</extraArtifact>
            <extraArtifact>org.apache.commons:commons-email:1.2</extraArtifact>
            <extraArtifact>org.codehaus.mojo:build-helper-maven-plugin:1.2</extraArtifact>
            <extraArtifact>org.apache.maven.reporting:maven-reporting-api:2.2.1</extraArtifact>
            <extraArtifact>commons-collections:commons-collections:3.2</extraArtifact>
            <extraArtifact>commons-logging:commons-logging:1.0.4</extraArtifact>
            <extraArtifact>xml-apis:xml-apis:1.0.b2</extraArtifact>
            <extraArtifact>org.apache.httpcomponents:httpclient:4.0.2</extraArtifact>
            <extraArtifact>junit:junit:4.4</extraArtifact>
            <extraArtifact>junit:junit:4.5</extraArtifact>
            <extraArtifact>junit:junit:4.7</extraArtifact>
            <extraArtifact>junit:junit:4.8.1</extraArtifact>
            <extraArtifact>junit:junit:4.8.2</extraArtifact>
            <extraArtifact>junit:junit:4.11</extraArtifact>
            <extraArtifact>junit:junit-dep:4.8</extraArtifact>
            <extraArtifact>junit:junit-dep:4.7</extraArtifact>
            <extraArtifact>junit:junit-dep:4.4</extraArtifact>
            <extraArtifact>org.apache.maven.plugins:maven-surefire-plugin:2.10</extraArtifact>
            <extraArtifact>org.apache.maven.surefire:surefire-junit3:2.10</extraArtifact>
            <extraArtifact>org.codehaus.plexus:plexus-utils:1.0.4</extraArtifact>
            <extraArtifact>org.codehaus.plexus:plexus-utils:1.4.1</extraArtifact>
            <extraArtifact>org.codehaus.plexus:plexus-utils:1.5.1</extraArtifact>
            <extraArtifact>org.codehaus.plexus:plexus-utils:1.5.8</extraArtifact>
            <extraArtifact>org.codehaus.plexus:plexus-utils:1.5.15</extraArtifact>
            <extraArtifact>org.mockito:mockito-core:1.8.5</extraArtifact>
            <extraArtifact>org.codehaus.plexus:plexus-interpolation:1.12</extraArtifact>
          </extraArtifacts>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>install</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <!--test>**/SetUpForIntegrationTest</test-->
          <!-- Pass current surefire version to the main suite so that it -->
          <!-- can forward to all integration test projects. SUREFIRE-513 -->
          <systemPropertyVariables>
            <surefire.version>${project.version}</surefire.version>
            <testng.version>${testng.version}</testng.version>
            <maven.home>${maven.home}</maven.home>
            <maven.settings.file>${project.build.directory}/private/settings.xml</maven.settings.file>
            <maven.staged.local.repo>${project.build.directory}/it-repo</maven.staged.local.repo>
          </systemPropertyVariables>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-shadefire</artifactId>
            <version>2.12.4</version> <!-- ${shadedVersion}, but resolved due to http://jira.codehaus.org/browse/MRELEASE-799 -->
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>require-maven-2.1.0</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <!-- Some plugin features require a recent Maven runtime to work (e.g. SystemPropertiesTest) -->
                  <version>[2.1.0,)</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
