1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.help;
20
21 import java.lang.reflect.InvocationTargetException;
22 import java.util.Collections;
23
24 import org.apache.maven.execution.MavenSession;
25 import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
26 import org.apache.maven.model.Plugin;
27 import org.apache.maven.plugin.MavenPluginManager;
28 import org.apache.maven.plugin.descriptor.MojoDescriptor;
29 import org.apache.maven.plugin.descriptor.Parameter;
30 import org.apache.maven.plugin.descriptor.PluginDescriptor;
31 import org.apache.maven.plugin.version.PluginVersionRequest;
32 import org.apache.maven.plugin.version.PluginVersionResolver;
33 import org.apache.maven.plugin.version.PluginVersionResult;
34 import org.apache.maven.plugins.help.DescribeMojo.PluginInfo;
35 import org.apache.maven.project.MavenProject;
36 import org.eclipse.aether.RepositorySystemSession;
37 import org.junit.Test;
38 import org.mockito.ArgumentCaptor;
39
40 import static org.apache.commons.lang3.reflect.FieldUtils.writeDeclaredField;
41 import static org.apache.commons.lang3.reflect.FieldUtils.writeField;
42 import static org.apache.commons.lang3.reflect.MethodUtils.invokeMethod;
43 import static org.junit.Assert.*;
44 import static org.mockito.Mockito.*;
45
46
47
48
49 public class DescribeMojoTest {
50
51
52
53
54 @Test
55 public void testGetExpressionsRoot() {
56 try {
57 DescribeMojo describeMojo = new DescribeMojo();
58 invokeMethod(describeMojo, true, "toLines", "", 2, 2, 80);
59 } catch (Throwable e) {
60 fail("The API changes");
61 }
62 }
63
64 @Test
65 public void testValidExpression() throws Exception {
66 StringBuilder sb = new StringBuilder();
67 MojoDescriptor md = new MojoDescriptor();
68 Parameter parameter = new Parameter();
69 parameter.setName("name");
70 parameter.setExpression("${valid.expression}");
71 md.addParameter(parameter);
72
73 String ls = System.getProperty("line.separator");
74
75 try {
76 invokeMethod(new DescribeMojo(), true, "describeMojoParameters", md, sb);
77
78 assertEquals(
79 " Available parameters:" + ls + ls + " name" + ls + " User property: valid.expression" + ls
80 + " (no description available)" + ls,
81 sb.toString());
82 } catch (Throwable e) {
83 fail(e.getMessage());
84 }
85 }
86
87 @Test
88 public void testInvalidExpression() throws Exception {
89 StringBuilder sb = new StringBuilder();
90 MojoDescriptor md = new MojoDescriptor();
91 Parameter parameter = new Parameter();
92 parameter.setName("name");
93 parameter.setExpression("${project.build.directory}/generated-sources/foobar");
94 md.addParameter(parameter);
95
96 String ls = System.getProperty("line.separator");
97
98 try {
99 invokeMethod(new DescribeMojo(), true, "describeMojoParameters", md, sb);
100
101 assertEquals(
102 " Available parameters:" + ls + ls
103 + " name"
104 + ls + " Expression: ${project.build.directory}/generated-sources/foobar"
105 + ls + " (no description available)"
106 + ls,
107 sb.toString());
108 } catch (Throwable e) {
109 fail(e.getMessage());
110 }
111 }
112
113 @Test
114 public void testParsePluginInfoGAV() throws Throwable {
115 DescribeMojo mojo = new DescribeMojo();
116 writeDeclaredField(mojo, "groupId", "org.test", true);
117 writeDeclaredField(mojo, "artifactId", "test", true);
118 writeDeclaredField(mojo, "version", "1.0", true);
119
120 PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo");
121
122 assertEquals("org.test", pi.getGroupId());
123 assertEquals("test", pi.getArtifactId());
124 assertEquals("1.0", pi.getVersion());
125 assertNull(pi.getPrefix());
126 }
127
128 @Test
129 public void testParsePluginInfoPluginPrefix() throws Throwable {
130 DescribeMojo mojo = new DescribeMojo();
131 writeDeclaredField(mojo, "plugin", "help", true);
132
133 PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo");
134
135 assertNull(pi.getGroupId());
136 assertNull(pi.getArtifactId());
137 assertNull(pi.getVersion());
138 assertEquals("help", pi.getPrefix());
139
140 writeDeclaredField(mojo, "plugin", "help2:::", true);
141
142 pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo");
143
144 assertEquals("help2", pi.getPrefix());
145 }
146
147 @Test
148 public void testParsePluginInfoPluginGA() throws Throwable {
149 DescribeMojo mojo = new DescribeMojo();
150 writeDeclaredField(mojo, "plugin", "org.test:test", true);
151
152 PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo");
153
154 assertEquals("org.test", pi.getGroupId());
155 assertEquals("test", pi.getArtifactId());
156 assertNull(pi.getVersion());
157 assertNull(pi.getPrefix());
158 }
159
160 @Test
161 public void testParsePluginInfoPluginGAV() throws Throwable {
162 DescribeMojo mojo = new DescribeMojo();
163 writeDeclaredField(mojo, "plugin", "org.test:test:1.0", true);
164
165 PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo");
166
167 assertEquals("org.test", pi.getGroupId());
168 assertEquals("test", pi.getArtifactId());
169 assertEquals("1.0", pi.getVersion());
170 assertNull(pi.getPrefix());
171 }
172
173 @Test
174 public void testParsePluginInfoPluginIncorrect() throws Throwable {
175 DescribeMojo mojo = new DescribeMojo();
176 writeDeclaredField(mojo, "plugin", "org.test:test:1.0:invalid", true);
177 try {
178 invokeMethod(mojo, "parsePluginLookupInfo");
179 fail();
180 } catch (Exception e) {
181
182 }
183 }
184
185 @Test
186 public void testLookupPluginDescriptorPrefixWithVersion() throws Throwable {
187 DescribeMojo mojo = new DescribeMojo();
188
189 PluginInfo pi = new PluginInfo();
190 pi.setPrefix("help");
191 pi.setVersion("1.0");
192
193 Plugin plugin = new Plugin();
194 plugin.setGroupId("org.test");
195 plugin.setArtifactId("test");
196
197 PluginDescriptor pd = new PluginDescriptor();
198
199 MojoDescriptorCreator mojoDescriptorCreator = mock(MojoDescriptorCreator.class);
200 PluginVersionResolver pluginVersionResolver = mock(PluginVersionResolver.class);
201 MavenPluginManager pluginManager = mock(MavenPluginManager.class);
202 MavenSession session = mock(MavenSession.class);
203 when(session.getRepositorySession()).thenReturn(mock(RepositorySystemSession.class));
204 writeDeclaredField(mojo, "mojoDescriptorCreator", mojoDescriptorCreator, true);
205 writeDeclaredField(mojo, "pluginVersionResolver", pluginVersionResolver, true);
206 writeDeclaredField(mojo, "pluginManager", pluginManager, true);
207 writeField(mojo, "session", session, true);
208 MavenProject mavenProject = new MavenProject();
209 mavenProject.setPluginArtifactRepositories(Collections.emptyList());
210 writeField(mojo, "project", mavenProject, true);
211 when(mojoDescriptorCreator.findPluginForPrefix("help", session)).thenReturn(plugin);
212 when(pluginManager.getPluginDescriptor(any(Plugin.class), anyList(), any()))
213 .thenReturn(pd);
214
215 PluginDescriptor returned = (PluginDescriptor) invokeMethod(mojo, true, "lookupPluginDescriptor", pi);
216
217 assertEquals(pd, returned);
218
219 verify(mojoDescriptorCreator).findPluginForPrefix("help", session);
220 verify(pluginVersionResolver, never()).resolve(any(PluginVersionRequest.class));
221 ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass(Plugin.class);
222 verify(pluginManager).getPluginDescriptor(argument.capture(), anyList(), any());
223 Plugin capturedPlugin = argument.getValue();
224 assertEquals("org.test", capturedPlugin.getGroupId());
225 assertEquals("test", capturedPlugin.getArtifactId());
226 assertEquals("1.0", capturedPlugin.getVersion());
227 }
228
229 @Test
230 public void testLookupPluginDescriptorPrefixWithoutVersion() throws Throwable {
231 DescribeMojo mojo = new DescribeMojo();
232
233 PluginInfo pi = new PluginInfo();
234 pi.setPrefix("help");
235
236 Plugin plugin = new Plugin();
237 plugin.setGroupId("org.test");
238 plugin.setArtifactId("test");
239
240 PluginDescriptor pd = new PluginDescriptor();
241
242 MojoDescriptorCreator mojoDescriptorCreator = mock(MojoDescriptorCreator.class);
243 PluginVersionResolver pluginVersionResolver = mock(PluginVersionResolver.class);
244 MavenPluginManager pluginManager = mock(MavenPluginManager.class);
245 PluginVersionResult versionResult = mock(PluginVersionResult.class);
246 MavenSession session = mock(MavenSession.class);
247 when(session.getRepositorySession()).thenReturn(mock(RepositorySystemSession.class));
248 writeDeclaredField(mojo, "mojoDescriptorCreator", mojoDescriptorCreator, true);
249 writeDeclaredField(mojo, "pluginVersionResolver", pluginVersionResolver, true);
250 writeDeclaredField(mojo, "pluginManager", pluginManager, true);
251 writeField(mojo, "session", session, true);
252 MavenProject mavenProject = new MavenProject();
253 mavenProject.setPluginArtifactRepositories(Collections.emptyList());
254 writeField(mojo, "project", mavenProject, true);
255 when(mojoDescriptorCreator.findPluginForPrefix("help", session)).thenReturn(plugin);
256 when(pluginVersionResolver.resolve(any(PluginVersionRequest.class))).thenReturn(versionResult);
257 when(versionResult.getVersion()).thenReturn("1.0");
258 when(pluginManager.getPluginDescriptor(any(Plugin.class), anyList(), any()))
259 .thenReturn(pd);
260
261 PluginDescriptor returned = (PluginDescriptor) invokeMethod(mojo, true, "lookupPluginDescriptor", pi);
262 assertEquals(pd, returned);
263
264 verify(mojoDescriptorCreator).findPluginForPrefix("help", session);
265 ArgumentCaptor<PluginVersionRequest> versionArgument = ArgumentCaptor.forClass(PluginVersionRequest.class);
266 verify(pluginVersionResolver).resolve(versionArgument.capture());
267 assertEquals("org.test", versionArgument.getValue().getGroupId());
268 assertEquals("test", versionArgument.getValue().getArtifactId());
269 ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass(Plugin.class);
270 verify(pluginManager).getPluginDescriptor(argument.capture(), anyList(), any());
271 Plugin capturedPlugin = argument.getValue();
272 assertEquals("org.test", capturedPlugin.getGroupId());
273 assertEquals("test", capturedPlugin.getArtifactId());
274 assertEquals("1.0", capturedPlugin.getVersion());
275 }
276
277 @Test
278 public void testLookupPluginDescriptorGAV() throws Throwable {
279 DescribeMojo mojo = new DescribeMojo();
280
281 PluginInfo pi = new PluginInfo();
282 pi.setGroupId("org.test");
283 pi.setArtifactId("test");
284 pi.setVersion("1.0");
285
286 PluginDescriptor pd = new PluginDescriptor();
287
288 MojoDescriptorCreator mojoDescriptorCreator = mock(MojoDescriptorCreator.class);
289 PluginVersionResolver pluginVersionResolver = mock(PluginVersionResolver.class);
290 MavenPluginManager pluginManager = mock(MavenPluginManager.class);
291 MavenSession session = mock(MavenSession.class);
292 when(session.getRepositorySession()).thenReturn(mock(RepositorySystemSession.class));
293 writeDeclaredField(mojo, "mojoDescriptorCreator", mojoDescriptorCreator, true);
294 writeDeclaredField(mojo, "pluginVersionResolver", pluginVersionResolver, true);
295 writeDeclaredField(mojo, "pluginManager", pluginManager, true);
296 writeField(mojo, "session", session, true);
297 MavenProject mavenProject = new MavenProject();
298 mavenProject.setPluginArtifactRepositories(Collections.emptyList());
299 writeField(mojo, "project", mavenProject, true);
300 when(pluginManager.getPluginDescriptor(any(Plugin.class), anyList(), any()))
301 .thenReturn(pd);
302
303 PluginDescriptor returned = (PluginDescriptor) invokeMethod(mojo, true, "lookupPluginDescriptor", pi);
304
305 assertEquals(pd, returned);
306
307 verify(mojoDescriptorCreator, never()).findPluginForPrefix(any(String.class), any(MavenSession.class));
308 verify(pluginVersionResolver, never()).resolve(any(PluginVersionRequest.class));
309 ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass(Plugin.class);
310 verify(pluginManager).getPluginDescriptor(argument.capture(), anyList(), any());
311 Plugin capturedPlugin = argument.getValue();
312 assertEquals("org.test", capturedPlugin.getGroupId());
313 assertEquals("test", capturedPlugin.getArtifactId());
314 assertEquals("1.0", capturedPlugin.getVersion());
315 }
316
317 @Test
318 public void testLookupPluginDescriptorGMissingA() {
319 DescribeMojo mojo = new DescribeMojo();
320 PluginInfo pi = new PluginInfo();
321 pi.setGroupId("org.test");
322 try {
323 invokeMethod(mojo, true, "lookupPluginDescriptor", pi);
324 fail();
325 } catch (InvocationTargetException e) {
326 assertTrue(e.getTargetException().getMessage().startsWith("You must specify either"));
327 } catch (NoSuchMethodException | IllegalAccessException e) {
328 fail();
329 }
330 }
331
332 @Test
333 public void testLookupPluginDescriptorAMissingG() {
334 DescribeMojo mojo = new DescribeMojo();
335 PluginInfo pi = new PluginInfo();
336 pi.setArtifactId("test");
337 try {
338 invokeMethod(mojo, true, "lookupPluginDescriptor", pi);
339 fail();
340 } catch (InvocationTargetException e) {
341 assertTrue(e.getTargetException().getMessage().startsWith("You must specify either"));
342 } catch (Exception e) {
343 fail(e.getMessage());
344 }
345 }
346 }