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());
+        }
+        
+    }
+}


Reply via email to