Author: brianf
Date: Sun Mar 18 14:02:03 2007
New Revision: 519693
URL: http://svn.apache.org/viewvc?view=rev&rev=519693
Log:
added unit tests
Added:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/EnforceMojo.java
- copied, changed from r519674,
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/enforce.java
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockRuntimeInformation.java
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestEnforceMojo.java
Removed:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/enforce.java
Modified:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractVersionEnforcer.java
Modified:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractVersionEnforcer.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractVersionEnforcer.java?view=diff&rev=519693&r1=519692&r2=519693
==============================================================================
---
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractVersionEnforcer.java
(original)
+++
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractVersionEnforcer.java
Sun Mar 18 14:02:03 2007
@@ -3,8 +3,11 @@
*/
package org.apache.maven.plugin.enforcer;
+import java.util.Iterator;
+
import org.apache.maven.artifact.versioning.ArtifactVersion;
import
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.Restriction;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
@@ -16,19 +19,19 @@
* @author brianf
*
*/
-public abstract class abstractVersionEnforcer
+public abstract class AbstractVersionEnforcer
extends AbstractMojo
{
/**
- * Flag to warn only if a version check fails.
+ * Flag to fail the build if a version check fails.
*
- * @parameter expression="${enforcer.warn}" default-value="false"
+ * @parameter expression="${enforcer.fail}" default-value="true"
*/
- private boolean warn = false;
+ private boolean fail = true;
public boolean enforceVersion( String variableName, String
requiredVersionRange, ArtifactVersion actualVersion )
- throws MojoExecutionException, MojoFailureException
+ throws MojoExecutionException
{
boolean allowed = false;
if ( StringUtils.isEmpty( requiredVersionRange ) )
@@ -41,9 +44,11 @@
VersionRange vr;
Log log = this.getLog();
String msg = "Detected " + variableName + " Version: " +
actualVersion;
+
+ //stort circuit check if the strings are exactly equal
if ( actualVersion.toString().equals( requiredVersionRange ) )
{
- log.debug( msg + " is allowed." );
+ log.info( msg + " is allowed in the range " +
requiredVersionRange + "." );
allowed = true;
}
else
@@ -52,15 +57,15 @@
{
vr = VersionRange.createFromVersionSpec(
requiredVersionRange );
- if ( vr.containsVersion( actualVersion ) ||
vr.toString().equals( requiredVersionRange ) )
+ if ( containsVersion( vr, actualVersion ) )
{
- log.debug( msg + " is allowed." );
+ log.info( msg + " is allowed in the range " +
requiredVersionRange + "." );
allowed = true;
}
else
{
- String error = msg + " is not in the allowed range: "
+ vr;
- if ( warn )
+ String error = msg + " is not in the allowed range " +
vr + ".";
+ if ( !fail )
{
log.warn( error );
}
@@ -72,11 +77,60 @@
}
catch ( InvalidVersionSpecificationException e )
{
- throw new MojoExecutionException("The requested "+
variableName+" version "+ requiredVersionRange+" is invalid.",e);
+ throw new MojoExecutionException( "The requested " +
variableName + " version "
+ + requiredVersionRange + " is invalid.", e );
}
}
+ }
+ return allowed;
+ }
+
+ /**
+ * Copied from Artifact.VersionRange. This is tweaked to handle singular
+ * ranges properly. Currently the default containsVersion method assumes a
+ * singular version means allow everything. This method assumes that
"2.0.4" ==
+ * "[2.0.4,)"
+ *
+ */
+ public static boolean containsVersion( VersionRange allowedRange,
ArtifactVersion version )
+ {
+ boolean matched = false;
+ ArtifactVersion recommendedVersion =
allowedRange.getRecommendedVersion();
+ if ( recommendedVersion == null )
+ {
- return allowed;
+ for ( Iterator i = allowedRange.getRestrictions().iterator();
i.hasNext() && !matched; )
+ {
+ Restriction restriction = (Restriction) i.next();
+ if ( restriction.containsVersion( version ) )
+ {
+ matched = true;
+ }
+ }
}
+ else
+ {
+ // only singular versions ever have a recommendedVersion
+ int compareTo = recommendedVersion.compareTo( version );
+ matched = ( compareTo <= 0 );
+ }
+ return matched;
+ }
+
+ /**
+ * @return the fail
+ */
+ public boolean isFail()
+ {
+ return this.fail;
+ }
+
+ /**
+ * @param theWarn
+ * the fail to set
+ */
+ public void setFail( boolean theWarn )
+ {
+ this.fail = theWarn;
}
}
Copied:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/EnforceMojo.java
(from r519674,
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/enforce.java)
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/EnforceMojo.java?view=diff&rev=519693&p1=maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/enforce.java&r1=519674&p2=maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/EnforceMojo.java&r2=519693
==============================================================================
---
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/enforce.java
(original)
+++
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/EnforceMojo.java
Sun Mar 18 14:02:03 2007
@@ -38,8 +38,8 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Brian Fox</a>
* @phase process-sources
*/
-public class enforce
- extends abstractVersionEnforcer
+public class EnforceMojo
+ extends AbstractVersionEnforcer
{
/**
* Used to look up Artifacts in the remote repository.
@@ -87,27 +87,35 @@
/**
*
*/
- public enforce()
+ public EnforceMojo()
{
super();
}
public void execute()
- throws MojoExecutionException, MojoFailureException
+ throws MojoExecutionException
{
+ boolean foundVersionToCheck = false;
if ( StringUtils.isNotEmpty( this.mavenVersion ) )
{
+ foundVersionToCheck = true;
ArtifactVersion detectedMavenVersion = rti.getApplicationVersion();
enforceVersion( "Maven", this.mavenVersion, detectedMavenVersion );
}
if ( StringUtils.isNotEmpty( this.jdkVersion ) )
{
+ foundVersionToCheck = true;
ArtifactVersion detectedJdkVersion = new DefaultArtifactVersion(
fixJDKVersion( SystemUtils.JAVA_VERSION_TRIMMED ) );
enforceVersion( "JDK", this.jdkVersion, detectedJdkVersion );
}
+
+ if (!foundVersionToCheck)
+ {
+ throw new MojoExecutionException("There is no version range
specified to be checked.");
+ }
}
@@ -115,7 +123,7 @@
* Converts a jdk string from 1.5.0-11 to a single 3 digit version like
* 1.5.0
*/
- public String fixJDKVersion( String theJdkVersion )
+ public static String fixJDKVersion( String theJdkVersion )
{
theJdkVersion = theJdkVersion.replaceAll( "_|-", "." );
String tokenArray[] = StringUtils.split( theJdkVersion, "." );
@@ -132,4 +140,59 @@
String version = buffer.toString();
return StringUtils.stripEnd( version, "." );
}
+
+
+ /**
+ * @return the jdkVersion
+ */
+ public String getJdkVersion()
+ {
+ return this.jdkVersion;
+ }
+
+
+ /**
+ * @param theJdkVersion the jdkVersion to set
+ */
+ public void setJdkVersion( String theJdkVersion )
+ {
+ this.jdkVersion = theJdkVersion;
+ }
+
+
+ /**
+ * @return the mavenVersion
+ */
+ public String getMavenVersion()
+ {
+ return this.mavenVersion;
+ }
+
+
+ /**
+ * @param theMavenVersion the mavenVersion to set
+ */
+ public void setMavenVersion( String theMavenVersion )
+ {
+ this.mavenVersion = theMavenVersion;
+ }
+
+
+ /**
+ * @return the rti
+ */
+ public RuntimeInformation getRti()
+ {
+ return this.rti;
+ }
+
+
+ /**
+ * @param theRti the rti to set
+ */
+ public void setRti( RuntimeInformation theRti )
+ {
+ this.rti = theRti;
+ }
+
}
Added:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockRuntimeInformation.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockRuntimeInformation.java?view=auto&rev=519693
==============================================================================
---
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockRuntimeInformation.java
(added)
+++
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/MockRuntimeInformation.java
Sun Mar 18 14:02:03 2007
@@ -0,0 +1,23 @@
+/**
+ *
+ */
+package org.apache.maven.plugin.enforcer;
+
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.execution.RuntimeInformation;
+
+/**
+ * @author brianf
+ *
+ */
+public class MockRuntimeInformation
+ implements RuntimeInformation
+{
+
+ public ArtifactVersion getApplicationVersion()
+ {
+ return new DefaultArtifactVersion("2.0.5");
+ }
+
+}
Added:
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestEnforceMojo.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestEnforceMojo.java?view=auto&rev=519693
==============================================================================
---
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestEnforceMojo.java
(added)
+++
maven/sandbox/trunk/plugins/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestEnforceMojo.java
Sun Mar 18 14:02:03 2007
@@ -0,0 +1,204 @@
+/**
+ *
+ */
+package org.apache.maven.plugin.enforcer;
+
+import org.apache.commons.lang.SystemUtils;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+
+import junit.framework.TestCase;
+
+/**
+ * @author brianf
+ *
+ */
+public class TestEnforceMojo
+ extends TestCase
+{
+ public void testFixJDKVersion()
+ {
+ // test that we only take the first 3 versions for comparision
+ assertEquals( "1.5.0", EnforceMojo.fixJDKVersion( "1.5.0-11" ) );
+ assertEquals( "1.5.1", EnforceMojo.fixJDKVersion( "1.5.1" ) );
+ assertEquals( "1.5.2", EnforceMojo.fixJDKVersion( "1.5.2-b11" ) );
+ assertEquals( "1.5.3", EnforceMojo.fixJDKVersion( "1.5.3_11" ) );
+ assertEquals( "1.5.4", EnforceMojo.fixJDKVersion( "1.5.4.5_11" ) );
+ assertEquals( "1.5.5", EnforceMojo.fixJDKVersion( "1.5.5.6_11.2" ) );
+
+ // test for non-standard versions
+ assertEquals( "1.5.0", EnforceMojo.fixJDKVersion( "1-5-0-11" ) );
+ assertEquals( "1.5.0", EnforceMojo.fixJDKVersion( "1-_5-_0-_11" ) );
+ assertEquals( "1.5.0", EnforceMojo.fixJDKVersion( "1_5_0_11" ) );
+
+ }
+
+ public void testContainsVersion()
+ throws InvalidVersionSpecificationException
+ {
+ ArtifactVersion version = new DefaultArtifactVersion( "2.0.5" );
+ // test ranges
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.5,)" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.4,)" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.4,2.0.5]" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.4,2.0.6]" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.4,2.0.6)" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0,)" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.0,)" ), version ) );
+ // not matching versions
+ assertFalse( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.4,2.0.5)" ), version ) );
+ assertFalse( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "[2.0.6,)" ), version ) );
+ assertFalse( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "(2.0.5,)" ), version ) );
+
+ // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "2.0" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "2.0.4" ), version ) );
+ assertTrue( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "2.0.5" ), version ) );
+
+ assertFalse( EnforceMojo.containsVersion(
VersionRange.createFromVersionSpec( "2.0.6" ), version ) );
+ }
+
+ public void testEnforceVersion()
+ throws MojoExecutionException, MojoFailureException
+ {
+ EnforceMojo mojo = new EnforceMojo();
+ ArtifactVersion version = new DefaultArtifactVersion( "2.0.5" );
+ mojo.setFail( false );
+
+ // test ranges
+ assertTrue( mojo.enforceVersion( "test", "[2.0.5,)", version ) );
+ assertTrue( mojo.enforceVersion( "test", "[2.0.4,)", version ) );
+ assertTrue( mojo.enforceVersion( "test", "[2.0.4,2.0.5]", version ) );
+ assertTrue( mojo.enforceVersion( "test", "[2.0.4,2.0.6]", version ) );
+ assertTrue( mojo.enforceVersion( "test", "[2.0.4,2.0.6)", version ) );
+ assertTrue( mojo.enforceVersion( "test", "[2.0,)", version ) );
+ assertTrue( mojo.enforceVersion( "test", "[2.0.0,)", version ) );
+ // not matching versions
+ assertFalse( mojo.enforceVersion( "test", "[2.0.4,2.0.5)", version ) );
+ assertFalse( mojo.enforceVersion( "test", "[2.0.6,)", version ) );
+ assertFalse( mojo.enforceVersion( "test", "(2.0.5,)", version ) );
+
+ // test singular versions -> 2.0.5 == [2.0.5,) or x >= 2.0.5
+ assertTrue( mojo.enforceVersion( "test", "2.0", version ) );
+ assertTrue( mojo.enforceVersion( "test", "2.0.4", version ) );
+ assertTrue( mojo.enforceVersion( "test", "2.0.5", version ) );
+
+ assertFalse( mojo.enforceVersion( "test", "2.0.6", version ) );
+
+ // test fail on error
+ mojo.setFail( true );
+
+ try
+ {
+ assertTrue( mojo.enforceVersion( "test", "2.0.5", version ) );
+ }
+ catch ( Exception e )
+ {
+ fail( "No Exception expected. Caught:" + e.getLocalizedMessage() );
+
+ }
+
+ try
+ {
+ mojo.enforceVersion( "test", "2.0.6", version );
+ fail( "Expected to receive MojoExecutionException" );
+ }
+ catch ( Exception e )
+ {
+ if ( e instanceof MojoExecutionException )
+ {
+ mojo.getLog().info( "Caught Expected Exception: " +
e.getLocalizedMessage() );
+ }
+ else
+ {
+ fail( "Received wrong exception. Expected
MojoExecutionException. Received:" + e.toString() );
+ }
+ }
+
+ // make sure to handle the invalid range specification
+ try
+ {
+ mojo.enforceVersion( "test", "[(2.0.6", version );
+ fail( "Expected to receive MojoExecutionException" );
+ }
+ catch ( Exception e )
+ {
+ if ( e instanceof MojoExecutionException )
+ {
+ mojo.getLog().info( "Caught Expected Exception: " +
e.getLocalizedMessage() );
+ }
+ else
+ {
+ fail( "Received wrong exception. Expected
MojoExecutionException. Received:" + e.toString() );
+ }
+ }
+ }
+
+ public void testEnforceMojo()
+ {
+ EnforceMojo mojo = new EnforceMojo();
+ mojo.setFail( true );
+ mojo.setRti( new MockRuntimeInformation() );
+
+ try
+ {
+ mojo.execute();
+ fail("Expected to receive exception because no required version
ranges are set.");
+ }
+ catch ( MojoExecutionException e )
+ {
+ mojo.getLog().info( "Caught Expected Exception: " +
e.getLocalizedMessage() );
+ }
+
+ try
+ {
+ mojo.setMavenVersion( "2.0.6" );
+ mojo.execute();
+ fail("Expected to receive exception because 2.0.5 does not contain
2.0.6");
+ }
+ catch ( MojoExecutionException e )
+ {
+ mojo.getLog().info( "Caught Expected Exception: " +
e.getLocalizedMessage() );
+ }
+
+ try
+ {
+ mojo.setMavenVersion( null );
+ mojo.setJdkVersion( "("+EnforceMojo.fixJDKVersion(
SystemUtils.JAVA_VERSION_TRIMMED) +",]");
+ mojo.execute();
+ fail("Expected to receive exception because I have set the
lowerbounds noninclusive.");
+ }
+ catch ( MojoExecutionException e )
+ {
+ mojo.getLog().info( "Caught Expected Exception: " +
e.getLocalizedMessage() );
+ }
+
+ try
+ {
+ mojo.setMavenVersion( null );
+ mojo.setJdkVersion( SystemUtils.JAVA_VERSION_TRIMMED );
+ mojo.execute();
+ }
+ catch ( MojoExecutionException e )
+ {
+ fail("Did not expect an exception.
Received:"+e.getLocalizedMessage());
+ }
+
+ try
+ {
+ mojo.setFail( false );
+ mojo.setMavenVersion( null );
+ mojo.setJdkVersion( "("+EnforceMojo.fixJDKVersion(
SystemUtils.JAVA_VERSION_TRIMMED) +",]");
+ mojo.execute();
+ }
+ catch ( MojoExecutionException e )
+ {
+ fail("Did not expect an exception.
Received:"+e.getLocalizedMessage());
+ }
+
+ }
+}