<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.maven.its.mng3475</groupId>
  <artifactId>mng3475</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <name>Maven Integration Test :: MNG-3475</name>
  <description>
    Verify that project directories are basedir aligned when queried by plugin parameter expressions.
  </description>

  <build>
    <!--
    NOTE: Deliberately re-specify default paths to decouple from super POM and interpolation. Proper handling of
    *relative* paths is the whole point of this test.
    -->
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <testOutputDirectory>target/test-classes</testOutputDirectory>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.its.plugins</groupId>
        <artifactId>maven-it-plugin-configuration</artifactId>
        <version>2.1-SNAPSHOT</version>
        <configuration>
          <propertiesFile>target/config.properties</propertiesFile>
          <mapParam>
            <buildDirectory>${project.build.directory}</buildDirectory>
            <buildOutputDirectory>${project.build.outputDirectory}</buildOutputDirectory>
            <buildTestOutputDirectory>${project.build.testOutputDirectory}</buildTestOutputDirectory>
            <buildSourceDirectory>${project.build.sourceDirectory}</buildSourceDirectory>
            <buildTestSourceDirectory>${project.build.testSourceDirectory}</buildTestSourceDirectory>
            <buildScriptSourceDirectory>${project.build.scriptSourceDirectory}</buildScriptSourceDirectory>
            <reportingOutputDirectory>${project.reporting.outputDirectory}</reportingOutputDirectory>
          </mapParam>
          <fileParam>${project.reporting.outputDirectory}</fileParam>
        </configuration>
        <executions>
          <execution>
            <id>interpolated-config</id>
            <phase>validate</phase>
            <goals>
              <goal>config</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <!--
    NOTE: Deliberately re-specify default paths to decouple from super POM and interpolation. Proper handling of
    *relative* paths is the whole point of this test.
    -->
    <outputDirectory>target/site</outputDirectory>
  </reporting>
</project>
