<!--

    Copyright 2019 the original author or authors.

    Licensed 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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.maven.daemon</groupId>
        <artifactId>mvnd</artifactId>
        <version>0.8.2</version>
    </parent>

    <artifactId>mvnd-integration-tests</artifactId>

    <name>Maven Daemon - Integration Tests</name>

    <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
        <mvnd.home>${project.basedir}/../dist/target/maven-mvnd-${project.version}-${os.detected.name}-${os.detected.arch}</mvnd.home>
        <preinstall.artifacts>
            org/apache/maven/surefire/surefire-providers/${surefire.version}
            org/apache/maven/surefire/surefire-junit-platform/${surefire.version}
            org/junit/platform/junit-platform-launcher/${junit-platform-launcher.version}
            org/junit/platform/junit-platform-engine/${junit-platform-launcher.version}
            org/junit/platform/junit-platform-commons/${junit-platform-launcher.version}
            org/junit/jupiter/junit-jupiter/${junit.jupiter.version}
            org/junit/jupiter/junit-jupiter-api/${junit.jupiter.version}
        </preinstall.artifacts>

    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.inject</groupId>
            <artifactId>jakarta.inject-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.daemon</groupId>
            <artifactId>mvnd-dist</artifactId>
            <type>pom</type>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-simple</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-model</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <systemPropertyVariables>
                        <project.version>${project.version}</project.version>
                        <mvnd.home>${mvnd.home}</mvnd.home>
                        <mrm.repository.url>${mrm.repository.url}</mrm.repository.url>
                        <os.detected.name>${os.detected.name}</os.detected.name>
                        <os.detected.arch>${os.detected.arch}</os.detected.arch>
                        <mvnd.test.hostLocalMavenRepo>${settings.localRepository}</mvnd.test.hostLocalMavenRepo>
                        <preinstall.artifacts>${preinstall.artifacts}</preinstall.artifacts>
                    </systemPropertyVariables>
                    <rerunFailingTestsCount>2</rerunFailingTestsCount>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-install</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <!-- To disable mrm-maven-plugin, pass '-Dmrm=false' to the command line -->
            <id>mrm</id>
            <activation>
                <property>
                    <name>mrm</name>
                    <value>!false</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>mrm-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>mrm-start</id>
                                <phase>process-test-classes</phase>
                                <goals>
                                    <goal>start</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>mrm-stop</id>
                                <phase>post-integration-test</phase>
                                <goals>
                                    <goal>stop</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>native</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                                <configuration>
                                    <systemPropertyVariables>
                                        <project.version>${project.version}</project.version>
                                        <mvnd.home>${mvnd.home}</mvnd.home>
                                        <mrm.repository.url>${mrm.repository.url}</mrm.repository.url>
                                        <os.detected.name>${os.detected.name}</os.detected.name>
                                        <os.detected.arch>${os.detected.arch}</os.detected.arch>
                                        <mvnd.test.hostLocalMavenRepo>${settings.localRepository}</mvnd.test.hostLocalMavenRepo>
                                        <preinstall.artifacts>${preinstall.artifacts}</preinstall.artifacts>
                                    </systemPropertyVariables>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>