Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MCLEAN-106] Switch to junit 5 #27

Merged
merged 5 commits into from
Apr 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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