blob: a7a0dffff0286f4b655cdaca442ee991d2e960fd [file] [log] [blame]
package org.apache.maven.plugins.help;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugin.version.PluginVersionRequest;
import org.apache.maven.plugin.version.PluginVersionResolver;
import org.apache.maven.plugin.version.PluginVersionResult;
import org.apache.maven.plugins.help.DescribeMojo.PluginInfo;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.exec.MavenPluginManagerHelper;
import org.mockito.ArgumentCaptor;
import junit.framework.TestCase;
import junitx.util.PrivateAccessor;
/**
* @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
*/
public class DescribeMojoTest
extends TestCase
{
/**
* Test method for {@link org.apache.maven.plugins.help.DescribeMojo#toLines(java.lang.String, int, int, int)}.
*
* @throws Exception if any
*/
public void testGetExpressionsRoot()
throws Exception
{
try
{
PrivateAccessor.invoke( DescribeMojo.class, "toLines", new Class[] { String.class, Integer.TYPE,
Integer.TYPE, Integer.TYPE }, new Object[] { "", 2, 2,
80} );
assertTrue( true );
}
catch ( Throwable e )
{
fail( "The API changes" );
}
}
public void testValidExpression()
throws Exception
{
StringBuilder sb = new StringBuilder();
MojoDescriptor md = new MojoDescriptor();
Parameter parameter = new Parameter();
parameter.setName( "name" );
parameter.setExpression( "${valid.expression}" );
md.addParameter( parameter );
String ls = System.getProperty( "line.separator" );
try
{
PrivateAccessor.invoke( new DescribeMojo(), "describeMojoParameters", new Class[] { MojoDescriptor.class,
StringBuilder.class }, new Object[] { md, sb } );
assertEquals( " Available parameters:" + ls
+ ls +
" name" + ls +
" User property: valid.expression" + ls +
" (no description available)" + ls, sb.toString() );
}
catch ( Throwable e )
{
fail( e.getMessage() );
}
}
public void testInvalidExpression()
throws Exception
{
StringBuilder sb = new StringBuilder();
MojoDescriptor md = new MojoDescriptor();
Parameter parameter = new Parameter();
parameter.setName( "name" );
parameter.setExpression( "${project.build.directory}/generated-sources/foobar" ); //this is a defaultValue
md.addParameter( parameter );
String ls = System.getProperty( "line.separator" );
try
{
PrivateAccessor.invoke( new DescribeMojo(), "describeMojoParameters", new Class[] { MojoDescriptor.class,
StringBuilder.class }, new Object[] { md, sb } );
assertEquals( " Available parameters:" + ls +
ls +
" name" + ls +
" Expression: ${project.build.directory}/generated-sources/foobar" + ls +
" (no description available)" + ls, sb.toString() );
}
catch ( Throwable e )
{
fail( e.getMessage() );
}
}
public void testParsePluginInfoGAV()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PrivateAccessor.setField( mojo, "groupId", "org.test" );
PrivateAccessor.setField( mojo, "artifactId", "test" );
PrivateAccessor.setField( mojo, "version", "1.0" );
PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
assertEquals( pi.getGroupId(), "org.test" );
assertEquals( pi.getArtifactId(), "test" );
assertEquals( pi.getVersion(), "1.0" );
assertNull( pi.getPrefix() );
}
public void testParsePluginInfoPluginPrefix()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PrivateAccessor.setField( mojo, "plugin", "help" );
PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
assertNull( pi.getGroupId() );
assertNull( pi.getArtifactId() );
assertNull( pi.getVersion() );
assertEquals( "help", pi.getPrefix() );
PrivateAccessor.setField( mojo, "plugin", "help2:::" );
pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
assertEquals( "help2", pi.getPrefix() );
}
public void testParsePluginInfoPluginGA()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PrivateAccessor.setField( mojo, "plugin", "org.test:test" );
PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
assertEquals( "org.test", pi.getGroupId() );
assertEquals( "test", pi.getArtifactId() );
assertNull( pi.getVersion() );
assertNull( pi.getPrefix() );
}
public void testParsePluginInfoPluginGAV()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PrivateAccessor.setField( mojo, "plugin", "org.test:test:1.0" );
PluginInfo pi = (PluginInfo) PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
assertEquals( "org.test", pi.getGroupId() );
assertEquals( "test", pi.getArtifactId() );
assertEquals( "1.0", pi.getVersion() );
assertNull( pi.getPrefix() );
}
public void testParsePluginInfoPluginIncorrect()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PrivateAccessor.setField( mojo, "plugin", "org.test:test:1.0:invalid" );
try
{
PrivateAccessor.invoke( mojo, "parsePluginLookupInfo", null, null );
fail();
}
catch ( Exception e )
{
// expected
}
}
public void testLookupPluginDescriptorPrefixWithVersion()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PluginInfo pi = new PluginInfo();
pi.setPrefix( "help" );
pi.setVersion( "1.0" );
Plugin plugin = new Plugin();
plugin.setGroupId( "org.test" );
plugin.setArtifactId( "test" );
PluginDescriptor pd = new PluginDescriptor();
MojoDescriptorCreator mojoDescriptorCreator = mock( MojoDescriptorCreator.class );
PluginVersionResolver pluginVersionResolver = mock( PluginVersionResolver.class );
MavenPluginManagerHelper pluginManager = mock( MavenPluginManagerHelper.class );
MavenSession session = mock( MavenSession.class );
PrivateAccessor.setField( mojo, "mojoDescriptorCreator", mojoDescriptorCreator );
PrivateAccessor.setField( mojo, "pluginVersionResolver", pluginVersionResolver );
PrivateAccessor.setField( mojo, "pluginManager", pluginManager );
PrivateAccessor.setField( mojo, "session", session );
when( mojoDescriptorCreator.findPluginForPrefix( "help", session ) ).thenReturn( plugin );
when( pluginManager.getPluginDescriptor( any( Plugin.class ), eq( session ) ) ).thenReturn( pd );
PluginDescriptor returned =
(PluginDescriptor) PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
new Object[] { pi } );
assertEquals( pd, returned );
verify( mojoDescriptorCreator ).findPluginForPrefix( "help", session );
verify( pluginVersionResolver, never() ).resolve( any( PluginVersionRequest.class ) );
ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass( Plugin.class );
verify( pluginManager ).getPluginDescriptor( argument.capture(), eq( session ) );
Plugin capturedPlugin = argument.getValue();
assertEquals( "org.test", capturedPlugin.getGroupId() );
assertEquals( "test", capturedPlugin.getArtifactId() );
assertEquals( "1.0", capturedPlugin.getVersion() );
}
public void testLookupPluginDescriptorPrefixWithoutVersion()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PluginInfo pi = new PluginInfo();
pi.setPrefix( "help" );
Plugin plugin = new Plugin();
plugin.setGroupId( "org.test" );
plugin.setArtifactId( "test" );
PluginDescriptor pd = new PluginDescriptor();
MojoDescriptorCreator mojoDescriptorCreator = mock( MojoDescriptorCreator.class );
PluginVersionResolver pluginVersionResolver = mock( PluginVersionResolver.class );
MavenPluginManagerHelper pluginManager = mock( MavenPluginManagerHelper.class );
PluginVersionResult versionResult = mock( PluginVersionResult.class );
MavenSession session = mock( MavenSession.class );
PrivateAccessor.setField( mojo, "mojoDescriptorCreator", mojoDescriptorCreator );
PrivateAccessor.setField( mojo, "pluginVersionResolver", pluginVersionResolver );
PrivateAccessor.setField( mojo, "pluginManager", pluginManager );
PrivateAccessor.setField( mojo, "session", session );
PrivateAccessor.setField( mojo, "project", new MavenProject() );
when( mojoDescriptorCreator.findPluginForPrefix( "help", session ) ).thenReturn( plugin );
when( pluginVersionResolver.resolve( any( PluginVersionRequest.class ) ) ).thenReturn( versionResult );
when( versionResult.getVersion() ).thenReturn( "1.0" );
when( pluginManager.getPluginDescriptor( any( Plugin.class ), eq( session ) ) ).thenReturn( pd );
PluginDescriptor returned =
(PluginDescriptor) PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
new Object[] { pi } );
assertEquals( pd, returned );
verify( mojoDescriptorCreator ).findPluginForPrefix( "help", session );
ArgumentCaptor<PluginVersionRequest> versionArgument = ArgumentCaptor.forClass( PluginVersionRequest.class );
verify( pluginVersionResolver ).resolve( versionArgument.capture() );
assertEquals( "org.test", versionArgument.getValue().getGroupId() );
assertEquals( "test", versionArgument.getValue().getArtifactId() );
ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass( Plugin.class );
verify( pluginManager ).getPluginDescriptor( argument.capture(), eq( session ) );
Plugin capturedPlugin = argument.getValue();
assertEquals( "org.test", capturedPlugin.getGroupId() );
assertEquals( "test", capturedPlugin.getArtifactId() );
assertEquals( "1.0", capturedPlugin.getVersion() );
}
public void testLookupPluginDescriptorGAV()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PluginInfo pi = new PluginInfo();
pi.setGroupId( "org.test" );
pi.setArtifactId( "test" );
pi.setVersion( "1.0" );
PluginDescriptor pd = new PluginDescriptor();
MojoDescriptorCreator mojoDescriptorCreator = mock( MojoDescriptorCreator.class );
PluginVersionResolver pluginVersionResolver = mock( PluginVersionResolver.class );
MavenPluginManagerHelper pluginManager = mock( MavenPluginManagerHelper.class );
MavenSession session = mock( MavenSession.class );
PrivateAccessor.setField( mojo, "mojoDescriptorCreator", mojoDescriptorCreator );
PrivateAccessor.setField( mojo, "pluginVersionResolver", pluginVersionResolver );
PrivateAccessor.setField( mojo, "pluginManager", pluginManager );
PrivateAccessor.setField( mojo, "session", session );
when( pluginManager.getPluginDescriptor( any( Plugin.class ), eq( session ) ) ).thenReturn( pd );
PluginDescriptor returned =
(PluginDescriptor) PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
new Object[] { pi } );
assertEquals( pd, returned );
verify( mojoDescriptorCreator, never() ).findPluginForPrefix( any( String.class ), any( MavenSession.class ) );
verify( pluginVersionResolver, never() ).resolve( any( PluginVersionRequest.class ) );
ArgumentCaptor<Plugin> argument = ArgumentCaptor.forClass( Plugin.class );
verify( pluginManager ).getPluginDescriptor( argument.capture(), eq( session ) );
Plugin capturedPlugin = argument.getValue();
assertEquals( "org.test", capturedPlugin.getGroupId() );
assertEquals( "test", capturedPlugin.getArtifactId() );
assertEquals( "1.0", capturedPlugin.getVersion() );
}
public void testLookupPluginDescriptorGMissingA()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PluginInfo pi = new PluginInfo();
pi.setGroupId( "org.test" );
try
{
PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
new Object[] { pi } );
fail();
}
catch ( Exception e )
{
assertTrue( e.getMessage().startsWith( "You must specify either" ) );
}
}
public void testLookupPluginDescriptorAMissingG()
throws Throwable
{
DescribeMojo mojo = new DescribeMojo();
PluginInfo pi = new PluginInfo();
pi.setArtifactId( "test" );
try
{
PrivateAccessor.invoke( mojo, "lookupPluginDescriptor", new Class[] { PluginInfo.class },
new Object[] { pi } );
fail();
}
catch ( Exception e )
{
assertTrue( e.getMessage().startsWith( "You must specify either" ) );
}
}
}