This is an automated email from the ASF dual-hosted git repository.
sjaranowski pushed a commit to branch maven-plugin-testing-3.x
in repository https://gitbox.apache.org/repos/asf/maven-plugin-testing.git
The following commit(s) were added to refs/heads/maven-plugin-testing-3.x by
this push:
new db20dc9 Nested tests with class level annotations
db20dc9 is described below
commit db20dc98c6b0c49305f1b0d4dc33669b90141b62
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Sun Jan 4 23:45:05 2026 +0100
Nested tests with class level annotations
fix for:
- Basedir
- MojoParameter
- MojoTest with realRepositorySession
---
.../maven/api/plugin/testing/MojoExtension.java | 10 +++-
.../plugin/testing/AnnotationLevelMojoTest.java | 66 +++++++++++++++++++++-
.../plugin/testing/SimpleResolveMojoTest.java | 14 ++++-
3 files changed, 84 insertions(+), 6 deletions(-)
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 f7e19be..fd6c959 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
@@ -171,6 +171,10 @@ public class MojoExtension extends PlexusExtension
implements ParameterResolver
Set<MojoParameter> mojoParameters = new LinkedHashSet<>();
+ extensionContext.getEnclosingTestClasses().forEach(testClass -> {
+
mojoParameters.addAll(Arrays.asList(testClass.getAnnotationsByType(MojoParameter.class)));
+ });
+
extensionContext
.getTestClass()
.map(c -> c.getAnnotationsByType(MojoParameter.class))
@@ -201,7 +205,8 @@ public class MojoExtension extends PlexusExtension
implements ParameterResolver
String basedir =
AnnotationSupport.findAnnotation(context.getElement().get(), Basedir.class)
.map(Basedir::value)
.orElseGet(() -> {
- return
AnnotationSupport.findAnnotation(context.getTestClass(), Basedir.class)
+ return AnnotationSupport.findAnnotation(
+ context.getRequiredTestClass(),
Basedir.class, context.getEnclosingTestClasses())
.map(Basedir::value)
.orElse(null);
});
@@ -518,7 +523,8 @@ public class MojoExtension extends PlexusExtension
implements ParameterResolver
}
private boolean isRealRepositorySessionNotRequired(ExtensionContext
context) {
- return !AnnotationSupport.findAnnotation(context.getTestClass(),
MojoTest.class)
+ return !AnnotationSupport.findAnnotation(
+ context.getRequiredTestClass(), MojoTest.class,
context.getEnclosingTestClasses())
.map(MojoTest::realRepositorySession)
.orElse(false);
}
diff --git
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/AnnotationLevelMojoTest.java
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/AnnotationLevelMojoTest.java
index d897c0c..a4ae93a 100644
---
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/AnnotationLevelMojoTest.java
+++
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/AnnotationLevelMojoTest.java
@@ -18,11 +18,14 @@
*/
package org.apache.maven.plugin.testing;
+import java.io.File;
+
import org.apache.maven.api.plugin.testing.Basedir;
import org.apache.maven.api.plugin.testing.InjectMojo;
import org.apache.maven.api.plugin.testing.MojoExtension;
import org.apache.maven.api.plugin.testing.MojoParameter;
import org.apache.maven.api.plugin.testing.MojoTest;
+import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -33,12 +36,14 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
@MojoParameter(name = "plain", value = "class-value")
class AnnotationLevelMojoTest {
+ private static final String FS = File.separator;
+
@Test
@InjectMojo(goal = "parameters")
void classLevelValues(ParametersMojo mojo) {
assertEquals("class-value", mojo.getPlain());
assertTrue(
- MojoExtension.getBasedir().endsWith("class-basedir"),
+ MojoExtension.getBasedir().endsWith(FS + "class-basedir"),
"Basedir value did not came from class annotation");
}
@@ -49,7 +54,7 @@ class AnnotationLevelMojoTest {
void methodLevelValues(ParametersMojo mojo) {
assertEquals("method-value", mojo.getPlain());
assertTrue(
- MojoExtension.getBasedir().endsWith("method-basedir"),
+ MojoExtension.getBasedir().endsWith(FS + "method-basedir"),
"Basedir value did not came from method annotation");
}
@@ -69,4 +74,61 @@ class AnnotationLevelMojoTest {
assertEquals("method-value", mojo.getPlain());
assertEquals("param-value", alternateMojo.getPlain());
}
+
+ @Nested
+ class NestedTest {
+ // all tests are duplicated from parent class
+
+ protected String nestedAnnotationValue() {
+ return "";
+ }
+
+ @Test
+ @InjectMojo(goal = "parameters")
+ void classLevelValues(ParametersMojo mojo) {
+ assertEquals(nestedAnnotationValue() + "class-value",
mojo.getPlain());
+ assertTrue(
+ MojoExtension.getBasedir().endsWith(FS +
nestedAnnotationValue() + "class-basedir"),
+ "Basedir value did not came from class annotation: " +
MojoExtension.getBasedir());
+ }
+
+ @Test
+ @InjectMojo(goal = "parameters")
+ @Basedir("method-basedir")
+ @MojoParameter(name = "plain", value = "method-value")
+ void methodLevelValues(ParametersMojo mojo) {
+ assertEquals("method-value", mojo.getPlain());
+ assertTrue(
+ MojoExtension.getBasedir().endsWith(FS + "method-basedir"),
+ "Basedir value did not came from method annotation");
+ }
+
+ @Test
+ void parameterLevelValues(
+ @InjectMojo(goal = "parameters") @MojoParameter(name =
"plain", value = "param-level-param-value")
+ ParametersMojo mojo) {
+ assertEquals("param-level-param-value", mojo.getPlain());
+ }
+
+ @Test
+ @MojoParameter(name = "plain", value = "method-value")
+ void mojoParameterOnMethod(
+ @InjectMojo(goal = "parameters") ParametersMojo mojo,
+ @InjectMojo(goal = "parameters") @MojoParameter(name =
"plain", value = "param-value")
+ ParametersMojo alternateMojo) {
+ assertEquals("method-value", mojo.getPlain());
+ assertEquals("param-value", alternateMojo.getPlain());
+ }
+ }
+
+ @Nested
+ @Basedir("nested-class-basedir")
+ @MojoParameter(name = "plain", value = "nested-class-value")
+ class NestedAnnotationLevelTest extends NestedTest {
+
+ @Override
+ protected String nestedAnnotationValue() {
+ return "nested-";
+ }
+ }
}
diff --git
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/SimpleResolveMojoTest.java
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/SimpleResolveMojoTest.java
index 9f69757..d5e9304 100644
---
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/SimpleResolveMojoTest.java
+++
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/SimpleResolveMojoTest.java
@@ -27,8 +27,8 @@ import org.apache.maven.api.plugin.testing.InjectMojo;
import org.apache.maven.api.plugin.testing.MojoParameter;
import org.apache.maven.api.plugin.testing.MojoTest;
import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.MojoExecutionException;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
@@ -62,8 +62,18 @@ class SimpleResolveMojoTest {
@Test
@InjectMojo(goal = "simple-resolve")
@MojoParameter(name = "artifact", value =
"org.apache.commons:commons-lang3:3.20.0")
- void artifactShouldBeResolved(SimpleResolveMojo mojo) throws
MojoExecutionException {
+ void artifactShouldBeResolved(SimpleResolveMojo mojo) {
assertDoesNotThrow(mojo::execute);
}
+
+ @Nested
+ class NestedTest {
+ @Test
+ @InjectMojo(goal = "simple-resolve")
+ @MojoParameter(name = "artifact", value =
"org.apache.commons:commons-lang3:3.20.0")
+ void artifactShouldBeResolved(SimpleResolveMojo mojo) {
+ assertDoesNotThrow(mojo::execute);
+ }
+ }
}
// END SNIPPET: resolve-mojo-test