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