diff --git a/src/it-repo/dummy-maven-plugin-3.1.pom b/src/it-repo/dummy-maven-plugin-3.1.pom
index dc8a00526..ba9772205 100644
--- a/src/it-repo/dummy-maven-plugin-3.1.pom
+++ b/src/it-repo/dummy-maven-plugin-3.1.pom
@@ -119,6 +119,27 @@
+
+
+ maven-enforcer-plugin
+ 3.0.0
+
+
+ enforce-maven
+
+ enforce
+
+
+
+
+ 3.8.4
+
+
+
+
+
+
+
diff --git a/src/it/it-display-plugin-updates-010-issue-526/invoker.properties b/src/it/it-display-plugin-updates-010-issue-526/invoker.properties
new file mode 100644
index 000000000..3e9221daf
--- /dev/null
+++ b/src/it/it-display-plugin-updates-010-issue-526/invoker.properties
@@ -0,0 +1 @@
+invoker.goals=${project.groupId}:${project.artifactId}:${project.version}:display-plugin-updates
diff --git a/src/it/it-display-plugin-updates-010-issue-526/pom.xml b/src/it/it-display-plugin-updates-010-issue-526/pom.xml
new file mode 100644
index 000000000..475104b78
--- /dev/null
+++ b/src/it/it-display-plugin-updates-010-issue-526/pom.xml
@@ -0,0 +1,45 @@
+
+ 4.0.0
+
+ localhost
+ it-101
+ 1.0
+ pom
+ display-plugin-updates
+ IT for https://github.com/mojohaus/versions-maven-plugin/issues/526
+
+
+
+
+
+ localhost
+ dummy-maven-plugin
+ 1.0
+
+
+
+
+
+ maven-enforcer-plugin
+ 3.0.0
+
+
+ enforce-maven
+
+ enforce
+
+
+
+
+ 3.3.9
+
+
+
+
+
+
+
+
+
+
diff --git a/src/it/it-display-plugin-updates-010-issue-526/verify.bsh b/src/it/it-display-plugin-updates-010-issue-526/verify.bsh
new file mode 100644
index 000000000..c596e415b
--- /dev/null
+++ b/src/it/it-display-plugin-updates-010-issue-526/verify.bsh
@@ -0,0 +1,33 @@
+import java.io.*;
+import org.codehaus.plexus.util.FileUtils;
+import java.util.regex.*;
+
+try
+{
+ File file = new File( basedir, "build.log" );
+ String buf = FileUtils.fileRead( file );
+
+ Pattern p1 = Pattern.compile( "\\QNo plugins require a newer version of Maven than specified by the pom.\\E" );
+ Matcher m1 = p1.matcher( buf.toString() );
+ Pattern p2 = Pattern.compile( "\\Qlocalhost:dummy-maven-plugin\\E\\s*\\.*\\s*\\Q1.0 -> 3.1\\E" );
+ Matcher m2 = p2.matcher( buf.toString() );
+ if ( !m1.find() )
+ {
+ System.out.println( "Did not correctly detect minimum Maven build version 3.0 of this project" );
+ return false;
+ }
+ if ( !m2.find() )
+ {
+ System.out.println( "Did not suggest updating dummy-maven-plugin to version 3.1" );
+ return false;
+ }
+ System.out.println( m1.group( 0 ) );
+ System.out.println( m2.group( 0 ) );
+}
+catch( Throwable t )
+{
+ t.printStackTrace();
+ return false;
+}
+
+return true;
diff --git a/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java b/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java
index 2bff6801b..7ed7ca4b2 100644
--- a/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java
+++ b/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java
@@ -38,6 +38,7 @@
import org.apache.maven.lifecycle.mapping.LifecycleMapping;
import org.apache.maven.model.Model;
import org.apache.maven.model.Plugin;
+import org.apache.maven.model.Prerequisites;
import org.apache.maven.model.Profile;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
@@ -382,7 +383,7 @@ public void execute()
List pluginUpdates = new ArrayList<>();
List pluginLockdowns = new ArrayList<>();
ArtifactVersion curMavenVersion = runtimeInformation.getApplicationVersion();
- ArtifactVersion specMavenVersion = new DefaultArtifactVersion( getRequiredMavenVersion( getProject(), "2.0" ) );
+ ArtifactVersion specMavenVersion = MinimalMavenBuildVersionFinder.find( getProject(), "2.0", getLog() );
ArtifactVersion minMavenVersion = null;
boolean superPomDrivingMinVersion = false;
// if Maven prerequisite upgraded to a version, Map
@@ -433,8 +434,7 @@ public void execute()
getHelper().resolveArtifact( probe, true );
MavenProject pluginMavenProject =
projectBuilder.buildFromRepository( probe, remotePluginRepositories, localRepository );
- ArtifactVersion pluginRequires =
- new DefaultArtifactVersion( getRequiredMavenVersion( pluginMavenProject, "2.0" ) );
+ ArtifactVersion pluginRequires = getPrerequisitesMavenVersion( pluginMavenProject );
if ( artifactVersion == null && compare( specMavenVersion, pluginRequires ) >= 0 )
{
// ok, newer version compatible with current specMavenVersion
@@ -492,8 +492,7 @@ public void execute()
getHelper().resolveArtifact( probe, true );
MavenProject mavenProject =
projectBuilder.buildFromRepository( probe, remotePluginRepositories, localRepository );
- ArtifactVersion requires =
- new DefaultArtifactVersion( getRequiredMavenVersion( mavenProject, "2.0" ) );
+ ArtifactVersion requires = getPrerequisitesMavenVersion( mavenProject );
if ( minMavenVersion == null || compare( minMavenVersion, requires ) < 0 )
{
minMavenVersion = requires;
@@ -595,30 +594,14 @@ && new DefaultArtifactVersion( effectiveVersion ).compareTo( new DefaultArtifact
logLine( false, "" );
// information on minimum Maven version
- boolean noMavenMinVersion = getRequiredMavenVersion( getProject(), null ) == null;
- boolean noExplicitMavenMinVersion =
- getProject().getPrerequisites() == null || getProject().getPrerequisites().getMaven() == null;
+ boolean noMavenMinVersion = MinimalMavenBuildVersionFinder.find( getProject(), null, getLog() ) == null;
if ( noMavenMinVersion )
{
- getLog().warn( "Project does not define minimum Maven version, default is: 2.0" );
- }
- else if ( noExplicitMavenMinVersion )
- {
- logLine( false, "Project inherits minimum Maven version as: " + specMavenVersion );
+ getLog().warn( "Project does not define minimum Maven version required for build, default is: 2.0" );
}
else
{
- ArtifactVersion explicitMavenVersion =
- new DefaultArtifactVersion( getProject().getPrerequisites().getMaven() );
- if ( compare( explicitMavenVersion, specMavenVersion ) < 0 )
- {
- logLine( true, "Project's effective minimum Maven (from parent) is: " + specMavenVersion );
- logLine( true, "Project defines minimum Maven version as: " + explicitMavenVersion );
- }
- else
- {
- logLine( false, "Project defines minimum Maven version as: " + specMavenVersion );
- }
+ logLine( false, "Project requires minimum Maven version for build of: " + specMavenVersion );
}
logLine( false, "Plugins require minimum Maven version of: " + minMavenVersion );
if ( superPomDrivingMinVersion )
@@ -822,13 +805,6 @@ private String compactKey( String groupId, String artifactId )
return groupId + ":" + artifactId;
}
- private String getRequiredMavenVersion( MavenProject mavenProject, String defaultValue )
- {
- ArtifactVersion requiredMavenVersion = new RequiredMavenVersionFinder( mavenProject ).find();
-
- return requiredMavenVersion == null ? defaultValue : requiredMavenVersion.toString();
- }
-
private static final class StackState
{
private final String path;
@@ -936,6 +912,26 @@ else if ( event.isEndElement() )
// -------------------------- OTHER METHODS --------------------------
+ /**
+ * Get the minimum required Maven version of the given plugin
+ * Same logic as in https://github.com/apache/maven-plugin-tools/blob/c8ddcdcb10d342a5a5e2f38245bb569af5730c7c/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java#L711
+ * @param pluginProject the plugin for which to retrieve the minimum Maven version which is required
+ * @return The minimally required Maven version (never {@code null})
+ */
+ private ArtifactVersion getPrerequisitesMavenVersion( MavenProject pluginProject ) {
+ Prerequisites prerequisites = pluginProject.getPrerequisites();
+ if (null == prerequisites) {
+ return new DefaultArtifactVersion("2.0");
+ }
+
+ String prerequisitesMavenValue = prerequisites.getMaven();
+ if (null == prerequisitesMavenValue) {
+ return new DefaultArtifactVersion("2.0");
+ }
+
+ return new DefaultArtifactVersion(prerequisitesMavenValue);
+ }
+
/**
* Gets the build plugins of a specific project.
*
diff --git a/src/main/java/org/codehaus/mojo/versions/RequiredMavenVersionFinder.java b/src/main/java/org/codehaus/mojo/versions/MinimalMavenBuildVersionFinder.java
similarity index 68%
rename from src/main/java/org/codehaus/mojo/versions/RequiredMavenVersionFinder.java
rename to src/main/java/org/codehaus/mojo/versions/MinimalMavenBuildVersionFinder.java
index bf942f5da..a8d8b211b 100644
--- a/src/main/java/org/codehaus/mojo/versions/RequiredMavenVersionFinder.java
+++ b/src/main/java/org/codehaus/mojo/versions/MinimalMavenBuildVersionFinder.java
@@ -1,108 +1,94 @@
package org.codehaus.mojo.versions;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginExecution;
-import org.apache.maven.model.Prerequisites;
+import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
-import java.util.ArrayList;
-import java.util.List;
-
/**
- * Finds the minimum Maven version required by a Maven project.
- * Checks for the existence of both the prerequisites.maven property and for maven-enforcer-plugin:enforce goal.
- * Returns null if no minimum version is found.
- * Checks project and it's parents recursively.
- *
- * Pros: works with Maven 3.5.0 which throws a warning if prerequisites.maven is set for a non Maven-Plugin project.
- * Cons: tightly coupled with the maven-enforcer-plugin and the Xpp3Dom configuration tag.
+ * Finds the minimal Maven version required to build a Maven project.
+ * Evaluates the {@code maven-enforcer-plugin:enforce} goal and
+ * its {@code requireMavenVersion} rule.
+ *
+ * @see Require Maven Version Rule
*/
-class RequiredMavenVersionFinder {
+class MinimalMavenBuildVersionFinder {
- private final MavenProject mavenProject;
-
- RequiredMavenVersionFinder(MavenProject mavenProject) {
- this.mavenProject = mavenProject;
+ private MinimalMavenBuildVersionFinder() {
+ // not supposed to be created, static methods only
}
- ArtifactVersion find() {
- ArtifactVersion childMavenVersion = getHighestArtifactVersion(getPrerequisitesMavenVersion(), getEnforcerMavenVersion());
-
- if (!mavenProject.hasParent()) {
- return childMavenVersion;
+ static ArtifactVersion find(MavenProject mavenProject, String defaultVersion, Log log) {
+ ArtifactVersion version = getEnforcerMavenVersion(mavenProject, log);
+ if (version == null && defaultVersion != null) {
+ version = new DefaultArtifactVersion(defaultVersion);
}
-
- ArtifactVersion parentMavenVersion = new RequiredMavenVersionFinder(mavenProject.getParent()).find();
-
- return getHighestArtifactVersion(childMavenVersion, parentMavenVersion);
+ return version;
}
- private ArtifactVersion getPrerequisitesMavenVersion() {
- Prerequisites prerequisites = mavenProject.getPrerequisites();
- if (null == prerequisites) {
- return null;
- }
-
- String prerequisitesMavenValue = prerequisites.getMaven();
- if (null == prerequisitesMavenValue) {
- return null;
- }
-
- return new DefaultArtifactVersion(prerequisitesMavenValue);
- }
-
- private ArtifactVersion getEnforcerMavenVersion() {
+ private static ArtifactVersion getEnforcerMavenVersion(MavenProject mavenProject, Log log) {
List buildPlugins = mavenProject.getBuildPlugins();
if (null == buildPlugins) {
+ log.debug("MinimalMavenBuildVersionFinder: No build plugins found");
return null;
}
Plugin mavenEnforcerPlugin = getMavenEnforcerPlugin(buildPlugins);
if (null == mavenEnforcerPlugin) {
+ log.debug("MinimalMavenBuildVersionFinder: No maven-enforcer-plugin used");
return null;
}
List pluginExecutions = mavenEnforcerPlugin.getExecutions();
if (null == pluginExecutions) {
+ log.debug("MinimalMavenBuildVersionFinder: No executions of maven-enforcer-plugin found");
return null;
}
List pluginExecutionsWithEnforceGoal = getPluginExecutionsWithEnforceGoal(pluginExecutions);
if (pluginExecutionsWithEnforceGoal.isEmpty()) {
+ log.debug("MinimalMavenBuildVersionFinder: No 'enforce' execution of maven-enforcer-plugin found");
return null;
}
Xpp3Dom requireMavenVersionTag = getRequireMavenVersionTag(pluginExecutionsWithEnforceGoal);
if (null == requireMavenVersionTag) {
+ log.debug("MinimalMavenBuildVersionFinder: No 'requireMavenVersion' rule of maven-enforcer-plugin found");
return null;
}
Xpp3Dom versionTag = requireMavenVersionTag.getChild("version");
if (null == versionTag) {
+ log.debug("MinimalMavenBuildVersionFinder: No version specified in 'requireMavenVersion' rule of maven-enforcer-plugin");
return null;
}
String versionTagValue = versionTag.getValue();
if (null == versionTagValue || "".equals(versionTagValue)) {
+ log.debug("MinimalMavenBuildVersionFinder: Empty version specified in 'requireMavenVersion' rule of maven-enforcer-plugin");
return null;
}
-
- return processMavenVersionRange(versionTagValue);
+ ArtifactVersion minimumVersion = getMinimumVersionFromRange(versionTagValue);
+ log.debug("Calculated minimum version " + minimumVersion + " from version parameter value '" + versionTagValue + "'");
+ return minimumVersion;
}
-
- private Plugin getMavenEnforcerPlugin(List buildPlugins) {
+
+ private static Plugin getMavenEnforcerPlugin(List buildPlugins) {
for (Plugin plugin : buildPlugins) {
- if ("maven-enforcer-plugin".equals(plugin.getArtifactId())) {
+ if ("maven-enforcer-plugin".equals(plugin.getArtifactId()) && "org.apache.maven.plugins".equals(plugin.getGroupId())) {
return plugin;
}
}
return null;
}
- private List getPluginExecutionsWithEnforceGoal(List executions) {
+ private static List getPluginExecutionsWithEnforceGoal(List executions) {
List pluginExecutions = new ArrayList<>();
for (PluginExecution pluginExecution : executions) {
List goals = pluginExecution.getGoals();
@@ -113,7 +99,7 @@ private List getPluginExecutionsWithEnforceGoal(List executions) {
+ private static Xpp3Dom getRequireMavenVersionTag(List executions) {
for (PluginExecution pluginExecution : executions) {
Xpp3Dom configurationTag = (Xpp3Dom) pluginExecution.getConfiguration();
if (null == configurationTag) {
@@ -135,30 +121,10 @@ private Xpp3Dom getRequireMavenVersionTag(List executions) {
return null;
}
- private ArtifactVersion getHighestArtifactVersion(ArtifactVersion firstMavenVersion, ArtifactVersion secondMavenVersion) {
- if (null == firstMavenVersion && null == secondMavenVersion) {
- return null;
- }
-
- if (null == firstMavenVersion) {
- return secondMavenVersion;
- }
-
- if (null == secondMavenVersion) {
- return firstMavenVersion;
- }
-
- if (firstMavenVersion.compareTo(secondMavenVersion) < 0) {
- return secondMavenVersion;
- }
-
- return firstMavenVersion;
- }
-
/**
* The below method implements the specification found at https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html
*/
- private ArtifactVersion processMavenVersionRange(String versionRange) {
+ static ArtifactVersion getMinimumVersionFromRange(String versionRange) {
int openIndicesCount = 0;
int closeIndicesCount = 0;
diff --git a/src/test/java/org/codehaus/mojo/versions/MinimalMavenBuildVersionFinderTest.java b/src/test/java/org/codehaus/mojo/versions/MinimalMavenBuildVersionFinderTest.java
new file mode 100644
index 000000000..3d5fc064d
--- /dev/null
+++ b/src/test/java/org/codehaus/mojo/versions/MinimalMavenBuildVersionFinderTest.java
@@ -0,0 +1,41 @@
+package org.codehaus.mojo.versions;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.junit.Test;
+
+/**
+ * Unit tests for MinimalMavenBuildVersionFinder.
+ */
+public class MinimalMavenBuildVersionFinderTest {
+
+ @Test
+ public void testValidVersionRanges() {
+ DefaultArtifactVersion expectedMinimumVersion = new DefaultArtifactVersion("1.0");
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("1.0"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("[1.0]"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("[1.0,)"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(1.0,)"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("[1.0,2.0]"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(1.0,2.0)"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(1.0,2.0]"));
+ assertEquals(expectedMinimumVersion, MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("[1.0,2.0)"));
+ }
+
+ @Test
+ public void testInvalidVersionRanges() {
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(,1.0]"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(,1.0)"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(,1.0],[1.2,)"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(,1.1),(1.1,)"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(,1.1),[1.1,)"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(1.0"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("1.0)"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("1.0()"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("()1.0"));
+ assertNull(MinimalMavenBuildVersionFinder.getMinimumVersionFromRange("(1.0]"));
+ }
+
+}
diff --git a/src/test/java/org/codehaus/mojo/versions/RequiredMavenVersionFinderTest.java b/src/test/java/org/codehaus/mojo/versions/RequiredMavenVersionFinderTest.java
deleted file mode 100644
index 45176ee75..000000000
--- a/src/test/java/org/codehaus/mojo/versions/RequiredMavenVersionFinderTest.java
+++ /dev/null
@@ -1,530 +0,0 @@
-package org.codehaus.mojo.versions;
-
-import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.PluginExecution;
-import org.apache.maven.model.Prerequisites;
-import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.util.ArrayList;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.when;
-
-/**
- * Unit tests for RequiredMavenVersionFinder.
- */
-@RunWith(MockitoJUnitRunner.class)
-public class RequiredMavenVersionFinderTest {
-
- @Mock
- private MavenProject mavenProject;
- @Mock
- private Prerequisites prerequisites;
- @Mock
- private Plugin nonEnforcerPlugin;
- @Mock
- private Plugin enforcerPlugin;
- @Mock
- private PluginExecution pluginExecution;
- @Mock
- private PluginExecution otherPluginExecution;
- @Mock
- private Xpp3Dom configurationTag;
- @Mock
- private Xpp3Dom otherConfigurationTag;
- @Mock
- private Xpp3Dom rulesTag;
- @Mock
- private Xpp3Dom otherRulesTag;
- @Mock
- private Xpp3Dom requireMavenVersionTag;
- @Mock
- private Xpp3Dom versionTag;
- @Mock
- private MavenProject parentMavenProject;
- @Mock
- private Prerequisites parentPrerequisites;
-
- @Before
- public void setup() {
- when(mavenProject.getPrerequisites()).thenReturn(null);
- when(mavenProject.getBuildPlugins()).thenReturn(null);
- when(mavenProject.hasParent()).thenReturn(false);
- when(prerequisites.getMaven()).thenReturn(null);
- when(nonEnforcerPlugin.getArtifactId()).thenReturn(null);
- when(enforcerPlugin.getArtifactId()).thenReturn("maven-enforcer-plugin");
- when(enforcerPlugin.getExecutions()).thenReturn(null);
- when(pluginExecution.getGoals()).thenReturn(null);
- when(parentMavenProject.getPrerequisites()).thenReturn(null);
- when(parentMavenProject.getBuildPlugins()).thenReturn(null);
- when(parentMavenProject.hasParent()).thenReturn(false);
- when(parentPrerequisites.getMaven()).thenReturn(null);
- }
-
- @Test
- public void findReturnsNullWhenPrerequisitesAreNullAndBuildPluginListIsNull() {
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenPrerequisitesMavenVersionIsNull() {
- when(mavenProject.getPrerequisites()).thenReturn(prerequisites);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNotNullWhenPrerequisitesMavenVersionIsNotNull() {
- String mavenVersion = "1";
- when(mavenProject.getPrerequisites()).thenReturn(prerequisites);
- when(prerequisites.getMaven()).thenReturn(mavenVersion);
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(mavenVersion);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenBuildPluginsListDoesNotContainEnforcerPlugin() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(nonEnforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenEnforcerExecutionsIsNull() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenExecutionsListIsEmpty() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenExecutionGoalsListIsNull() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenPopulatedExecutionsListDoNotContainEnforcerExecution() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenEnforceGoalConfigurationIsNull() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- goals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(null);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenRulesChildIsNull() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- goals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(configurationTag.getChild("rules")).thenReturn(null);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenRequiredMavenVersionChildIsNull() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- goals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(configurationTag.getChild("rules")).thenReturn(rulesTag);
- when(rulesTag.getChild("requireMavenVersion")).thenReturn(null);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionChildIsNull() {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- goals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(configurationTag.getChild("rules")).thenReturn(rulesTag);
- when(rulesTag.getChild("requireMavenVersion")).thenReturn(requireMavenVersionTag);
- when(requireMavenVersionTag.getChild("version")).thenReturn(null);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- private void findReturnsValueWhenVersionTagValueIsSet(String mavenVersionRange) {
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- goals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(configurationTag.getChild("rules")).thenReturn(rulesTag);
- when(rulesTag.getChild("requireMavenVersion")).thenReturn(requireMavenVersionTag);
- when(requireMavenVersionTag.getChild("version")).thenReturn(versionTag);
- when(versionTag.getValue()).thenReturn(mavenVersionRange);
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueIsNull() {
- findReturnsValueWhenVersionTagValueIsSet(null);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueIsValidSimpleRange() {
- String mavenVersionRange = "1.0";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenSecondEnforcerExecutionIsValidAndFirstEnforcerExecutionHasNoConfigurationTag() {
- String mavenVersionRange = "1.0";
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(otherPluginExecution);
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- ArrayList otherGoals = new ArrayList<>();
- goals.add("enforce");
- otherGoals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(otherPluginExecution.getGoals()).thenReturn(otherGoals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(otherPluginExecution.getConfiguration()).thenReturn(null);
- when(configurationTag.getChild("rules")).thenReturn(rulesTag);
- when(rulesTag.getChild("requireMavenVersion")).thenReturn(requireMavenVersionTag);
- when(requireMavenVersionTag.getChild("version")).thenReturn(versionTag);
- when(versionTag.getValue()).thenReturn(mavenVersionRange);
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenSecondEnforcerExecutionIsValidAndFirstEnforcerExecutionHasNoRulesTag() {
- String mavenVersionRange = "1.0";
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(otherPluginExecution);
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- ArrayList otherGoals = new ArrayList<>();
- goals.add("enforce");
- otherGoals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(otherPluginExecution.getGoals()).thenReturn(otherGoals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(otherPluginExecution.getConfiguration()).thenReturn(otherConfigurationTag);
- when(configurationTag.getChild("rules")).thenReturn(rulesTag);
- when(otherConfigurationTag.getChild("rules")).thenReturn(null);
- when(rulesTag.getChild("requireMavenVersion")).thenReturn(requireMavenVersionTag);
- when(requireMavenVersionTag.getChild("version")).thenReturn(versionTag);
- when(versionTag.getValue()).thenReturn(mavenVersionRange);
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenSecondEnforcerExecutionIsValidAndFirstEnforcerExecutionHasNoRequireMavenVersionTag() {
- String mavenVersionRange = "1.0";
- ArrayList buildPlugins = new ArrayList<>();
- buildPlugins.add(enforcerPlugin);
- when(mavenProject.getBuildPlugins()).thenReturn(buildPlugins);
- ArrayList pluginExecutions = new ArrayList<>();
- pluginExecutions.add(otherPluginExecution);
- pluginExecutions.add(pluginExecution);
- ArrayList goals = new ArrayList<>();
- ArrayList otherGoals = new ArrayList<>();
- goals.add("enforce");
- otherGoals.add("enforce");
- when(pluginExecution.getGoals()).thenReturn(goals);
- when(otherPluginExecution.getGoals()).thenReturn(otherGoals);
- when(enforcerPlugin.getExecutions()).thenReturn(pluginExecutions);
- when(pluginExecution.getConfiguration()).thenReturn(configurationTag);
- when(otherPluginExecution.getConfiguration()).thenReturn(otherConfigurationTag);
- when(configurationTag.getChild("rules")).thenReturn(rulesTag);
- when(otherConfigurationTag.getChild("rules")).thenReturn(otherRulesTag);
- when(rulesTag.getChild("requireMavenVersion")).thenReturn(requireMavenVersionTag);
- when(otherRulesTag.getChild("requireMavenVersion")).thenReturn(null);
- when(requireMavenVersionTag.getChild("version")).thenReturn(versionTag);
- when(versionTag.getValue()).thenReturn(mavenVersionRange);
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsExact() {
- String mavenVersionRange = "[1.0]";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueSetsInclusiveMax() {
- String mavenVersionRange = "(,1.0]";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueSetsExclusiveMax() {
- String mavenVersionRange = "(,1.0)";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsInclusiveMin() {
- String mavenVersionRange = "[1.0,)";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsExclusiveMin() {
- String mavenVersionRange = "(1.0,)";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsExclusiveMinExclusiveMax() {
- String mavenVersionRange = "(1.0,2.0)";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsInclusiveMinInclusiveMax() {
- String mavenVersionRange = "[1.0,2.0]";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsInclusiveMinExclusiveMax() {
- String mavenVersionRange = "[1.0,2.0)";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsValueWhenVersionTagValueSetsExclusiveMinInclusiveMax() {
- String mavenVersionRange = "(1.0,2.0]";
- String minimumVersion = "1.0";
- DefaultArtifactVersion artifactVersion = new DefaultArtifactVersion(minimumVersion);
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertEquals(artifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueSetsInclusiveLowerMaxInclusiveHigherMin() {
- String mavenVersionRange = "(,1.0],[1.2,)";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueSetsExclusiveLowerMaxExclusiveHigherMin() {
- String mavenVersionRange = "(,1.1),(1.1,)";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueSetsInclusiveLowerMaxExclusiveHigherMin() {
- String mavenVersionRange = "(,1.1],(1.1,)";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueSetsExclusiveLowerMaxInclusiveHigherMin() {
- String mavenVersionRange = "(,1.1),[1.1,)";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueOpenCharsCountGreaterThanCloseCharCount() {
- String mavenVersionRange = "(1.0";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueOpenCharsCountLessThanCloseCharCount() {
- String mavenVersionRange = "1.0)";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueDoesNotStartWithAnOpenChar() {
- String mavenVersionRange = "1.0()";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueDoesNotEndWithAnCloseChar() {
- String mavenVersionRange = "()1.0";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenVersionTagValueOpenAndCloseTagsNotSameWhenNoComma() {
- String mavenVersionRange = "(1.0]";
- findReturnsValueWhenVersionTagValueIsSet(mavenVersionRange);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsNullWhenChildWithoutVersionAndParentWithoutVersion() {
- when(mavenProject.hasParent()).thenReturn(true);
- when(mavenProject.getParent()).thenReturn(parentMavenProject);
- assertNull(new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsChildVersionWhenChildWithVersionAndParentWithoutVersion() {
- when(mavenProject.hasParent()).thenReturn(true);
- when(mavenProject.getParent()).thenReturn(parentMavenProject);
- when(mavenProject.getPrerequisites()).thenReturn(prerequisites);
- String childMavenVersion = "1";
- when(prerequisites.getMaven()).thenReturn(childMavenVersion);
- DefaultArtifactVersion childArtifactVersion = new DefaultArtifactVersion(childMavenVersion);
- assertEquals(childArtifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsParentVersionWhenChildWithoutVersionAndParentWithVersion() {
- when(mavenProject.hasParent()).thenReturn(true);
- when(mavenProject.getParent()).thenReturn(parentMavenProject);
- when(parentMavenProject.getPrerequisites()).thenReturn(parentPrerequisites);
- String parentMavenVersion = "1";
- when(parentPrerequisites.getMaven()).thenReturn(parentMavenVersion);
- DefaultArtifactVersion parentArtifactVersion = new DefaultArtifactVersion(parentMavenVersion);
- assertEquals(parentArtifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsChildVersionWhenChildWithMatchingVersionAndParentWithMatchingVersion() {
- when(mavenProject.hasParent()).thenReturn(true);
- when(mavenProject.getParent()).thenReturn(parentMavenProject);
- when(mavenProject.getPrerequisites()).thenReturn(prerequisites);
- String childMavenVersion = "1";
- when(prerequisites.getMaven()).thenReturn(childMavenVersion);
- when(parentMavenProject.getPrerequisites()).thenReturn(parentPrerequisites);
- String parentMavenVersion = "1";
- when(parentPrerequisites.getMaven()).thenReturn(parentMavenVersion);
- DefaultArtifactVersion childArtifactVersion = new DefaultArtifactVersion(childMavenVersion);
- assertEquals(childArtifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsChildVersionWhenChildWithHigherVersionAndParentWithLowerVersion() {
- when(mavenProject.hasParent()).thenReturn(true);
- when(mavenProject.getParent()).thenReturn(parentMavenProject);
- String childMavenVersion = "2";
- DefaultArtifactVersion childArtifactVersion = new DefaultArtifactVersion(childMavenVersion);
- when(mavenProject.getPrerequisites()).thenReturn(prerequisites);
- when(prerequisites.getMaven()).thenReturn(childMavenVersion);
- when(parentMavenProject.getPrerequisites()).thenReturn(parentPrerequisites);
- String parentMavenVersion = "1";
- when(parentPrerequisites.getMaven()).thenReturn(parentMavenVersion);
- assertEquals(childArtifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-
- @Test
- public void findReturnsParentVersionWhenChildWithLowerVersionAndParentWithHigherVersion() {
- when(mavenProject.hasParent()).thenReturn(true);
- when(mavenProject.getParent()).thenReturn(parentMavenProject);
- when(mavenProject.getPrerequisites()).thenReturn(prerequisites);
- String childMavenVersion = "1";
- when(prerequisites.getMaven()).thenReturn(childMavenVersion);
- when(parentMavenProject.getPrerequisites()).thenReturn(parentPrerequisites);
- String parentMavenVersion = "2";
- when(parentPrerequisites.getMaven()).thenReturn(parentMavenVersion);
- DefaultArtifactVersion parentArtifactVersion = new DefaultArtifactVersion(parentMavenVersion);
- assertEquals(parentArtifactVersion, new RequiredMavenVersionFinder(mavenProject).find());
- }
-}