Author: bentmann
Date: Thu Apr  8 11:37:42 2010
New Revision: 931890

URL: http://svn.apache.org/viewvc?rev=931890&view=rev
Log:
[MNG-3092] Version ranges with non-snapshot bounds can contain snapshot versions
Submitted by: Mark Hobson

Modified:
    
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
    
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java

Modified: 
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java?rev=931890&r1=931889&r2=931890&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
 (original)
+++ 
maven/maven-3/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
 Thu Apr  8 11:37:42 2010
@@ -1,6 +1,5 @@
 package org.apache.maven.artifact.versioning;
 
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -20,6 +19,8 @@ package org.apache.maven.artifact.versio
  * under the License.
  */
 
+import org.apache.maven.artifact.Artifact;
+
 /**
  * Describes a restriction in versioning.
  *
@@ -71,9 +72,17 @@ public class Restriction
 
     public boolean containsVersion( ArtifactVersion version )
     {
+        boolean snapshot = isSnapshot( version );
+
         if ( lowerBound != null )
         {
             int comparison = lowerBound.compareTo( version );
+
+            if ( snapshot && comparison == 0 )
+            {
+                return true;
+            }
+
             if ( ( comparison == 0 ) && !lowerBoundInclusive )
             {
                 return false;
@@ -86,6 +95,12 @@ public class Restriction
         if ( upperBound != null )
         {
             int comparison = upperBound.compareTo( version );
+
+            if ( snapshot && comparison == 0 )
+            {
+                return true;
+            }
+
             if ( ( comparison == 0 ) && !upperBoundInclusive )
             {
                 return false;
@@ -95,9 +110,20 @@ public class Restriction
                 return false;
             }
         }
+
+        if ( lowerBound != null || upperBound != null )
+        {
+            return !snapshot;
+        }
+
         return true;
     }
 
+    private boolean isSnapshot( ArtifactVersion version )
+    {
+        return Artifact.SNAPSHOT_VERSION.equals( version.getQualifier() );
+    }
+
     @Override
     public int hashCode()
     {

Modified: 
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java?rev=931890&r1=931889&r2=931890&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
 (original)
+++ 
maven/maven-3/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
 Thu Apr  8 11:37:42 2010
@@ -56,7 +56,7 @@ public class VersionRangeTest
         Artifact artifact = null;
         
         VersionRange range = VersionRange.createFromVersionSpec( "(,1.0]" );
-        List restrictions = range.getRestrictions();
+        List<Restriction> restrictions = range.getRestrictions();
         assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
         Restriction restriction = (Restriction) restrictions.get( 0 );
         assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
@@ -148,7 +148,7 @@ public class VersionRangeTest
         range = VersionRange.createFromVersionSpec( "[1.0,)" );
         assertFalse( range.containsVersion( new DefaultArtifactVersion( 
"1.0-SNAPSHOT" ) ) );
 
-        range = VersionRange.createFromVersionSpec( "[1.0,1.1]" );
+        range = VersionRange.createFromVersionSpec( "[1.0,1.1-SNAPSHOT]" );
         assertTrue( range.containsVersion( new DefaultArtifactVersion( 
"1.1-SNAPSHOT" ) ) );
 
         range = VersionRange.createFromVersionSpec( "[5.0.9.0,5.0.10.0)" );
@@ -182,7 +182,7 @@ public class VersionRangeTest
         // TODO: current policy is to retain the original version - is this 
correct, do we need strategies or is that handled elsewhere?
 //        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
         assertEquals( CHECK_VERSION_RECOMMENDATION, "1.0", 
mergedRange.getRecommendedVersion().toString() );
-        List restrictions = mergedRange.getRestrictions();
+        List<Restriction> restrictions = mergedRange.getRestrictions();
         assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
         Restriction restriction = (Restriction) restrictions.get( 0 );
         assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
@@ -655,6 +655,37 @@ public class VersionRangeTest
         assertEquals( CHECK_NUM_RESTRICTIONS, 0, restrictions.size() );
     }
 
+    public void testReleaseRangeBoundsCannotContainSnapshots()
+        throws InvalidVersionSpecificationException
+    {
+        VersionRange range = VersionRange.createFromVersionSpec( "[1.0,1.2]" );
+
+        assertFalse( range.containsVersion( new DefaultArtifactVersion( 
"1.1-SNAPSHOT" ) ) );
+        assertFalse( range.containsVersion( new DefaultArtifactVersion( 
"1.2-SNAPSHOT" ) ) );
+    }
+
+    public void testSnapshotRangeBoundsCanContainSnapshots()
+        throws InvalidVersionSpecificationException
+    {
+        VersionRange range = VersionRange.createFromVersionSpec( 
"[1.0,1.2-SNAPSHOT]" );
+
+        assertFalse( range.containsVersion( new DefaultArtifactVersion( 
"1.1-SNAPSHOT" ) ) );
+        assertTrue( range.containsVersion( new DefaultArtifactVersion( 
"1.2-SNAPSHOT" ) ) );
+
+        range = VersionRange.createFromVersionSpec( "[1.0-SNAPSHOT,1.2]" );
+
+        assertTrue( range.containsVersion( new DefaultArtifactVersion( 
"1.0-SNAPSHOT" ) ) );
+        assertFalse( range.containsVersion( new DefaultArtifactVersion( 
"1.1-SNAPSHOT" ) ) );
+    }
+
+    public void testSnapshotSoftVersionCanContainSnapshot()
+        throws InvalidVersionSpecificationException
+    {
+        VersionRange range = VersionRange.createFromVersionSpec( 
"1.0-SNAPSHOT" );
+
+        assertTrue( range.containsVersion( new DefaultArtifactVersion( 
"1.0-SNAPSHOT" ) ) );
+    }
+
     private void checkInvalidRange( String version )
     {
         try


Reply via email to