diff --git a/pom.xml b/pom.xml index 283671c..49719c1 100644 --- a/pom.xml +++ b/pom.xml @@ -74,6 +74,18 @@ under the License. ${mavenVersion} provided + + org.apache.maven + maven-core + ${mavenVersion} + provided + + + org.apache.maven.resolver + maven-resolver-api + 1.1.1 + provided + org.codehaus.plexus plexus-utils @@ -90,30 +102,42 @@ under the License. org.apache.maven.plugin-testing maven-plugin-testing-harness - 3.3.0 + 4.0.0-alpha-2 + test + + + org.junit.jupiter + junit-jupiter-api + 5.9.3 test org.codehaus.plexus - plexus-xml + plexus-testing + 1.1.0 test - org.apache.maven - maven-compat - ${mavenVersion} + org.eclipse.sisu + org.eclipse.sisu.plexus test - org.apache.maven - maven-core - ${mavenVersion} - provided + com.google.inject + guice + 4.2.0 + no_aop + test - junit - junit - 4.13.2 + org.codehaus.plexus + plexus-xml + test + + + org.apache.maven + maven-resolver-provider + ${mavenVersion} test diff --git a/src/test/java/org/apache/maven/plugins/clean/CleanMojoTest.java b/src/test/java/org/apache/maven/plugins/clean/CleanMojoTest.java index aef5ce9..ba6d3df 100644 --- a/src/test/java/org/apache/maven/plugins/clean/CleanMojoTest.java +++ b/src/test/java/org/apache/maven/plugins/clean/CleanMojoTest.java @@ -29,46 +29,60 @@ import java.nio.file.Paths; import java.util.Collections; +import com.google.inject.Provides; +import com.google.inject.Singleton; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.DefaultMavenExecutionResult; +import org.apache.maven.execution.MavenExecutionRequest; +import org.apache.maven.execution.MavenExecutionResult; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoExecution; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.SystemStreamLog; -import org.apache.maven.plugin.testing.AbstractMojoTestCase; - -import static org.apache.commons.io.FileUtils.copyDirectory; +import org.apache.maven.plugin.testing.junit5.InjectMojo; +import org.apache.maven.plugin.testing.junit5.MojoTest; +import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.codehaus.plexus.PlexusContainer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.EnabledOnOs; +import org.junit.jupiter.api.condition.OS; + +import static org.apache.maven.plugin.testing.junit5.MojoExtension.setVariableValueToObject; +import static org.codehaus.plexus.testing.PlexusExtension.getBasedir; import static org.codehaus.plexus.util.IOUtil.copy; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * Test the clean mojo. * * @author Vincent Siveton */ -public class CleanMojoTest extends AbstractMojoTestCase { +@MojoTest +public class CleanMojoTest { /** * Tests the simple removal of directories * * @throws Exception in case of an error. */ - public void testBasicClean() throws Exception { - String pluginPom = getBasedir() + "/src/test/resources/unit/basic-clean-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/basic-clean-test"), - new File(getBasedir(), "target/test-classes/unit/basic-clean-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); - assertNotNull(mojo); - + @Test + @InjectMojo(goal = "clean", pom = "classpath:/unit/basic-clean-test/plugin-pom.xml") + public void testBasicClean(CleanMojo mojo) throws Exception { mojo.execute(); assertFalse( - "Directory exists", - checkExists(getBasedir() + "/target/test-classes/unit/" + "basic-clean-test/buildDirectory")); + checkExists(getBasedir() + "/target/test-classes/unit/" + "basic-clean-test/buildDirectory"), + "Directory exists"); assertFalse( - "Directory exists", - checkExists(getBasedir() + "/target/test-classes/unit/basic-clean-test/" + "buildOutputDirectory")); + checkExists(getBasedir() + "/target/test-classes/unit/basic-clean-test/" + "buildOutputDirectory"), + "Directory exists"); assertFalse( - "Directory exists", - checkExists(getBasedir() + "/target/test-classes/unit/basic-clean-test/" + "buildTestDirectory")); + checkExists(getBasedir() + "/target/test-classes/unit/basic-clean-test/" + "buildTestDirectory"), + "Directory exists"); } /** @@ -76,17 +90,9 @@ public void testBasicClean() throws Exception { * * @throws Exception in case of an error. */ - public void testCleanNestedStructure() throws Exception { - String pluginPom = getBasedir() + "/src/test/resources/unit/nested-clean-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/nested-clean-test"), - new File(getBasedir(), "target/test-classes/unit/nested-clean-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); - assertNotNull(mojo); - + @Test + @InjectMojo(goal = "clean", pom = "classpath:/unit/nested-clean-test/plugin-pom.xml") + public void testCleanNestedStructure(CleanMojo mojo) throws Exception { mojo.execute(); assertFalse(checkExists(getBasedir() + "/target/test-classes/unit/nested-clean-test/target")); @@ -100,17 +106,9 @@ public void testCleanNestedStructure() throws Exception { * * @throws Exception in case of an error. */ - public void testCleanEmptyDirectories() throws Exception { - String pluginPom = getBasedir() + "/src/test/resources/unit/empty-clean-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/empty-clean-test"), - new File(getBasedir(), "target/test-classes/unit/empty-clean-test")); - - CleanMojo mojo = (CleanMojo) lookupEmptyMojo("clean", pluginPom); - assertNotNull(mojo); - + @Test + @InjectMojo(goal = "clean", pom = "classpath:/unit/empty-clean-test/plugin-pom.xml") + public void testCleanEmptyDirectories(CleanMojo mojo) throws Exception { mojo.execute(); assertTrue(checkExists(getBasedir() + "/target/test-classes/unit/empty-clean-test/testDirectoryStructure")); @@ -127,17 +125,9 @@ public void testCleanEmptyDirectories() throws Exception { * * @throws Exception in case of an error. */ - public void testFilesetsClean() throws Exception { - String pluginPom = getBasedir() + "/src/test/resources/unit/fileset-clean-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/fileset-clean-test"), - new File(getBasedir(), "target/test-classes/unit/fileset-clean-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); - assertNotNull(mojo); - + @Test + @InjectMojo(goal = "clean", pom = "classpath:/unit/fileset-clean-test/plugin-pom.xml") + public void testFilesetsClean(CleanMojo mojo) throws Exception { mojo.execute(); // fileset 1 @@ -162,24 +152,10 @@ public void testFilesetsClean() throws Exception { * * @throws Exception in case of an error. */ - public void testCleanInvalidDirectory() throws Exception { - String pluginPom = getBasedir() + "/src/test/resources/unit/invalid-directory-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/invalid-directory-test"), - new File(getBasedir(), "target/test-classes/unit/invalid-directory-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); - assertNotNull(mojo); - - try { - mojo.execute(); - - fail("Should fail to delete a file treated as a directory"); - } catch (MojoExecutionException expected) { - assertTrue(true); - } + @Test + @InjectMojo(goal = "clean", pom = "classpath:/unit/invalid-directory-test/plugin-pom.xml") + public void testCleanInvalidDirectory(CleanMojo mojo) throws Exception { + assertThrows(MojoExecutionException.class, mojo::execute); } /** @@ -187,17 +163,9 @@ public void testCleanInvalidDirectory() throws Exception { * * @throws Exception in case of an error. */ - public void testMissingDirectory() throws Exception { - String pluginPom = getBasedir() + "/src/test/resources/unit/missing-directory-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/missing-directory-test"), - new File(getBasedir(), "target/test-classes/unit/missing-directory-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); - assertNotNull(mojo); - + @Test + @InjectMojo(goal = "clean", pom = "classpath:/unit/missing-directory-test/plugin-pom.xml") + public void testMissingDirectory(CleanMojo mojo) throws Exception { mojo.execute(); assertFalse(checkExists(getBasedir() + "/target/test-classes/unit/missing-directory-test/does-not-exist")); @@ -211,22 +179,10 @@ public void testMissingDirectory() throws Exception { * * @throws Exception in case of an error. */ - public void testCleanLockedFile() throws Exception { - if (!System.getProperty("os.name").toLowerCase().contains("windows")) { - assertTrue("Ignored this test on non Windows based systems", true); - return; - } - - String pluginPom = getBasedir() + "/src/test/resources/unit/locked-file-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/locked-file-test"), - new File(getBasedir(), "target/test-classes/unit/locked-file-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); - assertNotNull(mojo); - + @Test + @EnabledOnOs(OS.WINDOWS) + @InjectMojo(goal = "clean", pom = "classpath:/unit/locked-file-test/plugin-pom.xml") + public void testCleanLockedFile(CleanMojo mojo) throws Exception { File f = new File(getBasedir(), "target/test-classes/unit/locked-file-test/buildDirectory/file.txt"); try (FileChannel channel = new RandomAccessFile(f, "rw").getChannel(); FileLock ignored = channel.lock()) { @@ -245,20 +201,10 @@ public void testCleanLockedFile() throws Exception { * * @throws Exception in case of an error. */ - public void testCleanLockedFileWithNoError() throws Exception { - if (!System.getProperty("os.name").toLowerCase().contains("windows")) { - assertTrue("Ignore this test on non Windows based systems", true); - return; - } - - String pluginPom = getBasedir() + "/src/test/resources/unit/locked-file-test/plugin-pom.xml"; - - // safety - copyDirectory( - new File(getBasedir(), "src/test/resources/unit/locked-file-test"), - new File(getBasedir(), "target/test-classes/unit/locked-file-test")); - - CleanMojo mojo = (CleanMojo) lookupMojo("clean", pluginPom); + @Test + @EnabledOnOs(OS.WINDOWS) + @InjectMojo(goal = "clean", pom = "classpath:/unit/locked-file-test/plugin-pom.xml") + public void testCleanLockedFileWithNoError(CleanMojo mojo) throws Exception { setVariableValueToObject(mojo, "failOnError", Boolean.FALSE); assertNotNull(mojo); @@ -277,12 +223,9 @@ public void testCleanLockedFileWithNoError() throws Exception { * * @throws Exception */ + @Test + @EnabledOnOs(OS.WINDOWS) public void testFollowLinksWithWindowsJunction() throws Exception { - if (!System.getProperty("os.name").toLowerCase().contains("windows")) { - assertTrue("Ignore this test on non Windows based systems", true); - return; - } - testSymlink((link, target) -> { Process process = new ProcessBuilder() .directory(link.getParent().toFile()) @@ -303,12 +246,9 @@ public void testFollowLinksWithWindowsJunction() throws Exception { * * @throws Exception */ + @Test + @DisabledOnOs(OS.WINDOWS) public void testFollowLinksWithSymLinkOnPosix() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - assertTrue("Ignore this test on Windows based systems", true); - return; - } - testSymlink((link, target) -> { try { Files.createSymbolicLink(link, target); @@ -354,6 +294,23 @@ private void testSymlink(LinkCreator linkCreator) throws Exception { assertFalse(Files.exists(dirWithLnk)); } + @Provides + @Singleton + @SuppressWarnings("unused") + private MavenSession createSession(PlexusContainer container) { + MavenExecutionRequest request = new DefaultMavenExecutionRequest(); + MavenExecutionResult result = new DefaultMavenExecutionResult(); + MavenSession session = new MavenSession(container, MavenRepositorySystemUtils.newSession(), request, result); + return session; + } + + @Provides + @Singleton + @SuppressWarnings("unused") + private MojoExecution createMojoExecution() { + return new MojoExecution(null); + } + /** * @param dir a dir or a file * @return true if a file/dir exists, false otherwise