diff --git a/maven-plugin-testing-harness/pom.xml b/maven-plugin-testing-harness/pom.xml
index 3d7419b..e439c76 100644
--- a/maven-plugin-testing-harness/pom.xml
+++ b/maven-plugin-testing-harness/pom.xml
@@ -30,6 +30,18 @@ under the License.
Maven Plugin Testing Mechanism
The Maven Plugin Testing Harness provides mechanisms to manage tests on Mojo.
+
+
+
+ org.junit
+ junit-bom
+ 5.10.0
+ pom
+ import
+
+
+
+
@@ -70,14 +82,11 @@ under the License.
4.0.0
+
org.codehaus.plexus
plexus-xml
4.0.0
-
-
- commons-io
- commons-io
- 2.11.0
+ true
org.codehaus.plexus
@@ -89,16 +98,41 @@ under the License.
org.codehaus.plexus
plexus-testing
1.1.0
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+
+
+
+
+
+ com.google.guava
+ guava
+ 32.0.1-jre
junit
junit
4.13.2
+ true
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ true
org.mockito
mockito-core
4.6.1
+
+ org.slf4j
+ slf4j-simple
+ 1.7.36
+ test
+
diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
index f0a4f09..b217fab 100644
--- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
+++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java
@@ -29,12 +29,16 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -100,7 +104,18 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte
InjectMojo injectMojo = parameterContext
.findAnnotation(InjectMojo.class)
.orElseGet(() -> parameterContext.getDeclaringExecutable().getAnnotation(InjectMojo.class));
- List mojoParameters = parameterContext.findRepeatableAnnotations(MojoParameter.class);
+
+ Set mojoParameters =
+ new HashSet<>(parameterContext.findRepeatableAnnotations(MojoParameter.class));
+
+ Optional.ofNullable(parameterContext.getDeclaringExecutable().getAnnotation(MojoParameter.class))
+ .ifPresent(mojoParameters::add);
+
+ Optional.ofNullable(parameterContext.getDeclaringExecutable().getAnnotation(MojoParameters.class))
+ .map(MojoParameters::value)
+ .map(Arrays::asList)
+ .ifPresent(mojoParameters::addAll);
+
Class> holder = parameterContext.getTarget().get().getClass();
PluginDescriptor descriptor = extensionContext
.getStore(ExtensionContext.Namespace.GLOBAL)
@@ -113,6 +128,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte
@Override
public void beforeEach(ExtensionContext context) throws Exception {
+ // TODO provide protected setters in PlexusExtension
Field field = PlexusExtension.class.getDeclaredField("basedir");
field.setAccessible(true);
field.set(null, getBasedir());
@@ -152,7 +168,10 @@ protected String getPluginDescriptorLocation() {
}
private Mojo lookupMojo(
- Class> holder, InjectMojo injectMojo, List mojoParameters, PluginDescriptor descriptor)
+ Class> holder,
+ InjectMojo injectMojo,
+ Collection mojoParameters,
+ PluginDescriptor descriptor)
throws Exception {
String goal = injectMojo.goal();
String pom = injectMojo.pom();
diff --git a/maven-plugin-testing-harness/src/main/java/org/apache/maven/plugin/testing/junit5/MojoExtension.java b/maven-plugin-testing-harness/src/main/java/org/apache/maven/plugin/testing/junit5/MojoExtension.java
index f5d2d21..c7746c2 100644
--- a/maven-plugin-testing-harness/src/main/java/org/apache/maven/plugin/testing/junit5/MojoExtension.java
+++ b/maven-plugin-testing-harness/src/main/java/org/apache/maven/plugin/testing/junit5/MojoExtension.java
@@ -29,12 +29,17 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
+import java.util.Properties;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -74,6 +79,7 @@
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.ParameterResolver;
+import org.mockito.Mockito;
import org.slf4j.LoggerFactory;
/**
@@ -100,7 +106,18 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte
InjectMojo injectMojo = parameterContext
.findAnnotation(InjectMojo.class)
.orElseGet(() -> parameterContext.getDeclaringExecutable().getAnnotation(InjectMojo.class));
- List mojoParameters = parameterContext.findRepeatableAnnotations(MojoParameter.class);
+
+ Set mojoParameters =
+ new HashSet<>(parameterContext.findRepeatableAnnotations(MojoParameter.class));
+
+ Optional.ofNullable(parameterContext.getDeclaringExecutable().getAnnotation(MojoParameter.class))
+ .ifPresent(mojoParameters::add);
+
+ Optional.ofNullable(parameterContext.getDeclaringExecutable().getAnnotation(MojoParameters.class))
+ .map(MojoParameters::value)
+ .map(Arrays::asList)
+ .ifPresent(mojoParameters::addAll);
+
Class> holder = parameterContext.getTarget().get().getClass();
PluginDescriptor descriptor = extensionContext
.getStore(ExtensionContext.Namespace.GLOBAL)
@@ -113,6 +130,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte
@Override
public void beforeEach(ExtensionContext context) throws Exception {
+ // TODO provide protected setters in PlexusExtension
Field field = PlexusExtension.class.getDeclaredField("basedir");
field.setAccessible(true);
field.set(null, getBasedir());
@@ -126,6 +144,8 @@ public void beforeEach(ExtensionContext context) throws Exception {
binder.install(ProviderMethodsModule.forObject(context.getRequiredTestInstance()));
binder.requestInjection(context.getRequiredTestInstance());
binder.bind(Log.class).toInstance(new MojoLogWrapper(LoggerFactory.getLogger("anonymous")));
+ binder.bind(MavenSession.class).toInstance(mockMavenSession());
+ binder.bind(MojoExecution.class).toInstance(mockMojoExecution());
});
Map