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 268a033..4870938 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 @@ -51,6 +51,7 @@ import com.google.inject.internal.ProviderMethodsModule; import org.apache.maven.api.di.Provides; import org.apache.maven.execution.MavenSession; +import org.apache.maven.execution.scope.internal.MojoExecutionScope; import org.apache.maven.lifecycle.internal.MojoDescriptorCreator; import org.apache.maven.plugin.Mojo; import org.apache.maven.plugin.MojoExecution; @@ -156,14 +157,19 @@ public void beforeEach(ExtensionContext context) throws Exception { }); addMock(plexusContainer, Log.class, () -> new MojoLogWrapper(LoggerFactory.getLogger("anonymous"))); - addMock(plexusContainer, MavenProject.class, this::mockMavenProject); - addMock(plexusContainer, MojoExecution.class, this::mockMojoExecution); - + MavenProject mavenProject = addMock(plexusContainer, MavenProject.class, this::mockMavenProject); + MojoExecution mojoExecution = 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); + MojoExecutionScope executionScope = plexusContainer.lookup(MojoExecutionScope.class); + executionScope.enter(); + executionScope.seed(MavenProject.class, mavenProject); + executionScope.seed(MojoExecution.class, mojoExecution); + ((DefaultPlexusContainer) plexusContainer).addPlexusInjector(Collections.emptyList(), binder -> { binder.requestInjection(context.getRequiredTestInstance()); }); @@ -203,6 +209,9 @@ public void afterEach(ExtensionContext context) throws Exception { SessionScope sessionScope = getContainer(context).lookup(SessionScope.class); sessionScope.exit(); + MojoExecutionScope executionScope = getContainer(context).lookup(MojoExecutionScope.class); + executionScope.exit(); + super.afterEach(context); } 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 b9b7df9..e340e68 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 @@ -22,18 +22,22 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; public class ProvidesInjectMojo extends AbstractMojo { private final MavenSession session; private final MavenProject project; + private final MojoExecution mojoExecution; private final TestBean testBean; @Inject - public ProvidesInjectMojo(MavenSession session, MavenProject project, TestBean testBean) { + public ProvidesInjectMojo( + MavenSession session, MavenProject project, MojoExecution mojoExecution, TestBean testBean) { this.session = session; this.project = project; + this.mojoExecution = mojoExecution; this.testBean = testBean; } @@ -51,4 +55,16 @@ public MavenSession getSessionFromBean() { public MavenProject getProject() { return project; } + + public MavenProject getProjectFromBean() { + return testBean.getProject(); + } + + public MojoExecution getMojoExecution() { + return mojoExecution; + } + + public MojoExecution getMojoExecutionFromBean() { + return testBean.getMojoExecution(); + } } 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 03e5e8e..b03ca09 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 @@ -20,14 +20,13 @@ 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.plugin.MojoExecution; import org.apache.maven.project.MavenProject; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -42,13 +41,11 @@ public class ProvidesInjectMojoTest { @Inject private MavenSession session; - @Mock + @Inject private MavenProject project; - @Provides - public MavenProject mockMavenProject() { - return project; - } + @Inject + private MojoExecution mojoExecution; @Test @InjectMojo(pom = POM, goal = "test:test-plugin:0.0.1-SNAPSHOT:provides") @@ -56,6 +53,11 @@ public void bennShouldBeInjected(ProvidesInjectMojo mojo) { assertNotNull(mojo); assertSame(session, mojo.getSession()); assertSame(session, mojo.getSessionFromBean()); + assertSame(project, mojo.getProject()); + assertSame(project, mojo.getProjectFromBean()); + + assertSame(mojoExecution, mojo.getMojoExecution()); + assertSame(mojoExecution, mojo.getMojoExecutionFromBean()); } } 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 555dfd7..d3dbbcd 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 @@ -24,6 +24,7 @@ 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.plugin.MojoExecution; import org.apache.maven.project.MavenProject; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -47,6 +48,9 @@ class ProvidesInjectOverrideMojoTest { @Mock private MavenSession session; + @Mock + private MojoExecution mojoExecution; + @BeforeEach void setup() { when(session.getUserProperties()).thenReturn(new Properties()); @@ -63,6 +67,11 @@ public MavenSession mockMavenSession() { return session; } + @Provides + MojoExecution mockMojoExecution() { + return mojoExecution; + } + @Test @InjectMojo(pom = POM, goal = "test:test-plugin:0.0.1-SNAPSHOT:provides") public void bennShouldBeInjected(ProvidesInjectMojo mojo) { @@ -70,6 +79,11 @@ public void bennShouldBeInjected(ProvidesInjectMojo mojo) { // session provided by the @Provides method should be used assertSame(session, mojo.getSession()); assertSame(session, mojo.getSessionFromBean()); + assertSame(project, mojo.getProject()); + assertSame(project, mojo.getProjectFromBean()); + + assertSame(mojoExecution, mojo.getMojoExecution()); + assertSame(mojoExecution, mojo.getMojoExecutionFromBean()); } } diff --git a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java index ebd982b..ae73ebf 100644 --- a/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java +++ b/maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java @@ -24,18 +24,37 @@ import javax.inject.Singleton; import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.project.MavenProject; @Named @Singleton public class TestBean { private final Provider sessionProvider; + private final Provider projectProvider; + + private final Provider mojoExecutionProvider; + @Inject - public TestBean(Provider sessionProvider) { + public TestBean( + Provider sessionProvider, + Provider projectProvider, + Provider mojoExecutionProvider) { this.sessionProvider = sessionProvider; + this.projectProvider = projectProvider; + this.mojoExecutionProvider = mojoExecutionProvider; } public MavenSession getSession() { return sessionProvider.get(); } + + public MavenProject getProject() { + return projectProvider.get(); + } + + public MojoExecution getMojoExecution() { + return mojoExecutionProvider.get(); + } }