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.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 }