View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.util.version;
20  
21  import org.eclipse.aether.version.InvalidVersionSpecificationException;
22  import org.eclipse.aether.version.Version;
23  import org.eclipse.aether.version.VersionRange;
24  import org.junit.Test;
25  
26  import static org.junit.Assert.*;
27  
28  public class GenericVersionRangeTest {
29  
30      private Version newVersion(String version) {
31          return new GenericVersion(version);
32      }
33  
34      private VersionRange parseValid(String range) {
35          try {
36              return new GenericVersionRange(range);
37          } catch (InvalidVersionSpecificationException e) {
38              throw new AssertionError(range + " should be valid but failed to parse due to: " + e.getMessage(), e);
39          }
40      }
41  
42      private void parseInvalid(String range) {
43          try {
44              new GenericVersionRange(range);
45              fail(range + " should be invalid");
46          } catch (InvalidVersionSpecificationException e) {
47              assertTrue(true);
48          }
49      }
50  
51      private void assertContains(VersionRange range, String version) {
52          assertTrue(range + " should contain " + version, range.containsVersion(newVersion(version)));
53      }
54  
55      private void assertNotContains(VersionRange range, String version) {
56          assertFalse(range + " should not contain " + version, range.containsVersion(newVersion(version)));
57      }
58  
59      @Test
60      public void testLowerBoundInclusiveUpperBoundInclusive() {
61          VersionRange range = parseValid("[1,2]");
62          assertContains(range, "1");
63          assertContains(range, "1.1-SNAPSHOT");
64          assertContains(range, "2");
65          assertEquals(range, parseValid(range.toString()));
66      }
67  
68      @Test
69      public void testLowerBoundInclusiveUpperBoundExclusive() {
70          VersionRange range = parseValid("[1.2.3.4.5,1.2.3.4.6)");
71          assertContains(range, "1.2.3.4.5");
72          assertNotContains(range, "1.2.3.4.6");
73          assertEquals(range, parseValid(range.toString()));
74      }
75  
76      @Test
77      public void testLowerBoundExclusiveUpperBoundInclusive() {
78          VersionRange range = parseValid("(1a,1b]");
79          assertNotContains(range, "1a");
80          assertContains(range, "1b");
81          assertEquals(range, parseValid(range.toString()));
82      }
83  
84      @Test
85      public void testLowerBoundExclusiveUpperBoundExclusive() {
86          VersionRange range = parseValid("(1,3)");
87          assertNotContains(range, "1");
88          assertContains(range, "2-SNAPSHOT");
89          assertNotContains(range, "3");
90          assertEquals(range, parseValid(range.toString()));
91      }
92  
93      @Test
94      public void testSingleVersion() {
95          VersionRange range = parseValid("[1]");
96          assertContains(range, "1");
97          assertEquals(range, parseValid(range.toString()));
98  
99          range = parseValid("[1,1]");
100         assertContains(range, "1");
101         assertEquals(range, parseValid(range.toString()));
102     }
103 
104     @Test
105     public void testSingleWildcardVersion() {
106         VersionRange range = parseValid("[1.2.*]");
107         assertContains(range, "1.2-alpha-1");
108         assertContains(range, "1.2-SNAPSHOT");
109         assertContains(range, "1.2");
110         assertContains(range, "1.2.9999999");
111         assertNotContains(range, "1.3-rc-1");
112         assertEquals(range, parseValid(range.toString()));
113     }
114 
115     @Test
116     public void testMissingOpenCloseDelimiter() {
117         parseInvalid("1.0");
118     }
119 
120     @Test
121     public void testMissingOpenDelimiter() {
122         parseInvalid("1.0]");
123         parseInvalid("1.0)");
124     }
125 
126     @Test
127     public void testMissingCloseDelimiter() {
128         parseInvalid("[1.0");
129         parseInvalid("(1.0");
130     }
131 
132     @Test
133     public void testTooManyVersions() {
134         parseInvalid("[1,2,3]");
135         parseInvalid("(1,2,3)");
136         parseInvalid("[1,2,3)");
137     }
138 }