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 5df06f3 Add MavenSession to session scope
5df06f3 is described below
commit 5df06f366af162188dd86bb87492c739ffa55269
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Wed Oct 22 23:46:34 2025 +0200
Add MavenSession to session scope
- mocks will be created if not provided by test
---
maven-plugin-testing-harness/pom.xml | 9 ++++++
.../maven/api/plugin/testing/MojoExtension.java | 37 +++++++++++++++++++---
.../maven/plugin/testing/ProvidesInjectMojo.java | 8 ++++-
.../plugin/testing/ProvidesInjectMojoTest.java | 9 +++++-
.../testing/ProvidesInjectOverrideMojoTest.java | 1 +
.../{ProvidesInjectMojo.java => TestBean.java} | 27 ++++++----------
6 files changed, 68 insertions(+), 23 deletions(-)
diff --git a/maven-plugin-testing-harness/pom.xml
b/maven-plugin-testing-harness/pom.xml
index fc36aea..af46327 100644
--- a/maven-plugin-testing-harness/pom.xml
+++ b/maven-plugin-testing-harness/pom.xml
@@ -165,4 +165,13 @@ under the License.
<scope>test</scope>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.sisu</groupId>
+ <artifactId>sisu-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
</project>
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 bed529e..268a033 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
@@ -42,6 +42,7 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -61,6 +62,7 @@ import
org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugin.testing.MojoLogWrapper;
import org.apache.maven.project.MavenProject;
+import org.apache.maven.session.scope.internal.SessionScope;
import org.codehaus.plexus.DefaultPlexusContainer;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.component.configurator.BasicComponentConfigurator;
@@ -151,11 +153,19 @@ public class MojoExtension extends PlexusExtension
implements ParameterResolver
((DefaultPlexusContainer)
plexusContainer).addPlexusInjector(Collections.emptyList(), binder -> {
binder.install(ProviderMethodsModule.forObject(context.getRequiredTestInstance()));
binder.install(new
MavenProvidesModule(context.getRequiredTestInstance()));
+ });
+
+ addMock(plexusContainer, Log.class, () -> new
MojoLogWrapper(LoggerFactory.getLogger("anonymous")));
+ addMock(plexusContainer, MavenProject.class, this::mockMavenProject);
+ addMock(plexusContainer, MojoExecution.class, this::mockMojoExecution);
+
+ MavenSession mavenSession = addMock(plexusContainer,
MavenSession.class, this::mockMavenSession);
+ SessionScope sessionScope = plexusContainer.lookup(SessionScope.class);
+ sessionScope.enter();
+ sessionScope.seed(MavenSession.class, mavenSession);
+
+ ((DefaultPlexusContainer)
plexusContainer).addPlexusInjector(Collections.emptyList(), binder -> {
binder.requestInjection(context.getRequiredTestInstance());
- binder.bind(Log.class).toInstance(new
MojoLogWrapper(LoggerFactory.getLogger("anonymous")));
- binder.bind(MavenProject.class).toInstance(mockMavenProject());
- binder.bind(MavenSession.class).toInstance(mockMavenSession());
- binder.bind(MojoExecution.class).toInstance(mockMojoExecution());
});
Map<Object, Object> map =
plexusContainer.getContext().getContextData();
@@ -177,6 +187,25 @@ public class MojoExtension extends PlexusExtension
implements ParameterResolver
}
}
+ private <T> T addMock(PlexusContainer container, Class<T> role,
Supplier<T> supplier)
+ throws ComponentLookupException {
+ if (!container.hasComponent(role)) {
+ T mock = supplier.get();
+ container.addComponent(mock, role, "default");
+ return mock;
+ } else {
+ return container.lookup(role);
+ }
+ }
+
+ @Override
+ public void afterEach(ExtensionContext context) throws Exception {
+ SessionScope sessionScope =
getContainer(context).lookup(SessionScope.class);
+ sessionScope.exit();
+
+ super.afterEach(context);
+ }
+
/**
* Default MojoExecution mock
*
diff --git
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
index 887e6c6..b9b7df9 100644
---
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
+++
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
@@ -28,11 +28,13 @@ public class ProvidesInjectMojo extends AbstractMojo {
private final MavenSession session;
private final MavenProject project;
+ private final TestBean testBean;
@Inject
- public ProvidesInjectMojo(MavenSession session, MavenProject project) {
+ public ProvidesInjectMojo(MavenSession session, MavenProject project,
TestBean testBean) {
this.session = session;
this.project = project;
+ this.testBean = testBean;
}
@Override
@@ -42,6 +44,10 @@ public class ProvidesInjectMojo extends AbstractMojo {
return session;
}
+ public MavenSession getSessionFromBean() {
+ return testBean.getSession();
+ }
+
public MavenProject getProject() {
return project;
}
diff --git
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojoTest.java
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojoTest.java
index b5c1b24..03e5e8e 100644
---
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojoTest.java
+++
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojoTest.java
@@ -18,9 +18,12 @@
*/
package org.apache.maven.plugin.testing;
+import javax.inject.Inject;
+
import org.apache.maven.api.di.Provides;
import org.apache.maven.api.plugin.testing.InjectMojo;
import org.apache.maven.api.plugin.testing.MojoTest;
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -36,6 +39,9 @@ public class ProvidesInjectMojoTest {
private static final String POM = "<project>" + "</project>";
+ @Inject
+ private MavenSession session;
+
@Mock
private MavenProject project;
@@ -48,7 +54,8 @@ public class ProvidesInjectMojoTest {
@InjectMojo(pom = POM, goal = "test:test-plugin:0.0.1-SNAPSHOT:provides")
public void bennShouldBeInjected(ProvidesInjectMojo mojo) {
assertNotNull(mojo);
- assertNotNull(mojo.getSession());
+ assertSame(session, mojo.getSession());
+ assertSame(session, mojo.getSessionFromBean());
assertSame(project, mojo.getProject());
}
}
diff --git
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectOverrideMojoTest.java
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectOverrideMojoTest.java
index a10c7b2..555dfd7 100644
---
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectOverrideMojoTest.java
+++
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectOverrideMojoTest.java
@@ -69,6 +69,7 @@ class ProvidesInjectOverrideMojoTest {
assertNotNull(mojo);
// session provided by the @Provides method should be used
assertSame(session, mojo.getSession());
+ assertSame(session, mojo.getSessionFromBean());
assertSame(project, mojo.getProject());
}
}
diff --git
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java
similarity index 66%
copy from
maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
copy to
maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java
index 887e6c6..ebd982b 100644
---
a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java
+++
b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java
@@ -19,30 +19,23 @@
package org.apache.maven.plugin.testing;
import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Provider;
+import javax.inject.Singleton;
import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.project.MavenProject;
-public class ProvidesInjectMojo extends AbstractMojo {
-
- private final MavenSession session;
- private final MavenProject project;
+@Named
+@Singleton
+public class TestBean {
+ private final Provider<MavenSession> sessionProvider;
@Inject
- public ProvidesInjectMojo(MavenSession session, MavenProject project) {
- this.session = session;
- this.project = project;
+ public TestBean(Provider<MavenSession> sessionProvider) {
+ this.sessionProvider = sessionProvider;
}
- @Override
- public void execute() {}
-
public MavenSession getSession() {
- return session;
- }
-
- public MavenProject getProject() {
- return project;
+ return sessionProvider.get();
}
}