Skip to content

Commit 1aea26e

Browse files
Add MavenProject, MojoExecution to session scope
1 parent 9db988a commit 1aea26e

File tree

5 files changed

+69
-12
lines changed

5 files changed

+69
-12
lines changed

maven-plugin-testing-harness/src/main/java/org/apache/maven/api/plugin/testing/MojoExtension.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import com.google.inject.internal.ProviderMethodsModule;
5252
import org.apache.maven.api.di.Provides;
5353
import org.apache.maven.execution.MavenSession;
54+
import org.apache.maven.execution.scope.internal.MojoExecutionScope;
5455
import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
5556
import org.apache.maven.plugin.Mojo;
5657
import org.apache.maven.plugin.MojoExecution;
@@ -156,14 +157,19 @@ public void beforeEach(ExtensionContext context) throws Exception {
156157
});
157158

158159
addMock(plexusContainer, Log.class, () -> new MojoLogWrapper(LoggerFactory.getLogger("anonymous")));
159-
addMock(plexusContainer, MavenProject.class, this::mockMavenProject);
160-
addMock(plexusContainer, MojoExecution.class, this::mockMojoExecution);
161-
160+
MavenProject mavenProject = addMock(plexusContainer, MavenProject.class, this::mockMavenProject);
161+
MojoExecution mojoExecution = addMock(plexusContainer, MojoExecution.class, this::mockMojoExecution);
162162
MavenSession mavenSession = addMock(plexusContainer, MavenSession.class, this::mockMavenSession);
163+
163164
SessionScope sessionScope = plexusContainer.lookup(SessionScope.class);
164165
sessionScope.enter();
165166
sessionScope.seed(MavenSession.class, mavenSession);
166167

168+
MojoExecutionScope executionScope = plexusContainer.lookup(MojoExecutionScope.class);
169+
executionScope.enter();
170+
executionScope.seed(MavenProject.class, mavenProject);
171+
executionScope.seed(MojoExecution.class, mojoExecution);
172+
167173
((DefaultPlexusContainer) plexusContainer).addPlexusInjector(Collections.emptyList(), binder -> {
168174
binder.requestInjection(context.getRequiredTestInstance());
169175
});
@@ -203,6 +209,9 @@ public void afterEach(ExtensionContext context) throws Exception {
203209
SessionScope sessionScope = getContainer(context).lookup(SessionScope.class);
204210
sessionScope.exit();
205211

212+
MojoExecutionScope executionScope = getContainer(context).lookup(MojoExecutionScope.class);
213+
executionScope.exit();
214+
206215
super.afterEach(context);
207216
}
208217

maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojo.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,21 @@
2222

2323
import org.apache.maven.execution.MavenSession;
2424
import org.apache.maven.plugin.AbstractMojo;
25+
import org.apache.maven.plugin.MojoExecution;
2526
import org.apache.maven.project.MavenProject;
2627

2728
public class ProvidesInjectMojo extends AbstractMojo {
2829

2930
private final MavenSession session;
3031
private final MavenProject project;
32+
private final MojoExecution mojoExecution;
3133
private final TestBean testBean;
3234

3335
@Inject
34-
public ProvidesInjectMojo(MavenSession session, MavenProject project, TestBean testBean) {
36+
public ProvidesInjectMojo(MavenSession session, MavenProject project, MojoExecution mojoExecution, TestBean testBean) {
3537
this.session = session;
3638
this.project = project;
39+
this.mojoExecution = mojoExecution;
3740
this.testBean = testBean;
3841
}
3942

@@ -51,4 +54,16 @@ public MavenSession getSessionFromBean() {
5154
public MavenProject getProject() {
5255
return project;
5356
}
57+
58+
public MavenProject getProjectFromBean() {
59+
return testBean.getProject();
60+
}
61+
62+
public MojoExecution getMojoExecution() {
63+
return mojoExecution;
64+
}
65+
66+
public MojoExecution getMojoExecutionFromBean() {
67+
return testBean.getMojoExecution();
68+
}
5469
}

maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectMojoTest.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@
2020

2121
import javax.inject.Inject;
2222

23-
import org.apache.maven.api.di.Provides;
2423
import org.apache.maven.api.plugin.testing.InjectMojo;
2524
import org.apache.maven.api.plugin.testing.MojoTest;
2625
import org.apache.maven.execution.MavenSession;
26+
import org.apache.maven.plugin.MojoExecution;
2727
import org.apache.maven.project.MavenProject;
2828
import org.junit.jupiter.api.Test;
2929
import org.junit.jupiter.api.extension.ExtendWith;
30-
import org.mockito.Mock;
3130
import org.mockito.junit.jupiter.MockitoExtension;
3231

3332
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -42,20 +41,23 @@ public class ProvidesInjectMojoTest {
4241
@Inject
4342
private MavenSession session;
4443

45-
@Mock
44+
@Inject
4645
private MavenProject project;
4746

48-
@Provides
49-
public MavenProject mockMavenProject() {
50-
return project;
51-
}
47+
@Inject
48+
private MojoExecution mojoExecution;
5249

5350
@Test
5451
@InjectMojo(pom = POM, goal = "test:test-plugin:0.0.1-SNAPSHOT:provides")
5552
public void bennShouldBeInjected(ProvidesInjectMojo mojo) {
5653
assertNotNull(mojo);
5754
assertSame(session, mojo.getSession());
5855
assertSame(session, mojo.getSessionFromBean());
56+
5957
assertSame(project, mojo.getProject());
58+
assertSame(project, mojo.getProjectFromBean());
59+
60+
assertSame(mojoExecution, mojo.getMojoExecution());
61+
assertSame(mojoExecution, mojo.getMojoExecutionFromBean());
6062
}
6163
}

maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/ProvidesInjectOverrideMojoTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.maven.api.plugin.testing.InjectMojo;
2525
import org.apache.maven.api.plugin.testing.MojoTest;
2626
import org.apache.maven.execution.MavenSession;
27+
import org.apache.maven.plugin.MojoExecution;
2728
import org.apache.maven.project.MavenProject;
2829
import org.junit.jupiter.api.BeforeEach;
2930
import org.junit.jupiter.api.Test;
@@ -47,6 +48,9 @@ class ProvidesInjectOverrideMojoTest {
4748
@Mock
4849
private MavenSession session;
4950

51+
@Mock
52+
private MojoExecution mojoExecution;
53+
5054
@BeforeEach
5155
void setup() {
5256
when(session.getUserProperties()).thenReturn(new Properties());
@@ -63,13 +67,23 @@ public MavenSession mockMavenSession() {
6367
return session;
6468
}
6569

70+
@Provides
71+
MojoExecution mockMojoExecution() {
72+
return mojoExecution;
73+
}
74+
6675
@Test
6776
@InjectMojo(pom = POM, goal = "test:test-plugin:0.0.1-SNAPSHOT:provides")
6877
public void bennShouldBeInjected(ProvidesInjectMojo mojo) {
6978
assertNotNull(mojo);
7079
// session provided by the @Provides method should be used
7180
assertSame(session, mojo.getSession());
7281
assertSame(session, mojo.getSessionFromBean());
82+
7383
assertSame(project, mojo.getProject());
84+
assertSame(project, mojo.getProjectFromBean());
85+
86+
assertSame(mojoExecution, mojo.getMojoExecution());
87+
assertSame(mojoExecution, mojo.getMojoExecutionFromBean());
7488
}
7589
}

maven-plugin-testing-harness/src/test/java/org/apache/maven/plugin/testing/TestBean.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,35 @@
2424
import javax.inject.Singleton;
2525

2626
import org.apache.maven.execution.MavenSession;
27+
import org.apache.maven.plugin.MojoExecution;
28+
import org.apache.maven.project.MavenProject;
2729

2830
@Named
2931
@Singleton
3032
public class TestBean {
3133
private final Provider<MavenSession> sessionProvider;
3234

35+
private final Provider<MavenProject> projectProvider;
36+
37+
private final Provider<MojoExecution> mojoExecutionProvider;
38+
3339
@Inject
34-
public TestBean(Provider<MavenSession> sessionProvider) {
40+
public TestBean(Provider<MavenSession> sessionProvider, Provider<MavenProject> projectProvider,
41+
Provider<MojoExecution> mojoExecutionProvider) {
3542
this.sessionProvider = sessionProvider;
43+
this.projectProvider = projectProvider;
44+
this.mojoExecutionProvider = mojoExecutionProvider;
3645
}
3746

3847
public MavenSession getSession() {
3948
return sessionProvider.get();
4049
}
50+
51+
public MavenProject getProject() {
52+
return projectProvider.get();
53+
}
54+
55+
public MojoExecution getMojoExecution() {
56+
return mojoExecutionProvider.get();
57+
}
4158
}

0 commit comments

Comments
 (0)