<!--

    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.mvndaemon.mvnd</groupId>
        <artifactId>mvnd</artifactId>
        <version>0.7.2-SNAPSHOT</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/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.mvndaemon.mvnd</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>