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