diff --git a/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java b/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java index ce210f18..40a07077 100644 --- a/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java +++ b/src/test/java/org/apache/maven/plugins/help/DescribeMojoTest.java @@ -18,7 +18,9 @@ */ package org.apache.maven.plugins.help; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Collections; import org.apache.maven.execution.MavenSession; @@ -37,9 +39,6 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; -import static org.apache.commons.lang3.reflect.FieldUtils.writeDeclaredField; -import static org.apache.commons.lang3.reflect.FieldUtils.writeField; -import static org.apache.commons.lang3.reflect.MethodUtils.invokeMethod; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -55,7 +54,10 @@ public class DescribeMojoTest { public void testGetExpressionsRoot() { try { DescribeMojo describeMojo = new DescribeMojo(); - invokeMethod(describeMojo, true, "toLines", "", 2, 2, 80); + Method toLines = + describeMojo.getClass().getDeclaredMethod("toLines", String.class, int.class, int.class, int.class); + toLines.setAccessible(true); + toLines.invoke(null, "", 2, 2, 80); } catch (Throwable e) { fail("The API changes"); } @@ -73,7 +75,10 @@ public void testValidExpression() throws Exception { String ls = System.getProperty("line.separator"); try { - invokeMethod(new DescribeMojo(), true, "describeMojoParameters", md, sb); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod( + "describeMojoParameters", MojoDescriptor.class, StringBuilder.class); + describeMojoParameters.setAccessible(true); + describeMojoParameters.invoke(new DescribeMojo(), md, sb); assertEquals( " Available parameters:" + ls + ls + " name" + ls + " User property: valid.expression" + ls @@ -96,7 +101,10 @@ public void testInvalidExpression() throws Exception { String ls = System.getProperty("line.separator"); try { - invokeMethod(new DescribeMojo(), true, "describeMojoParameters", md, sb); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod( + "describeMojoParameters", MojoDescriptor.class, StringBuilder.class); + describeMojoParameters.setAccessible(true); + describeMojoParameters.invoke(new DescribeMojo(), md, sb); assertEquals( " Available parameters:" + ls + ls @@ -113,11 +121,13 @@ public void testInvalidExpression() throws Exception { @Test public void testParsePluginInfoGAV() throws Throwable { DescribeMojo mojo = new DescribeMojo(); - writeDeclaredField(mojo, "groupId", "org.test", true); - writeDeclaredField(mojo, "artifactId", "test", true); - writeDeclaredField(mojo, "version", "1.0", true); + setFieldWithReflection(mojo, "groupId", "org.test"); + setFieldWithReflection(mojo, "artifactId", "test"); + setFieldWithReflection(mojo, "version", "1.0"); - PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo"); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod("parsePluginLookupInfo"); + describeMojoParameters.setAccessible(true); + PluginInfo pi = (PluginInfo) describeMojoParameters.invoke(mojo); assertEquals("org.test", pi.getGroupId()); assertEquals("test", pi.getArtifactId()); @@ -128,18 +138,20 @@ public void testParsePluginInfoGAV() throws Throwable { @Test public void testParsePluginInfoPluginPrefix() throws Throwable { DescribeMojo mojo = new DescribeMojo(); - writeDeclaredField(mojo, "plugin", "help", true); + setFieldWithReflection(mojo, "plugin", "help"); - PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo"); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod("parsePluginLookupInfo"); + describeMojoParameters.setAccessible(true); + PluginInfo pi = (PluginInfo) describeMojoParameters.invoke(mojo); assertNull(pi.getGroupId()); assertNull(pi.getArtifactId()); assertNull(pi.getVersion()); assertEquals("help", pi.getPrefix()); - writeDeclaredField(mojo, "plugin", "help2:::", true); + setFieldWithReflection(mojo, "plugin", "help2:::"); - pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo"); + pi = (PluginInfo) describeMojoParameters.invoke(mojo); assertEquals("help2", pi.getPrefix()); } @@ -147,9 +159,11 @@ public void testParsePluginInfoPluginPrefix() throws Throwable { @Test public void testParsePluginInfoPluginGA() throws Throwable { DescribeMojo mojo = new DescribeMojo(); - writeDeclaredField(mojo, "plugin", "org.test:test", true); + setFieldWithReflection(mojo, "plugin", "org.test:test"); - PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo"); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod("parsePluginLookupInfo"); + describeMojoParameters.setAccessible(true); + PluginInfo pi = (PluginInfo) describeMojoParameters.invoke(mojo); assertEquals("org.test", pi.getGroupId()); assertEquals("test", pi.getArtifactId()); @@ -160,9 +174,11 @@ public void testParsePluginInfoPluginGA() throws Throwable { @Test public void testParsePluginInfoPluginGAV() throws Throwable { DescribeMojo mojo = new DescribeMojo(); - writeDeclaredField(mojo, "plugin", "org.test:test:1.0", true); + setFieldWithReflection(mojo, "plugin", "org.test:test:1.0"); - PluginInfo pi = (PluginInfo) invokeMethod(mojo, true, "parsePluginLookupInfo"); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod("parsePluginLookupInfo"); + describeMojoParameters.setAccessible(true); + PluginInfo pi = (PluginInfo) describeMojoParameters.invoke(mojo); assertEquals("org.test", pi.getGroupId()); assertEquals("test", pi.getArtifactId()); @@ -173,9 +189,11 @@ public void testParsePluginInfoPluginGAV() throws Throwable { @Test public void testParsePluginInfoPluginIncorrect() throws Throwable { DescribeMojo mojo = new DescribeMojo(); - writeDeclaredField(mojo, "plugin", "org.test:test:1.0:invalid", true); + setFieldWithReflection(mojo, "plugin", "org.test:test:1.0:invalid"); try { - invokeMethod(mojo, "parsePluginLookupInfo"); + Method describeMojoParameters = DescribeMojo.class.getDeclaredMethod("parsePluginLookupInfo"); + describeMojoParameters.setAccessible(true); + describeMojoParameters.invoke(mojo); fail(); } catch (Exception e) { // expected @@ -201,18 +219,21 @@ public void testLookupPluginDescriptorPrefixWithVersion() throws Throwable { MavenPluginManager pluginManager = mock(MavenPluginManager.class); MavenSession session = mock(MavenSession.class); when(session.getRepositorySession()).thenReturn(mock(RepositorySystemSession.class)); - writeDeclaredField(mojo, "mojoDescriptorCreator", mojoDescriptorCreator, true); - writeDeclaredField(mojo, "pluginVersionResolver", pluginVersionResolver, true); - writeDeclaredField(mojo, "pluginManager", pluginManager, true); - writeField(mojo, "session", session, true); + setFieldWithReflection(mojo, "mojoDescriptorCreator", mojoDescriptorCreator); + setFieldWithReflection(mojo, "pluginVersionResolver", pluginVersionResolver); + setFieldWithReflection(mojo, "pluginManager", pluginManager); + setParentFieldWithReflection(mojo, "session", session); MavenProject mavenProject = new MavenProject(); mavenProject.setPluginArtifactRepositories(Collections.emptyList()); - writeField(mojo, "project", mavenProject, true); + setParentFieldWithReflection(mojo, "project", mavenProject); when(mojoDescriptorCreator.findPluginForPrefix("help", session)).thenReturn(plugin); when(pluginManager.getPluginDescriptor(any(Plugin.class), anyList(), any())) .thenReturn(pd); - PluginDescriptor returned = (PluginDescriptor) invokeMethod(mojo, true, "lookupPluginDescriptor", pi); + Method describeMojoParameters = + DescribeMojo.class.getDeclaredMethod("lookupPluginDescriptor", PluginInfo.class); + describeMojoParameters.setAccessible(true); + PluginDescriptor returned = (PluginDescriptor) describeMojoParameters.invoke(mojo, pi); assertEquals(pd, returned); @@ -245,20 +266,23 @@ public void testLookupPluginDescriptorPrefixWithoutVersion() throws Throwable { PluginVersionResult versionResult = mock(PluginVersionResult.class); MavenSession session = mock(MavenSession.class); when(session.getRepositorySession()).thenReturn(mock(RepositorySystemSession.class)); - writeDeclaredField(mojo, "mojoDescriptorCreator", mojoDescriptorCreator, true); - writeDeclaredField(mojo, "pluginVersionResolver", pluginVersionResolver, true); - writeDeclaredField(mojo, "pluginManager", pluginManager, true); - writeField(mojo, "session", session, true); + setFieldWithReflection(mojo, "mojoDescriptorCreator", mojoDescriptorCreator); + setFieldWithReflection(mojo, "pluginVersionResolver", pluginVersionResolver); + setFieldWithReflection(mojo, "pluginManager", pluginManager); + setParentFieldWithReflection(mojo, "session", session); MavenProject mavenProject = new MavenProject(); mavenProject.setPluginArtifactRepositories(Collections.emptyList()); - writeField(mojo, "project", mavenProject, true); + setParentFieldWithReflection(mojo, "project", 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), anyList(), any())) .thenReturn(pd); - PluginDescriptor returned = (PluginDescriptor) invokeMethod(mojo, true, "lookupPluginDescriptor", pi); + Method describeMojoParameters = + DescribeMojo.class.getDeclaredMethod("lookupPluginDescriptor", PluginInfo.class); + describeMojoParameters.setAccessible(true); + PluginDescriptor returned = (PluginDescriptor) describeMojoParameters.invoke(mojo, pi); assertEquals(pd, returned); verify(mojoDescriptorCreator).findPluginForPrefix("help", session); @@ -290,17 +314,20 @@ public void testLookupPluginDescriptorGAV() throws Throwable { MavenPluginManager pluginManager = mock(MavenPluginManager.class); MavenSession session = mock(MavenSession.class); when(session.getRepositorySession()).thenReturn(mock(RepositorySystemSession.class)); - writeDeclaredField(mojo, "mojoDescriptorCreator", mojoDescriptorCreator, true); - writeDeclaredField(mojo, "pluginVersionResolver", pluginVersionResolver, true); - writeDeclaredField(mojo, "pluginManager", pluginManager, true); - writeField(mojo, "session", session, true); + setFieldWithReflection(mojo, "mojoDescriptorCreator", mojoDescriptorCreator); + setFieldWithReflection(mojo, "pluginVersionResolver", pluginVersionResolver); + setFieldWithReflection(mojo, "pluginManager", pluginManager); + setParentFieldWithReflection(mojo, "session", session); MavenProject mavenProject = new MavenProject(); mavenProject.setPluginArtifactRepositories(Collections.emptyList()); - writeField(mojo, "project", mavenProject, true); + setParentFieldWithReflection(mojo, "project", mavenProject); when(pluginManager.getPluginDescriptor(any(Plugin.class), anyList(), any())) .thenReturn(pd); - PluginDescriptor returned = (PluginDescriptor) invokeMethod(mojo, true, "lookupPluginDescriptor", pi); + Method describeMojoParameters = + DescribeMojo.class.getDeclaredMethod("lookupPluginDescriptor", PluginInfo.class); + describeMojoParameters.setAccessible(true); + PluginDescriptor returned = (PluginDescriptor) describeMojoParameters.invoke(mojo, pi); assertEquals(pd, returned); @@ -320,7 +347,10 @@ public void testLookupPluginDescriptorGMissingA() { PluginInfo pi = new PluginInfo(); pi.setGroupId("org.test"); try { - invokeMethod(mojo, true, "lookupPluginDescriptor", pi); + Method describeMojoParameters = + DescribeMojo.class.getDeclaredMethod("lookupPluginDescriptor", PluginInfo.class); + describeMojoParameters.setAccessible(true); + PluginDescriptor returned = (PluginDescriptor) describeMojoParameters.invoke(mojo, pi); fail(); } catch (InvocationTargetException e) { assertTrue(e.getTargetException().getMessage().startsWith("You must specify either")); @@ -335,7 +365,10 @@ public void testLookupPluginDescriptorAMissingG() { PluginInfo pi = new PluginInfo(); pi.setArtifactId("test"); try { - invokeMethod(mojo, true, "lookupPluginDescriptor", pi); + Method describeMojoParameters = + DescribeMojo.class.getDeclaredMethod("lookupPluginDescriptor", PluginInfo.class); + describeMojoParameters.setAccessible(true); + PluginDescriptor returned = (PluginDescriptor) describeMojoParameters.invoke(mojo, pi); fail(); } catch (InvocationTargetException e) { assertTrue(e.getTargetException().getMessage().startsWith("You must specify either")); @@ -343,4 +376,21 @@ public void testLookupPluginDescriptorAMissingG() { fail(e.getMessage()); } } + + private static void setParentFieldWithReflection( + final DescribeMojo mojo, final String fieldName, final Object value) + throws NoSuchFieldException, IllegalAccessException { + final Field field = mojo.getClass().getSuperclass().getDeclaredField(fieldName); + field.setAccessible(true); + field.set(mojo, value); + field.setAccessible(false); + } + + private static void setFieldWithReflection(final Object mojo, final String fieldName, final Object value) + throws NoSuchFieldException, IllegalAccessException { + final Field field = mojo.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + field.set(mojo, value); + field.setAccessible(false); + } }