Skip to content

Commit

Permalink
[MCLEAN-106] Switch to junit 5 (#27)
Browse files Browse the repository at this point in the history
Co-authored-by: Slawomir Jaranowski <s.jaranowski@gmail.com>
  • Loading branch information
gnodet and slawekjaranowski committed Apr 14, 2024
1 parent 7c1593f commit d3b2800
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 135 deletions.
48 changes: 36 additions & 12 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,18 @@ under the License.
<version>${mavenVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${mavenVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.resolver</groupId>
<artifactId>maven-resolver-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
Expand All @@ -90,30 +102,42 @@ under the License.
<dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>3.3.0</version>
<version>4.0.0-alpha-2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-xml</artifactId>
<artifactId>plexus-testing</artifactId>
<version>1.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>${mavenVersion}</version>
<groupId>org.eclipse.sisu</groupId>
<artifactId>org.eclipse.sisu.plexus</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${mavenVersion}</version>
<scope>provided</scope>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.0</version>
<classifier>no_aop</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-xml</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-resolver-provider</artifactId>
<version>${mavenVersion}</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
203 changes: 80 additions & 123 deletions src/test/java/org/apache/maven/plugins/clean/CleanMojoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,64 +29,70 @@
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 <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
*/
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");
}

/**
* Tests the removal of files and nested directories
*
* @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"));
Expand All @@ -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"));
Expand All @@ -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
Expand All @@ -162,42 +152,20 @@ 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);
}

/**
* Tests the removal of a missing directory
*
* @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"));
Expand All @@ -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()) {
Expand All @@ -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);

Expand All @@ -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())
Expand All @@ -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);
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d3b2800

Please sign in to comment.