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            AssertionError error =
048                new AssertionError( range + " should be valid but failed to parse due to: " + e.getMessage() );
049            error.initCause( e );
050            throw error;
051        }
052    }
053
054    private void parseInvalid( String range )
055    {
056        try
057        {
058            new GenericVersionRange( range );
059            fail( range + " should be invalid" );
060        }
061        catch ( InvalidVersionSpecificationException e )
062        {
063            assertTrue( true );
064        }
065    }
066
067    private void assertContains( VersionRange range, String version )
068    {
069        assertTrue( range + " should contain " + version, range.containsVersion( newVersion( version ) ) );
070    }
071
072    private void assertNotContains( VersionRange range, String version )
073    {
074        assertFalse( range + " should not contain " + version, range.containsVersion( newVersion( version ) ) );
075    }
076
077    @Test
078    public void testLowerBoundInclusiveUpperBoundInclusive()
079    {
080        VersionRange range = parseValid( "[1,2]" );
081        assertContains( range, "1" );
082        assertContains( range, "1.1-SNAPSHOT" );
083        assertContains( range, "2" );
084        assertEquals( range, parseValid( range.toString() ) );
085    }
086
087    @Test
088    public void testLowerBoundInclusiveUpperBoundExclusive()
089    {
090        VersionRange range = parseValid( "[1.2.3.4.5,1.2.3.4.6)" );
091        assertContains( range, "1.2.3.4.5" );
092        assertNotContains( range, "1.2.3.4.6" );
093        assertEquals( range, parseValid( range.toString() ) );
094    }
095
096    @Test
097    public void testLowerBoundExclusiveUpperBoundInclusive()
098    {
099        VersionRange range = parseValid( "(1a,1b]" );
100        assertNotContains( range, "1a" );
101        assertContains( range, "1b" );
102        assertEquals( range, parseValid( range.toString() ) );
103    }
104
105    @Test
106    public void testLowerBoundExclusiveUpperBoundExclusive()
107    {
108        VersionRange range = parseValid( "(1,3)" );
109        assertNotContains( range, "1" );
110        assertContains( range, "2-SNAPSHOT" );
111        assertNotContains( range, "3" );
112        assertEquals( range, parseValid( range.toString() ) );
113    }
114
115    @Test
116    public void testSingleVersion()
117    {
118        VersionRange range = parseValid( "[1]" );
119        assertContains( range, "1" );
120        assertEquals( range, parseValid( range.toString() ) );
121
122        range = parseValid( "[1,1]" );
123        assertContains( range, "1" );
124        assertEquals( range, parseValid( range.toString() ) );
125    }
126
127    @Test
128    public void testSingleWildcardVersion()
129    {
130        VersionRange range = parseValid( "[1.2.*]" );
131        assertContains( range, "1.2-alpha-1" );
132        assertContains( range, "1.2-SNAPSHOT" );
133        assertContains( range, "1.2" );
134        assertContains( range, "1.2.9999999" );
135        assertNotContains( range, "1.3-rc-1" );
136        assertEquals( range, parseValid( range.toString() ) );
137    }
138
139    @Test
140    public void testMissingOpenCloseDelimiter()
141    {
142        parseInvalid( "1.0" );
143    }
144
145    @Test
146    public void testMissingOpenDelimiter()
147    {
148        parseInvalid( "1.0]" );
149        parseInvalid( "1.0)" );
150    }
151
152    @Test
153    public void testMissingCloseDelimiter()
154    {
155        parseInvalid( "[1.0" );
156        parseInvalid( "(1.0" );
157    }
158
159    @Test
160    public void testTooManyVersions()
161    {
162        parseInvalid( "[1,2,3]" );
163        parseInvalid( "(1,2,3)" );
164        parseInvalid( "[1,2,3)" );
165    }
166
167}