1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository.internal;
20
21 import org.apache.maven.api.VersionConstraint;
22 import org.apache.maven.api.services.VersionParserException;
23 import org.apache.maven.api.services.model.ModelVersionParser;
24 import org.eclipse.aether.util.version.GenericVersionScheme;
25 import org.junit.jupiter.api.Test;
26
27 import static org.junit.jupiter.api.Assertions.*;
28
29
30
31 public class ModelVersionParserTest {
32
33 private final ModelVersionParser versionParser = new DefaultModelVersionParser(new GenericVersionScheme());
34
35 private VersionParserException parseInvalid(String constraint) {
36 try {
37 versionParser.parseVersionConstraint(constraint);
38 fail("expected exception for constraint " + constraint);
39 return null;
40 } catch (VersionParserException e) {
41 return e;
42 }
43 }
44
45 @Test
46 void testEnumeratedVersions() throws VersionParserException {
47 VersionConstraint c = versionParser.parseVersionConstraint("1.0");
48 assertEquals("1.0", c.getRecommendedVersion().toString());
49 assertTrue(c.contains(versionParser.parseVersion("1.0")));
50
51 c = versionParser.parseVersionConstraint("[1.0]");
52 assertNull(c.getRecommendedVersion());
53 assertTrue(c.contains(versionParser.parseVersion("1.0")));
54
55 c = versionParser.parseVersionConstraint("[1.0],[2.0]");
56 assertTrue(c.contains(versionParser.parseVersion("1.0")));
57 assertTrue(c.contains(versionParser.parseVersion("2.0")));
58
59 c = versionParser.parseVersionConstraint("[1.0],[2.0],[3.0]");
60 assertContains(c, "1.0", "2.0", "3.0");
61 assertNotContains(c, "1.5");
62
63 c = versionParser.parseVersionConstraint("[1,3),(3,5)");
64 assertContains(c, "1", "2", "4");
65 assertNotContains(c, "3", "5");
66
67 c = versionParser.parseVersionConstraint("[1,3),(3,)");
68 assertContains(c, "1", "2", "4");
69 assertNotContains(c, "3");
70 }
71
72 private void assertNotContains(VersionConstraint c, String... versions) {
73 assertContains(String.format("%s: %%s should not be contained\n", c.toString()), c, false, versions);
74 }
75
76 private void assertContains(String msg, VersionConstraint c, boolean b, String... versions) {
77 for (String v : versions) {
78 assertEquals(b, c.contains(versionParser.parseVersion(v)), String.format(msg, v));
79 }
80 }
81
82 private void assertContains(VersionConstraint c, String... versions) {
83 assertContains(String.format("%s: %%s should be contained\n", c.toString()), c, true, versions);
84 }
85
86 @Test
87 void testInvalid() {
88 parseInvalid("[1,");
89 parseInvalid("[1,2],(3,");
90 parseInvalid("[1,2],3");
91 }
92
93 @Test
94 void testSameUpperAndLowerBound() throws VersionParserException {
95 VersionConstraint c = versionParser.parseVersionConstraint("[1.0]");
96 assertEquals("[1.0,1.0]", c.toString());
97 VersionConstraint c2 = versionParser.parseVersionConstraint(c.toString());
98 assertEquals(c, c2);
99 assertTrue(c.contains(versionParser.parseVersion("1.0")));
100 }
101 }