<?xml version="1.0"?>
<!-- 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/maven-v4_0_0.xsd">
    <parent>
    <artifactId>turbine-parent</artifactId>
    <groupId>org.apache.turbine</groupId>
    <version>10-SNAPSHOT</version>
    <relativePath></relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.fulcrum</groupId>
    <artifactId>fulcrum-testcontainer</artifactId>
    <version>1.0.10-SNAPSHOT</version>
    <name>Fulcrum Test Container</name>
    <inceptionYear>2004</inceptionYear>
    <description>A test framework for Avalon components</description>
    <url>https://turbine.apache.org/fulcrum/fulcrum-testcontainer</url>

    <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/turbine-fulcrum-testcontainer.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/turbine-fulcrum-testcontainer.git</developerConnection>
    <url>https://github.com/apache/${turbine.site.path}/tree/${project.scm.tag}</url>
    <tag>HEAD</tag>
    </scm>

   <!-- distributionManagement id and url defined in parent, adapt turbine.site.path -->
    <developers>
    <developer>
        <name>Siegfried Goeschl</name>
        <id>sgoeschl</id>
        <email>sgoeschl@apache.org</email>
        <organization />
        <roles>
            <role>Java Developer</role>
        </roles>
    </developer>
    </developers>

    <dependencies>
    <!-- we still need this dependency to compile -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.1</version>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>${junit.jupiter.version}</version>
      <!-- do not set test scope to allow for runngi surefire test with junit 5  -->
      <!--scope>test</scope -->
    </dependency>
    <!-- use Junit 4 within Junit 5 -->
     <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
         <version>${junit.jupiter.version}</version>
         <!-- do not set test scope to allow for runngi surefire test with junit 4  -->
        <!--scope>test</scope-->
    </dependency>

    <!-- Needed if testing with YAAFI -->
    <dependency>
        <groupId>org.apache.fulcrum</groupId>
        <artifactId>fulcrum-yaafi</artifactId>
        <version>1.0.9-SNAPSHOT</version>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.5.13</version>
    </dependency>
    <!-- Needed if testing with ECM -->
    <dependency>
        <groupId>org.apache.excalibur.component</groupId>
        <artifactId>excalibur-component</artifactId>
        <version>2.2.1</version>
        <type>jar</type>
        <optional>true</optional>
        <exclusions>
           <exclusion>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
        <optional>true</optional>
    </dependency>
    <!-- Log4j2 may be better used by default -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${turbine.log4j2.version}</version>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${turbine.log4j2.version}</version>
        <optional>true</optional>
    </dependency>
    <!-- log4j1.2 bridge instead of log4j -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>${turbine.log4j2.version}</version>
        <optional>true</optional>
    </dependency>

    </dependencies>

    <build>
    <sourceDirectory>${basedir}/src/java</sourceDirectory>
    <testSourceDirectory>${basedir}/src/test</testSourceDirectory>
    <testResources>
        <testResource>
            <directory>${basedir}/src/test</directory>
            <includes>
                <include>*.xml</include>
            </includes>
        </testResource>
    </testResources>
    <plugins>
        <plugin>
            <!-- JUnit 5 requires Surefire version 2.22.0 or higher -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <!-- setting the default: forkCount=1/reuseForks=true -->
                <forkCount>1</forkCount>
                <!-- setting this to false (highest isolation: each test class has its 
                    own jvm process) let maven test ignore all tests? -->
                <reuseForks>true</reuseForks>
            </configuration>
            <dependencies>
                <!-- need no junit-platform-surefire-provider dependency -->
            </dependencies>
        </plugin>
    </plugins>
    </build>

    <properties>
        <turbine.site.path>turbine-fulcrum-testcontainer</turbine.site.path>
        <turbine.scmPubCheckoutDirectory>${turbine.site.cache}/fulcrum/testcontainer</turbine.scmPubCheckoutDirectory>
        <junit.jupiter.version>5.8.1</junit.jupiter.version>
        <junit.platform>1.7.1</junit.platform>
    </properties>

</project>
