This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 328ea1be3 [MNG-7750] Ensure no unwanted interpolation in plugins from 
profiles. (#1076)
328ea1be3 is described below

commit 328ea1be31418df51cabd8e9ca0362f611d3a763
Author: Niels Basjes <git...@basjes.nl>
AuthorDate: Wed Apr 12 12:26:40 2023 +0200

    [MNG-7750] Ensure no unwanted interpolation in plugins from profiles. 
(#1076)
    
    This is the port of https://github.com/apache/maven/pull/1075 to the master 
branch.
    
    The good thing is that this is ONLY the tests because the maven 4 does not 
have the problem of MNG-7750.
    
    A few small changes in the tests were needed to handle the internal 
differences between maven 3.x and maven 4.x.
    
    ---
    
    https://issues.apache.org/jira/browse/MNG-7750
---
 .../apache/maven/project/PomConstructionTest.java  | 202 +++++++++++++++++++++
 .../plugin-interpolation-build/pom.xml             | 123 +++++++++++++
 .../plugin-interpolation-reporting/pom.xml         | 123 +++++++++++++
 3 files changed, 448 insertions(+)

diff --git 
a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java 
b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
index 256745afd..cf8ec1767 100644
--- a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
@@ -28,8 +28,12 @@ import java.util.Map;
 import java.util.Properties;
 
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.project.harness.PomTestWrapper;
 import org.apache.maven.repository.RepositorySystem;
@@ -47,11 +51,13 @@ import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.startsWith;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @PlexusTest
 public class PomConstructionTest {
@@ -135,6 +141,202 @@ public class PomConstructionTest {
         assertEquals("PASSED", pom.getValue("properties[1]/property"));
     }
 
+    /*MNG-7750*/
+    private void checkBuildPluginWithArtifactId(
+            List<Plugin> plugins, String artifactId, String expectedId, String 
expectedConfig) {
+        Plugin plugin = plugins.stream()
+                .filter(p -> p.getArtifactId().equals(artifactId))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(plugin, "Unable to find plugin with artifactId: " + 
artifactId);
+        List<PluginExecution> pluginExecutions = plugin.getExecutions();
+        PluginExecution pluginExecution = pluginExecutions.stream()
+                .filter(pe -> pe.getId().equals(expectedId))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(pluginExecution, "Wrong id for \"" + artifactId + "\"");
+
+        String config = pluginExecution.getConfiguration().toString();
+        assertTrue(
+                config.contains(expectedConfig),
+                "Wrong config for \"" + artifactId + "\": (" + config + ") 
does not contain :" + expectedConfig);
+    }
+
+    private boolean isActiveProfile(MavenProject project, Profile 
activeProfile) {
+        return project.getActiveProfiles().stream().anyMatch(p -> 
p.getId().equals(activeProfile.getId()));
+    }
+
+    @Test
+    void testBuildPluginInterpolation() throws Exception {
+        PomTestWrapper pom = buildPom("plugin-interpolation-build", 
"activeProfile");
+        Model originalModel = pom.getMavenProject().getOriginalModel();
+
+        // =============================================
+        assertEquals("||${project.basedir}||", 
originalModel.getProperties().get("prop-outside"));
+
+        List<Plugin> outsidePlugins = originalModel.getBuild().getPlugins();
+        assertEquals(2, outsidePlugins.size());
+
+        checkBuildPluginWithArtifactId(
+                outsidePlugins,
+                "plugin-all-profiles",
+                "Outside ||${project.basedir}||",
+                "<plugin-all-profiles-out>Outside 
||${project.basedir}||</plugin-all-profiles-out>");
+
+        // =============================================
+        Profile activeProfile = originalModel.getProfiles().stream()
+                .filter(profile -> profile.getId().equals("activeProfile"))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(activeProfile, "Unable to find the activeProfile");
+
+        assertTrue(
+                isActiveProfile(pom.getMavenProject(), activeProfile),
+                "The activeProfile should be active in the maven project");
+
+        assertEquals("||${project.basedir}||", 
activeProfile.getProperties().get("prop-active"));
+
+        List<Plugin> activeProfilePlugins = 
activeProfile.getBuild().getPlugins();
+        assertEquals(2, activeProfilePlugins.size(), "Number of active profile 
plugins");
+
+        checkBuildPluginWithArtifactId(
+                activeProfilePlugins,
+                "plugin-all-profiles",
+                "Active all ||${project.basedir}||",
+                "<plugin-all-profiles-in>Active all 
||${project.basedir}||</plugin-all-profiles-in>");
+
+        checkBuildPluginWithArtifactId(
+                activeProfilePlugins,
+                "only-active-profile",
+                "Active only ||${project.basedir}||",
+                "<plugin-in-active-profile-only>Active only 
||${project.basedir}||</plugin-in-active-profile-only>");
+
+        // =============================================
+
+        Profile inactiveProfile = originalModel.getProfiles().stream()
+                .filter(profile -> profile.getId().equals("inactiveProfile"))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(inactiveProfile, "Unable to find the inactiveProfile");
+
+        assertFalse(
+                isActiveProfile(pom.getMavenProject(), inactiveProfile),
+                "The inactiveProfile should NOT be active in the maven 
project");
+
+        assertEquals("||${project.basedir}||", 
inactiveProfile.getProperties().get("prop-inactive"));
+
+        List<Plugin> inactiveProfilePlugins = 
inactiveProfile.getBuild().getPlugins();
+        assertEquals(2, inactiveProfilePlugins.size(), "Number of active 
profile plugins");
+
+        checkBuildPluginWithArtifactId(
+                inactiveProfilePlugins,
+                "plugin-all-profiles",
+                "Inactive all ||${project.basedir}||",
+                "<plugin-all-profiles-ina>Inactive all 
||${project.basedir}||</plugin-all-profiles-ina>");
+
+        checkBuildPluginWithArtifactId(
+                inactiveProfilePlugins,
+                "only-inactive-profile",
+                "Inactive only ||${project.basedir}||",
+                "<plugin-in-inactive-only>Inactive only 
||${project.basedir}||</plugin-in-inactive-only>");
+    }
+
+    private void checkReportPluginWithArtifactId(
+            List<ReportPlugin> plugins, String artifactId, String expectedId, 
String expectedConfig) {
+        ReportPlugin plugin = plugins.stream()
+                .filter(p -> p.getArtifactId().equals(artifactId))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(plugin, "Unable to find plugin with artifactId: " + 
artifactId);
+        List<ReportSet> pluginReportSets = plugin.getReportSets();
+        ReportSet reportSet = pluginReportSets.stream()
+                .filter(rs -> rs.getId().equals(expectedId))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(reportSet, "Wrong id for \"" + artifactId + "\"");
+
+        String config = reportSet.getConfiguration().toString();
+        assertTrue(
+                config.contains(expectedConfig),
+                "Wrong config for \"" + artifactId + "\": (" + config + ") 
does not contain :" + expectedConfig);
+    }
+
+    @Test
+    void testReportingPluginInterpolation() throws Exception {
+        PomTestWrapper pom = buildPom("plugin-interpolation-reporting", 
"activeProfile");
+        Model originalModel = pom.getMavenProject().getOriginalModel();
+
+        // =============================================
+        assertEquals("||${project.basedir}||", 
originalModel.getProperties().get("prop-outside"));
+
+        List<ReportPlugin> outsidePlugins = 
originalModel.getReporting().getPlugins();
+        assertEquals(2, outsidePlugins.size(), "Wrong number of plugins 
found");
+
+        checkReportPluginWithArtifactId(
+                outsidePlugins,
+                "plugin-all-profiles",
+                "Outside ||${project.basedir}||",
+                "<plugin-all-profiles-out>Outside 
||${project.basedir}||</plugin-all-profiles-out>");
+
+        // =============================================
+        Profile activeProfile = originalModel.getProfiles().stream()
+                .filter(profile -> profile.getId().equals("activeProfile"))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(activeProfile, "Unable to find the activeProfile");
+
+        assertTrue(
+                isActiveProfile(pom.getMavenProject(), activeProfile),
+                "The activeProfile should be active in the maven project");
+
+        assertEquals("||${project.basedir}||", 
activeProfile.getProperties().get("prop-active"));
+
+        List<ReportPlugin> activeProfilePlugins = 
activeProfile.getReporting().getPlugins();
+        assertEquals(2, activeProfilePlugins.size(), "The activeProfile should 
be active in the maven project");
+
+        checkReportPluginWithArtifactId(
+                activeProfilePlugins,
+                "plugin-all-profiles",
+                "Active all ||${project.basedir}||",
+                "<plugin-all-profiles-in>Active all 
||${project.basedir}||</plugin-all-profiles-in>");
+
+        checkReportPluginWithArtifactId(
+                activeProfilePlugins,
+                "only-active-profile",
+                "Active only ||${project.basedir}||",
+                "<plugin-in-active-profile-only>Active only 
||${project.basedir}||</plugin-in-active-profile-only>");
+
+        // =============================================
+
+        Profile inactiveProfile = originalModel.getProfiles().stream()
+                .filter(profile -> profile.getId().equals("inactiveProfile"))
+                .findFirst()
+                .orElse(null);
+        assertNotNull(inactiveProfile, "Unable to find the inactiveProfile");
+
+        assertFalse(
+                isActiveProfile(pom.getMavenProject(), inactiveProfile),
+                "The inactiveProfile should NOT be active in the maven 
project");
+
+        assertEquals("||${project.basedir}||", 
inactiveProfile.getProperties().get("prop-inactive"));
+
+        List<ReportPlugin> inactiveProfilePlugins =
+                inactiveProfile.getReporting().getPlugins();
+        assertEquals(2, inactiveProfilePlugins.size(), "Number of active 
profile plugins");
+
+        checkReportPluginWithArtifactId(
+                inactiveProfilePlugins,
+                "plugin-all-profiles",
+                "Inactive all ||${project.basedir}||",
+                "<plugin-all-profiles-ina>Inactive all 
||${project.basedir}||</plugin-all-profiles-ina>");
+
+        checkReportPluginWithArtifactId(
+                inactiveProfilePlugins,
+                "only-inactive-profile",
+                "Inactive only ||${project.basedir}||",
+                "<plugin-in-inactive-only>Inactive only 
||${project.basedir}||</plugin-in-inactive-only>");
+    }
+
     // Some better conventions for the test poms needs to be created and each 
of these tests
     // that represent a verification of a specification item needs to be a 
couple lines at most.
     // The expressions help a lot, but we need a clean to pick up a directory 
of POMs, automatically load
diff --git 
a/maven-core/src/test/resources-project-builder/plugin-interpolation-build/pom.xml
 
b/maven-core/src/test/resources-project-builder/plugin-interpolation-build/pom.xml
new file mode 100644
index 000000000..56718154a
--- /dev/null
+++ 
b/maven-core/src/test/resources-project-builder/plugin-interpolation-build/pom.xml
@@ -0,0 +1,123 @@
+<?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>
+
+  <groupId>org.apache.maven.its.build.plugins</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <name>MNG-7750</name>
+  <description>
+    Test build plugin and execution interpolation.
+  </description>
+
+  <properties>
+    <prop-outside>||${project.basedir}||</prop-outside>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>plugin-all-profiles</artifactId>
+        <executions>
+          <execution>
+            <id>Outside ||${project.basedir}||</id>
+            <configuration>
+              <plugin-all-profiles-out>Outside 
||${project.basedir}||</plugin-all-profiles-out>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>activeProfile</id>
+      <properties>
+        <prop-active>||${project.basedir}||</prop-active>
+      </properties>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>plugin-all-profiles</artifactId>
+            <executions>
+              <execution>
+                <id>Active all ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-all-profiles-in>Active all 
||${project.basedir}||</plugin-all-profiles-in>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>only-active-profile</artifactId>
+            <executions>
+              <execution>
+                <id>Active only ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-in-active-profile-only>Active only 
||${project.basedir}||</plugin-in-active-profile-only>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
+    <profile>
+      <id>inactiveProfile</id>
+      <properties>
+        <prop-inactive>||${project.basedir}||</prop-inactive>
+      </properties>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>plugin-all-profiles</artifactId>
+            <executions>
+              <execution>
+                <id>Inactive all ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-all-profiles-ina>Inactive all 
||${project.basedir}||</plugin-all-profiles-ina>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>only-inactive-profile</artifactId>
+            <executions>
+              <execution>
+                <id>Inactive only ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-in-inactive-only>Inactive only 
||${project.basedir}||</plugin-in-inactive-only>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
+  </profiles>
+
+</project>
diff --git 
a/maven-core/src/test/resources-project-builder/plugin-interpolation-reporting/pom.xml
 
b/maven-core/src/test/resources-project-builder/plugin-interpolation-reporting/pom.xml
new file mode 100644
index 000000000..aeb6f7de2
--- /dev/null
+++ 
b/maven-core/src/test/resources-project-builder/plugin-interpolation-reporting/pom.xml
@@ -0,0 +1,123 @@
+<?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>
+
+  <groupId>org.apache.maven.its.reporting.plugins</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <name>MNG-7750</name>
+  <description>
+    Test reporting plugin and reportSet interpolation.
+  </description>
+
+  <properties>
+    <prop-outside>||${project.basedir}||</prop-outside>
+  </properties>
+
+  <reporting>
+    <plugins>
+      <plugin>
+        <artifactId>plugin-all-profiles</artifactId>
+        <reportSets>
+          <reportSet>
+            <id>Outside ||${project.basedir}||</id>
+            <configuration>
+              <plugin-all-profiles-out>Outside 
||${project.basedir}||</plugin-all-profiles-out>
+            </configuration>
+          </reportSet>
+        </reportSets>
+      </plugin>
+    </plugins>
+  </reporting>
+
+  <profiles>
+    <profile>
+      <id>activeProfile</id>
+      <properties>
+        <prop-active>||${project.basedir}||</prop-active>
+      </properties>
+      <reporting>
+        <plugins>
+          <plugin>
+            <artifactId>plugin-all-profiles</artifactId>
+            <reportSets>
+              <reportSet>
+                <id>Active all ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-all-profiles-in>Active all 
||${project.basedir}||</plugin-all-profiles-in>
+                </configuration>
+              </reportSet>
+            </reportSets>
+          </plugin>
+          <plugin>
+            <artifactId>only-active-profile</artifactId>
+            <reportSets>
+              <reportSet>
+                <id>Active only ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-in-active-profile-only>Active only 
||${project.basedir}||</plugin-in-active-profile-only>
+                </configuration>
+              </reportSet>
+            </reportSets>
+          </plugin>
+        </plugins>
+      </reporting>
+    </profile>
+
+    <profile>
+      <id>inactiveProfile</id>
+      <properties>
+        <prop-inactive>||${project.basedir}||</prop-inactive>
+      </properties>
+      <reporting>
+        <plugins>
+          <plugin>
+            <artifactId>plugin-all-profiles</artifactId>
+            <reportSets>
+              <reportSet>
+                <id>Inactive all ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-all-profiles-ina>Inactive all 
||${project.basedir}||</plugin-all-profiles-ina>
+                </configuration>
+              </reportSet>
+            </reportSets>
+          </plugin>
+          <plugin>
+            <artifactId>only-inactive-profile</artifactId>
+            <reportSets>
+              <reportSet>
+                <id>Inactive only ||${project.basedir}||</id>
+                <configuration>
+                  <plugin-in-inactive-only>Inactive only 
||${project.basedir}||</plugin-in-inactive-only>
+                </configuration>
+              </reportSet>
+            </reportSets>
+          </plugin>
+        </plugins>
+      </reporting>
+    </profile>
+
+  </profiles>
+
+</project>

Reply via email to