From dffb6d4638b4ac7d6eeaa73a79a149d114840801 Mon Sep 17 00:00:00 2001 From: Slawomir Jaranowski Date: Sat, 3 Jan 2026 18:01:55 +0100 Subject: [PATCH] Set MavenProject.basedir early during mock creating --- .../api/plugin/testing/MojoExtension.java | 23 +++++++++++-------- .../testing/ProvidesInjectMojoTest.java | 10 ++++++++ 2 files changed, 23 insertions(+), 10 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..3f5e41f 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 @@ -349,6 +349,16 @@ private MavenProject mockMavenProject() { mavenProject.setBuild(build); mavenProject.addCompileSourceRoot(build.getSourceDirectory()); mavenProject.addTestCompileSourceRoot(build.getTestSourceDirectory()); + + try { + // there is no setter for basedir, so set it via reflection + setVariableValueToObject( + mavenProject, "basedir", Paths.get(getBasedir()).toFile()); + } catch (IllegalAccessException e) { + // should not happen + throw new RuntimeException(e); + } + return mavenProject; } @@ -463,20 +473,13 @@ protected Mojo lookupMojo( } if (mockingDetails(mavenProject).isMock()) { + File pomFile = Optional.ofNullable(pomPath).map(Path::toFile).orElse(null); if (mockingDetails(mavenProject).isSpy()) { - // there is no setter for basedir, so set it via reflection - setVariableValueToObject( - mavenProject, "basedir", Paths.get(getBasedir()).toFile()); - // we only set the pom file // setFile also change a basedir, so should not be used here - mavenProject.setPomFile( - Optional.ofNullable(pomPath).map(Path::toFile).orElse(null)); + mavenProject.setPomFile(pomFile); } else { - lenient() - .doReturn(new File(getTestBasedir(extensionContext))) - .when(mavenProject) - .getBasedir(); + lenient().doReturn(pomFile).when(mavenProject).getFile(); } } 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 6b0a468..2ddb393 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,13 +20,18 @@ import javax.inject.Inject; +import java.io.File; + import org.apache.maven.api.plugin.testing.InjectMojo; +import org.apache.maven.api.plugin.testing.MojoExtension; 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; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertSame; @@ -45,6 +50,11 @@ public class ProvidesInjectMojoTest { @Inject private MojoExecution mojoExecution; + @BeforeEach + void setup() { + assertEquals(new File(MojoExtension.getBasedir()), project.getBasedir()); + } + @Test @InjectMojo(pom = POM, goal = "test:test-plugin:0.0.1-SNAPSHOT:provides") public void bennShouldBeInjected(ProvidesInjectMojo mojo) {