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();
     }
 }

Reply via email to