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.jupiter.api.Test;
25  
26  import static org.junit.jupiter.api.Assertions.*;
27  
28  public class GenericVersionRangeTest {
29      private final GenericVersionScheme versionScheme = new GenericVersionScheme();
30  
31      private Version newVersion(String version) {
32          return new GenericVersion(version);
33      }
34  
35      private VersionRange parseValid(String range) {
36          try {
37              return new GenericVersionRange(versionScheme, range);
38          } catch (InvalidVersionSpecificationException e) {
39              throw new AssertionError(range + " should be valid but failed to parse due to: " + e.getMessage(), e);
40          }
41      }
42  
43      private void parseInvalid(String range) {
44          try {
45              new GenericVersionRange(versionScheme, range);
46              fail(range + " should be invalid");
47          } catch (InvalidVersionSpecificationException e) {
48              assertTrue(true);
49          }
50      }
51  
52      private void assertContains(VersionRange range, String version) {
53          assertTrue(range.containsVersion(newVersion(version)), range + " should contain " + version);
54      }
55  
56      private void assertNotContains(VersionRange range, String version) {
57          assertFalse(range.containsVersion(newVersion(version)), range + " should not contain " + version);
58      }
59  
60      @Test
61      void testLowerBoundInclusiveUpperBoundInclusive() {
62          VersionRange range = parseValid("[1,2]");
63          assertContains(range, "1");
64          assertContains(range, "1.1-SNAPSHOT");
65          assertContains(range, "2");
66          assertEquals(range, parseValid(range.toString()));
67      }
68  
69      @Test
70      void testLowerBoundInclusiveUpperBoundExclusive() {
71          VersionRange range = parseValid("[1.2.3.4.5,1.2.3.4.6)");
72          assertContains(range, "1.2.3.4.5");
73          assertNotContains(range, "1.2.3.4.6");
74          assertEquals(range, parseValid(range.toString()));
75      }
76  
77      @Test
78      void testLowerBoundExclusiveUpperBoundInclusive() {
79          VersionRange range = parseValid("(1a,1b]");
80          assertNotContains(range, "1a");
81          assertContains(range, "1b");
82          assertEquals(range, parseValid(range.toString()));
83      }
84  
85      @Test
86      void testLowerBoundExclusiveUpperBoundExclusive() {
87          VersionRange range = parseValid("(1,3)");
88          assertNotContains(range, "1");
89          assertContains(range, "2-SNAPSHOT");
90          assertNotContains(range, "3");
91          assertEquals(range, parseValid(range.toString()));
92      }
93  
94      @Test
95      void testSingleVersion() {
96          VersionRange range = parseValid("[1]");
97          assertContains(range, "1");
98          assertEquals(range, parseValid(range.toString()));
99  
100         range = parseValid("[1,1]");
101         assertContains(range, "1");
102         assertEquals(range, parseValid(range.toString()));
103     }
104 
105     @Test
106     void testSingleWildcardVersion() {
107         VersionRange range = parseValid("[1.2.*]");
108         assertContains(range, "1.2-alpha-1");
109         assertContains(range, "1.2-SNAPSHOT");
110         assertContains(range, "1.2");
111         assertContains(range, "1.2.9999999");
112         assertNotContains(range, "1.3-rc-1");
113         assertEquals(range, parseValid(range.toString()));
114     }
115 
116     @Test
117     void testMissingOpenCloseDelimiter() {
118         parseInvalid("1.0");
119     }
120 
121     @Test
122     void testMissingOpenDelimiter() {
123         parseInvalid("1.0]");
124         parseInvalid("1.0)");
125     }
126 
127     @Test
128     void testMissingCloseDelimiter() {
129         parseInvalid("[1.0");
130         parseInvalid("(1.0");
131     }
132 
133     @Test
134     void testTooManyVersions() {
135         parseInvalid("[1,2,3]");
136         parseInvalid("(1,2,3)");
137         parseInvalid("[1,2,3)");
138     }
139 }