001package org.eclipse.aether.util.version;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 * 
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 * 
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import static org.junit.Assert.*;
023
024import org.eclipse.aether.util.version.GenericVersion;
025import org.eclipse.aether.util.version.GenericVersionRange;
026import org.eclipse.aether.version.InvalidVersionSpecificationException;
027import org.eclipse.aether.version.Version;
028import org.eclipse.aether.version.VersionRange;
029import org.junit.Test;
030
031public class GenericVersionRangeTest
032{
033
034    private Version newVersion( String version )
035    {
036        return new GenericVersion( version );
037    }
038
039    private VersionRange parseValid( String range )
040    {
041        try
042        {
043            return new GenericVersionRange( range );
044        }
045        catch ( InvalidVersionSpecificationException e )
046        {
047            throw new AssertionError( range + " should be valid but failed to parse due to: " + e.getMessage(), e );
048        }
049    }
050
051    private void parseInvalid( String range )
052    {
053        try
054        {
055            new GenericVersionRange( range );
056            fail( range + " should be invalid" );
057        }
058        catch ( InvalidVersionSpecificationException e )
059        {
060            assertTrue( true );
061        }
062    }
063
064    private void assertContains( VersionRange range, String version )
065    {
066        assertTrue( range + " should contain " + version, range.containsVersion( newVersion( version ) ) );
067    }
068
069    private void assertNotContains( VersionRange range, String version )
070    {
071        assertFalse( range + " should not contain " + version, range.containsVersion( newVersion( version ) ) );
072    }
073
074    @Test
075    public void testLowerBoundInclusiveUpperBoundInclusive()
076    {
077        VersionRange range = parseValid( "[1,2]" );
078        assertContains( range, "1" );
079        assertContains( range, "1.1-SNAPSHOT" );
080        assertContains( range, "2" );
081        assertEquals( range, parseValid( range.toString() ) );
082    }
083
084    @Test
085    public void testLowerBoundInclusiveUpperBoundExclusive()
086    {
087        VersionRange range = parseValid( "[1.2.3.4.5,1.2.3.4.6)" );
088        assertContains( range, "1.2.3.4.5" );
089        assertNotContains( range, "1.2.3.4.6" );
090        assertEquals( range, parseValid( range.toString() ) );
091    }
092
093    @Test
094    public void testLowerBoundExclusiveUpperBoundInclusive()
095    {
096        VersionRange range = parseValid( "(1a,1b]" );
097        assertNotContains( range, "1a" );
098        assertContains( range, "1b" );
099        assertEquals( range, parseValid( range.toString() ) );
100    }
101
102    @Test
103    public void testLowerBoundExclusiveUpperBoundExclusive()
104    {
105        VersionRange range = parseValid( "(1,3)" );
106        assertNotContains( range, "1" );
107        assertContains( range, "2-SNAPSHOT" );
108        assertNotContains( range, "3" );
109        assertEquals( range, parseValid( range.toString() ) );
110    }
111
112    @Test
113    public void testSingleVersion()
114    {
115        VersionRange range = parseValid( "[1]" );
116        assertContains( range, "1" );
117        assertEquals( range, parseValid( range.toString() ) );
118
119        range = parseValid( "[1,1]" );
120        assertContains( range, "1" );
121        assertEquals( range, parseValid( range.toString() ) );
122    }
123
124    @Test
125    public void testSingleWildcardVersion()
126    {
127        VersionRange range = parseValid( "[1.2.*]" );
128        assertContains( range, "1.2-alpha-1" );
129        assertContains( range, "1.2-SNAPSHOT" );
130        assertContains( range, "1.2" );
131        assertContains( range, "1.2.9999999" );
132        assertNotContains( range, "1.3-rc-1" );
133        assertEquals( range, parseValid( range.toString() ) );
134    }
135
136    @Test
137    public void testMissingOpenCloseDelimiter()
138    {
139        parseInvalid( "1.0" );
140    }
141
142    @Test
143    public void testMissingOpenDelimiter()
144    {
145        parseInvalid( "1.0]" );
146        parseInvalid( "1.0)" );
147    }
148
149    @Test
150    public void testMissingCloseDelimiter()
151    {
152        parseInvalid( "[1.0" );
153        parseInvalid( "(1.0" );
154    }
155
156    @Test
157    public void testTooManyVersions()
158    {
159        parseInvalid( "[1,2,3]" );
160        parseInvalid( "(1,2,3)" );
161        parseInvalid( "[1,2,3)" );
162    }
163
164}