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.plugins.invoker;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.util.ArrayList;
24  import java.util.Arrays;
25  import java.util.Collections;
26  import java.util.List;
27  import java.util.Map;
28  
29  import org.apache.maven.plugins.invoker.AbstractInvokerMojo.ToolchainPrivateManager;
30  import org.apache.maven.toolchain.ToolchainPrivate;
31  import org.junit.Test;
32  
33  import static org.assertj.core.api.Assertions.assertThat;
34  import static org.assertj.core.api.Assertions.assertThatCode;
35  import static org.junit.Assert.assertEquals;
36  import static org.junit.Assert.assertFalse;
37  import static org.junit.Assert.assertTrue;
38  import static org.mockito.Mockito.isA;
39  import static org.mockito.Mockito.mock;
40  import static org.mockito.Mockito.when;
41  
42  /**
43   * Tests {@link SelectorUtils}.
44   *
45   * @author Benjamin Bentmann
46   */
47  public class SelectorUtilsTest {
48  
49      @Test
50      public void testParseList() {
51          List<String> includes = new ArrayList<>();
52          List<String> excludes = new ArrayList<>();
53  
54          SelectorUtils.parseList(null, includes, excludes);
55  
56          SelectorUtils.parseList(" 1.5, !1.4, 1.6+ ", includes, excludes);
57          assertEquals(Arrays.asList("1.5", "1.6+"), includes);
58          assertEquals(Collections.singletonList("1.4"), excludes);
59      }
60  
61      @Test
62      public void testParseVersion() {
63          assertEquals(Arrays.asList(1, 6, 0, 12), SelectorUtils.parseVersion("1.6.0_12"));
64  
65          assertEquals(Arrays.asList(1, 6, 0, 12), SelectorUtils.parseVersion("1.6.0_12+"));
66          assertEquals(Arrays.asList(1, 6, 0, 12), SelectorUtils.parseVersion("1.6.0_12-"));
67      }
68  
69      @Test
70      public void testCompareVersions() {
71          assertTrue(SelectorUtils.compareVersions(Arrays.asList(1, 6), Arrays.asList(1, 6)) == 0);
72  
73          assertTrue(SelectorUtils.compareVersions(Arrays.asList(1, 5), Arrays.asList(1, 6)) < 0);
74          assertTrue(SelectorUtils.compareVersions(Arrays.asList(1, 6), Arrays.asList(1, 5)) > 0);
75  
76          assertTrue(SelectorUtils.compareVersions(Collections.singletonList(1), Arrays.asList(1, 6)) < 0);
77          assertTrue(SelectorUtils.compareVersions(Arrays.asList(1, 6), Collections.singletonList(1)) > 0);
78      }
79  
80      @Test
81      public void testIsMatchingJre() {
82  
83          assertFalse(SelectorUtils.isJreVersion(Arrays.asList(1, 4, 2, 8), "1.5"));
84          assertTrue(SelectorUtils.isJreVersion(Arrays.asList(1, 5), "1.5"));
85          assertTrue(SelectorUtils.isJreVersion(Arrays.asList(1, 5, 9), "1.5"));
86          assertFalse(SelectorUtils.isJreVersion(Arrays.asList(1, 6), "1.5"));
87  
88          assertFalse(SelectorUtils.isJreVersion(Arrays.asList(1, 4, 2, 8), "1.5+"));
89          assertTrue(SelectorUtils.isJreVersion(Arrays.asList(1, 5), "1.5+"));
90          assertTrue(SelectorUtils.isJreVersion(Arrays.asList(1, 5, 9), "1.5+"));
91          assertTrue(SelectorUtils.isJreVersion(Arrays.asList(1, 6), "1.5+"));
92  
93          assertTrue(SelectorUtils.isJreVersion(Arrays.asList(1, 4, 2, 8), "1.5-"));
94          assertFalse(SelectorUtils.isJreVersion(Arrays.asList(1, 5), "1.5-"));
95          assertFalse(SelectorUtils.isJreVersion(Arrays.asList(1, 5, 9), "1.5-"));
96          assertFalse(SelectorUtils.isJreVersion(Arrays.asList(1, 6), "1.5-"));
97  
98          assertTrue(SelectorUtils.isJreVersion((String) null, "1.5"));
99          assertTrue(SelectorUtils.isJreVersion("", "1.5"));
100     }
101 
102     @Test
103     public void testIsMatchingToolchain() throws Exception {
104         InvokerToolchain openJdk9 = new InvokerToolchain("jdk");
105         openJdk9.addProvides("version", "9");
106         openJdk9.addProvides("vendor", "openJDK");
107 
108         InvokerToolchain maven360 = new InvokerToolchain("maven");
109         openJdk9.addProvides("version", "3.6.0");
110 
111         ToolchainPrivateManager toolchainPrivateManager = mock(ToolchainPrivateManager.class);
112         ToolchainPrivate jdkMatching = mock(ToolchainPrivate.class);
113         when(jdkMatching.matchesRequirements(isA(Map.class))).thenReturn(true);
114         when(jdkMatching.getType()).thenReturn("jdk");
115 
116         ToolchainPrivate jdkMismatch = mock(ToolchainPrivate.class);
117         when(jdkMismatch.getType()).thenReturn("jdk");
118 
119         when(toolchainPrivateManager.getToolchainPrivates("jdk")).thenReturn(new ToolchainPrivate[] {jdkMatching});
120         assertTrue(SelectorUtils.isToolchain(toolchainPrivateManager, Collections.singleton(openJdk9)));
121 
122         when(toolchainPrivateManager.getToolchainPrivates("jdk")).thenReturn(new ToolchainPrivate[] {jdkMismatch});
123         assertFalse(SelectorUtils.isToolchain(toolchainPrivateManager, Collections.singleton(openJdk9)));
124 
125         when(toolchainPrivateManager.getToolchainPrivates("jdk"))
126                 .thenReturn(new ToolchainPrivate[] {jdkMatching, jdkMismatch, jdkMatching});
127         assertTrue(SelectorUtils.isToolchain(toolchainPrivateManager, Collections.singleton(openJdk9)));
128 
129         when(toolchainPrivateManager.getToolchainPrivates("jdk")).thenReturn(new ToolchainPrivate[0]);
130         assertFalse(SelectorUtils.isToolchain(toolchainPrivateManager, Collections.singleton(openJdk9)));
131 
132         when(toolchainPrivateManager.getToolchainPrivates("jdk")).thenReturn(new ToolchainPrivate[] {jdkMatching});
133         when(toolchainPrivateManager.getToolchainPrivates("maven")).thenReturn(new ToolchainPrivate[0]);
134         assertFalse(SelectorUtils.isToolchain(toolchainPrivateManager, Arrays.asList(openJdk9, maven360)));
135     }
136 
137     @Test
138     public void mavenVersionForNotExistingMavenHomeThrowException() {
139         File mavenHome = new File("not-existing-path");
140 
141         assertThatCode(() -> SelectorUtils.getMavenVersion(mavenHome))
142                 .isExactlyInstanceOf(IllegalArgumentException.class)
143                 .hasMessage("Invalid Maven home installation directory: not-existing-path");
144     }
145 
146     @Test
147     public void mavenVersionFromMavenHome() throws IOException {
148         File mavenHome = new File(System.getProperty("maven.home"));
149 
150         String mavenVersion = SelectorUtils.getMavenVersion(mavenHome);
151 
152         assertThat(mavenVersion).isNotBlank();
153     }
154 }