1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 }