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.dependency;
20  
21  import java.io.File;
22  import java.nio.file.Files;
23  import java.nio.file.Path;
24  import java.nio.file.Paths;
25  import java.util.Arrays;
26  import java.util.List;
27  
28  import org.apache.maven.execution.MavenSession;
29  import org.apache.maven.plugin.logging.Log;
30  import org.apache.maven.plugins.dependency.testUtils.stubs.DependencyProjectStub;
31  import org.apache.maven.plugins.dependency.utils.ResolverUtil;
32  import org.apache.maven.project.MavenProject;
33  import org.eclipse.aether.RepositorySystem;
34  import org.junit.Assert;
35  import org.mockito.ArgumentCaptor;
36  import org.mockito.Mockito;
37  
38  public class TestListClassesMojo extends AbstractDependencyMojoTestCase {
39      private ListClassesMojo mojo;
40  
41      @Override
42      protected String getTestDirectoryName() {
43          return "markers";
44      }
45  
46      @Override
47      protected boolean shouldCreateFiles() {
48          return false;
49      }
50  
51      @Override
52      protected void setUp() throws Exception {
53          super.setUp();
54  
55          MavenProject project = new DependencyProjectStub();
56          getContainer().addComponent(project, MavenProject.class.getName());
57  
58          MavenSession session = newMavenSession(project);
59  
60          RepositorySystem repositorySystem = lookup(RepositorySystem.class);
61          ResolverUtil resolverUtil = new ResolverUtil(repositorySystem, () -> session);
62          getContainer().addComponent(resolverUtil, ResolverUtil.class.getName());
63  
64          getContainer().addComponent(session, MavenSession.class.getName());
65  
66          File testPom = new File(getBasedir(), "target/test-classes/unit/get-test/plugin-config.xml");
67  
68          assertTrue(testPom.exists());
69          mojo = (ListClassesMojo) lookupMojo("list-classes", testPom);
70  
71          assertNotNull(mojo);
72  
73          installLocalRepository(session.getRepositorySession());
74      }
75  
76      public void testListClassesNotTransitive() throws Exception {
77          Path path = Paths.get("src/test/resources/unit/list-test/testListClassesNotTransitive.txt");
78          List<String> expectedLogArgs = Files.readAllLines(path);
79          ArgumentCaptor<String> infoArgsCaptor = ArgumentCaptor.forClass(String.class);
80  
81          setVariableValueToObject(
82                  mojo,
83                  "remoteRepositories",
84                  Arrays.asList(
85                          "central::default::https://repo.maven.apache.org/maven2",
86                          "central::::https://repo.maven.apache.org/maven2",
87                          "https://repo.maven.apache.org/maven2"));
88          mojo.setArtifact("org.apache.commons:commons-lang3:3.6");
89          setVariableValueToObject(mojo, "transitive", Boolean.FALSE);
90  
91          Log log = Mockito.mock(Log.class);
92          mojo.setLog(log);
93  
94          mojo.execute();
95  
96          Mockito.verify(log, Mockito.times(expectedLogArgs.size())).info(infoArgsCaptor.capture());
97          Assert.assertEquals(expectedLogArgs, infoArgsCaptor.getAllValues());
98      }
99  
100     public void testListClassesNotTransitiveByGAV() throws Exception {
101         Path path = Paths.get("src/test/resources/unit/list-test/testListClassesNotTransitive.txt");
102         List<String> expectedLogArgs = Files.readAllLines(path);
103         ArgumentCaptor<String> infoArgsCaptor = ArgumentCaptor.forClass(String.class);
104 
105         setVariableValueToObject(
106                 mojo,
107                 "remoteRepositories",
108                 Arrays.asList(
109                         "central1::default::https://repo.maven.apache.org/maven2",
110                         "central2::::https://repo.maven.apache.org/maven2",
111                         "https://repo.maven.apache.org/maven2"));
112 
113         mojo.setGroupId("org.apache.commons");
114         mojo.setArtifactId("commons-lang3");
115         mojo.setVersion("3.6");
116 
117         setVariableValueToObject(mojo, "transitive", Boolean.FALSE);
118 
119         Log log = Mockito.mock(Log.class);
120         mojo.setLog(log);
121 
122         mojo.execute();
123 
124         Mockito.verify(log, Mockito.times(expectedLogArgs.size())).info(infoArgsCaptor.capture());
125         Assert.assertEquals(expectedLogArgs, infoArgsCaptor.getAllValues());
126     }
127 
128     public void testListClassesTransitive() throws Exception {
129         Path path = Paths.get("src/test/resources/unit/list-test/testListClassesTransitive.txt");
130         List<String> expectedLogArgs = Files.readAllLines(path);
131         ArgumentCaptor<String> infoArgsCaptor = ArgumentCaptor.forClass(String.class);
132 
133         setVariableValueToObject(
134                 mojo,
135                 "remoteRepositories",
136                 Arrays.asList(
137                         "central::default::https://repo.maven.apache.org/maven2",
138                         "central::::https://repo.maven.apache.org/maven2",
139                         "https://repo.maven.apache.org/maven2"));
140 
141         mojo.setArtifact("org.apache.commons:commons-lang3:3.6");
142         setVariableValueToObject(mojo, "transitive", Boolean.TRUE);
143 
144         Log log = Mockito.mock(Log.class);
145         mojo.setLog(log);
146 
147         mojo.execute();
148 
149         Mockito.verify(log, Mockito.times(expectedLogArgs.size())).info(infoArgsCaptor.capture());
150         Assert.assertEquals(expectedLogArgs, infoArgsCaptor.getAllValues());
151     }
152 
153     public void testListClassesTransitiveByGAV() throws Exception {
154         Path path = Paths.get("src/test/resources/unit/list-test/testListClassesTransitive.txt");
155         List<String> expectedLogArgs = Files.readAllLines(path);
156         ArgumentCaptor<String> infoArgsCaptor = ArgumentCaptor.forClass(String.class);
157 
158         setVariableValueToObject(
159                 mojo,
160                 "remoteRepositories",
161                 Arrays.asList(
162                         "central::default::https://repo.maven.apache.org/maven2",
163                         "central::::https://repo.maven.apache.org/maven2",
164                         "https://repo.maven.apache.org/maven2"));
165         mojo.setGroupId("org.apache.commons");
166         mojo.setArtifactId("commons-lang3");
167         mojo.setVersion("3.6");
168         setVariableValueToObject(mojo, "transitive", Boolean.TRUE);
169 
170         Log log = Mockito.mock(Log.class);
171         mojo.setLog(log);
172 
173         mojo.execute();
174 
175         Mockito.verify(log, Mockito.times(expectedLogArgs.size())).info(infoArgsCaptor.capture());
176         Assert.assertEquals(expectedLogArgs, infoArgsCaptor.getAllValues());
177     }
178 }