1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 }