The problem is that I assumed "2.0.5" == "[2.0.5,)". I can understand how it is 
when I see it and I can work with that. The problem now is that 
createFromVersionSpec doesn't create any restrictions and restrictions.contains 
returns true by default. If I add the test as shown below, it fails here:       
 assertFalse( enforceVersion( "2.0.6", actualVersion ) );

This is saying that 2.0.6 contains 2.0.5 which should be false.

    public void testContains() throws InvalidVersionSpecificationException
    {
        ArtifactVersion actualVersion = new DefaultArtifactVersion( "2.0.5" );
        assertTrue( enforceVersion( "2.0.5", actualVersion ) );
        assertTrue( enforceVersion( "2.0.4", actualVersion ) );
        assertTrue( enforceVersion( "[2.0.5]", actualVersion ) );
        assertFalse( enforceVersion( "2.0.6", actualVersion ) );
        assertFalse( enforceVersion( "[2.0.6]", actualVersion ) );
        assertTrue( enforceVersion( "[2.0,2.1]", actualVersion ) );
        assertFalse( enforceVersion( "[2.0,2.0.3]", actualVersion ) );
        assertTrue( enforceVersion( "[2.0,2.0.5]", actualVersion ) );
        assertFalse( enforceVersion( "[2.0,2.0.5)", actualVersion ) );
    }

    public boolean enforceVersion( String requiredVersionRange, ArtifactVersion 
actualVersion )
        throws InvalidVersionSpecificationException
    {
        VersionRange vr = null;

        vr = VersionRange.createFromVersionSpec( requiredVersionRange );

        return vr.containsVersion( actualVersion );
    }



-----Original Message-----
From: Kenney Westerhof [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 15, 2007 5:45 AM
To: Maven Developers List
Subject: Re: version range question

I'm sorry, what is the problem exactly?

createFromVersionSpec: treats version as a version range, so 2.0.5 is treated
as [2.0.5,).

createFromVersion: treats version as a single pinned version, so 2.0.5 is 
treated
as [2.0.5].

So, createFromVersionSpec("2.0.5").containsVersion( new 
DefaultArtifactVersion("2.0.6") )
is true since 2.0.6 is in [2.0.5,).

Or am I missing something here?

-- Kenney

Brian E. Fox wrote:
> Done. I fixed the problem and added the tests to a branch described
> here: http://jira.codehaus.org/browse/MNG-2876
> 
> Since it's very core (or maybe not if it's not really used) I'd like
> someone to bless it.
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Carlos
> Sanchez
> Sent: Wednesday, March 14, 2007 1:06 AM
> To: Maven Developers List
> Subject: Re: version range question
> 
> I would create a jira issue with your tests as unit tests
> 
> then search for usages of createFromVersionSpec through the whole
> maven and see how it's used
> 
> On 3/13/07, Brian E. Fox <[EMAIL PROTECTED]> wrote:
>> I'm still having trouble with this. I wrote a sample class to show my
>> problem. The issue is that all the contains calls are correct except
>> that a singular version ie "2.0.5" always returns true. Is this an
>> artifact bug, or am I doing something wrong? According to the javadoc
>> for the method (shown in my original post below) the singular version
> is
>> allowed as a version range.
>>
>> Output:
>> is 2.0.5 contained in 2.0.5 ->true      CORRECT
>> is 2.0.5 contained in 2.0.6 ->true      WRONG
>> is 2.0.5 contained in [2.0,2.1] ->true CORRECT
>> is 2.0.5 contained in [2.0,2.0.3] ->false CORRECT
>> is 2.0.5 contained in [2.0,2.0.5] ->true CORRECT
>> is 2.0.5 contained in [2.0,2.0.5) ->false CORRECT
>> Source:
>> /**
>>  *
>>  */
>> package org.apache.maven.plugin.enforcer;
>>
>> import org.apache.maven.artifact.versioning.ArtifactVersion;
>> import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
>> import
>>
> org.apache.maven.artifact.versioning.InvalidVersionSpecificationExceptio
>> n;
>> import org.apache.maven.artifact.versioning.VersionRange;
>> import org.apache.maven.plugin.MojoExecutionException;
>> import org.apache.maven.plugin.MojoFailureException;
>>
>> /**
>>  * @author brianf
>>  *
>>  */
>> public class test
>> {
>>     public static void main( String[] args )
>>         throws MojoExecutionException, MojoFailureException,
>> InvalidVersionSpecificationException
>>     {
>>         ArtifactVersion actualVersion = new DefaultArtifactVersion(
>> "2.0.5" );
>>         enforceVersion( "2.0.5", actualVersion );
>>         enforceVersion( "2.0.6", actualVersion );
>>         enforceVersion( "[2.0,2.1]", actualVersion );
>>         enforceVersion( "[2.0,2.0.3]", actualVersion );
>>         enforceVersion( "[2.0,2.0.5]", actualVersion );
>>         enforceVersion( "[2.0,2.0.5)", actualVersion );
>>     }
>>
>>     public static void enforceVersion( String requiredVersionRange,
>> ArtifactVersion actualVersion )
>>         throws MojoExecutionException, MojoFailureException,
>> InvalidVersionSpecificationException
>>     {
>>         VersionRange vr = null;
>>
>>         vr = VersionRange.createFromVersionSpec( requiredVersionRange
> );
>>         boolean result = vr.containsVersion( actualVersion );
>>         System.out.println( "is "+actualVersion+" contained in
>> "+requiredVersionRange+" ->" + result );
>>     }
>> }
>>
>> -----Original Message-----
>> From: Brian E. Fox [mailto:[EMAIL PROTECTED]
>> Sent: Sunday, February 18, 2007 8:15 PM
>> To: Maven Developers List
>> Subject: version range question
>>
>> According to the javadoc for VersionRange.createFromVersionSpec, a
>> singular version (ie "2.0.4") is allowed:
>>
>>
>>
>> /**
>>
>>      * Create a version range from a string representation
>>
>>      *
>>
>>      * Some spec examples are
>>
>>      * <ul>
>>
>>      *   <li><code>1.0</code> Version 1.0</li>
>>
>>      *   <li><code>[1.0,2.0)</code> Versions 1.0 (included) to 2.0
> (not
>> included)</li>
>>
>>      *   <li><code>[1.0,2.0]</code> Versions 1.0 to 2.0 (both
>> included)</li>
>>
>>      *   <li><code>[1.5,)</code> Versions 1.5 and higher</li>
>>
>>      *   <li><code>(,1.0],[1.2,)</code> Versions up to 1.0 (included)
>> and 1.2 or higher</li>
>>
>>      * </ul>
>>
>>      *
>>
>>      * @param spec string representation of a version or version range
>>
>>      * @return a new [EMAIL PROTECTED] VersionRange} object that represents 
>> the
>> spec
>>
>>      * @throws InvalidVersionSpecificationException
>>
>>      */
>>
>>
>>
>> However, if I create a version range using
>> createFromVersionSpec("2.0.4") and then call,
> vr.containsVersion(2.0.5)
>> the result is true. However, if I use createFromVersion("2.0.4") and
>> then use vr.containsVersion("2.0.5"), I get the expected false.
>>
>>
>>
>> So is this a bug in the Spec method? What is the difference between
> the
>> two supposed to be? It seems like the fromVersion method can handle
> the
>> spec strings also so I'm confused why there are two.
>>
>>
>>
>> Thanks,
>>
>> Brian
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to