diff --git a/pom.xml b/pom.xml index cd63b9a9..73d8cba9 100644 --- a/pom.xml +++ b/pom.xml @@ -331,7 +331,8 @@ under the License. org.apache.maven.plugin-testing maven-plugin-testing-harness - 4.0.0-alpha-2 + 3.4.0 + test diff --git a/src/test/java/org/apache/maven/plugins/changes/ChangesValidatorMojoTest.java b/src/test/java/org/apache/maven/plugins/changes/ChangesValidatorMojoTest.java index 9603938c..7bc3030d 100644 --- a/src/test/java/org/apache/maven/plugins/changes/ChangesValidatorMojoTest.java +++ b/src/test/java/org/apache/maven/plugins/changes/ChangesValidatorMojoTest.java @@ -18,11 +18,10 @@ */ package org.apache.maven.plugins.changes; -import java.io.File; - +import org.apache.maven.api.plugin.testing.InjectMojo; +import org.apache.maven.api.plugin.testing.MojoParameter; +import org.apache.maven.api.plugin.testing.MojoTest; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.testing.AbstractMojoTestCase; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.fail; @@ -32,32 +31,24 @@ * @since 29 juil. 2008 * @version $Id$ */ -public class ChangesValidatorMojoTest extends AbstractMojoTestCase { - - protected ChangesValidatorMojo mojo; - - @BeforeEach - public void setUp() throws Exception { - super.setUp(); - File pom = new File(getBasedir(), "/src/test/unit/plugin-config.xml"); - mojo = lookupMojo("changes-validate", pom); - } +@MojoTest +public class ChangesValidatorMojoTest { + @InjectMojo(goal = "changes-validate", pom = "src/test/unit/plugin-config.xml") + @MojoParameter(name = "changesXsdVersion", value = "2.0.0") + @MojoParameter(name = "xmlPath", value = "src/test/unit/changes.xml") + @MojoParameter(name = "failOnError", value = "true") @Test - public void testValidationSuccess() throws Exception { - File changesXml = new File(getBasedir(), "/src/test/unit/changes.xml"); - setVariableValueToObject(mojo, "xmlPath", changesXml); - setVariableValueToObject(mojo, "changesXsdVersion", "2.0.0"); - setVariableValueToObject(mojo, "failOnError", Boolean.TRUE); + public void testValidationSuccess(ChangesValidatorMojo mojo) throws Exception { mojo.execute(); } + @InjectMojo(goal = "changes-validate", pom = "src/test/unit/plugin-config.xml") + @MojoParameter(name = "changesXsdVersion", value = "2.0.0") + @MojoParameter(name = "xmlPath", value = "src/test/unit/non-valid-changes.xml") + @MojoParameter(name = "failOnError", value = "true") @Test - public void testValidationFailedWithMojoFailure() throws Exception { - File changesXml = new File(getBasedir(), "/src/test/unit/non-valid-changes.xml"); - setVariableValueToObject(mojo, "xmlPath", changesXml); - setVariableValueToObject(mojo, "changesXsdVersion", "2.0.0"); - setVariableValueToObject(mojo, "failOnError", Boolean.TRUE); + public void testValidationFailedWithMojoFailure(ChangesValidatorMojo mojo) throws Exception { try { mojo.execute(); fail(" A MojoExecutionException should occur here. Changes file is not valid and failOnError is true "); @@ -66,12 +57,12 @@ public void testValidationFailedWithMojoFailure() throws Exception { } } + @InjectMojo(goal = "changes-validate", pom = "src/test/unit/plugin-config.xml") + @MojoParameter(name = "changesXsdVersion", value = "1.0.0") + @MojoParameter(name = "xmlPath", value = "src/test/unit/non-valid-changes.xml") + @MojoParameter(name = "failOnError", value = "false") @Test - public void testValidationFailedWithNoMojoFailure() throws Exception { - File changesXml = new File(getBasedir(), "/src/test/unit/non-valid-changes.xml"); - setVariableValueToObject(mojo, "xmlPath", changesXml); - setVariableValueToObject(mojo, "changesXsdVersion", "1.0.0"); - setVariableValueToObject(mojo, "failOnError", Boolean.FALSE); + public void testValidationFailedWithNoMojoFailure(ChangesValidatorMojo mojo) throws Exception { mojo.execute(); } } diff --git a/src/test/java/org/apache/maven/plugins/changes/announcement/AnnouncementMojoTest.java b/src/test/java/org/apache/maven/plugins/changes/announcement/AnnouncementMojoTest.java index 55b8bf09..a90bec28 100644 --- a/src/test/java/org/apache/maven/plugins/changes/announcement/AnnouncementMojoTest.java +++ b/src/test/java/org/apache/maven/plugins/changes/announcement/AnnouncementMojoTest.java @@ -19,75 +19,67 @@ package org.apache.maven.plugins.changes.announcement; import java.io.File; +import java.io.IOException; import java.nio.file.Files; -import org.apache.maven.plugin.testing.AbstractMojoTestCase; +import org.apache.maven.api.plugin.testing.InjectMojo; +import org.apache.maven.api.plugin.testing.MojoParameter; +import org.apache.maven.api.plugin.testing.MojoTest; import org.codehaus.plexus.util.FileUtils; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static org.apache.maven.api.plugin.testing.MojoExtension.getBasedir; +import static org.junit.jupiter.api.Assertions.assertTrue; + /** * @author Olivier Lamy * @version $Id$ */ -public class AnnouncementMojoTest extends AbstractMojoTestCase { - @BeforeEach - void setup() throws Exception { - super.setUp(); - } - +@MojoTest +public class AnnouncementMojoTest { + @InjectMojo(goal = "announcement-generate", pom = "src/test/unit/plugin-config.xml") + @MojoParameter(name = "xmlPath", value = "src/test/unit/announce-changes.xml") + @MojoParameter(name = "announcementDirectory", value = "target/test") + @MojoParameter(name = "version", value = "1.1") + @MojoParameter(name = "template", value = "announcement.vm") + @MojoParameter( + name = "templateDirectory", + value = "src/main/resources/org/apache/maven/plugins/changes/announcement/") + @MojoParameter(name = "introduction", value = "Nice library") @Test - public void testAnnounceGeneration() throws Exception { - File pom = new File(getBasedir(), "/src/test/unit/plugin-config.xml"); - AnnouncementMojo mojo = lookupMojo("announcement-generate", pom); - - setVariableValueToObject(mojo, "xmlPath", new File(getBasedir(), "/src/test/unit/announce-changes.xml")); - - File announcementDirectory = new File(getBasedir(), "target/test"); - - if (announcementDirectory.exists()) { - FileUtils.deleteDirectory(announcementDirectory); - announcementDirectory.mkdirs(); - } else { - announcementDirectory.mkdirs(); - } - setVariableValueToObject(mojo, "announcementDirectory", announcementDirectory); - setVariableValueToObject(mojo, "version", "1.1"); - setVariableValueToObject(mojo, "template", "announcement.vm"); - setVariableValueToObject( - mojo, "templateDirectory", "src/main/resources/org/apache/maven/plugins/changes/announcement/"); - setVariableValueToObject(mojo, "basedir", getBasedir()); - setVariableValueToObject(mojo, "introduction", "Nice library"); + public void testAnnounceGeneration(AnnouncementMojo mojo) throws Exception { + File announcementDirectory = prepareAnnouncementDirectory(); mojo.execute(); String result = new String(Files.readAllBytes(announcementDirectory.toPath().resolve("announcement.vm"))); assertContains("Nice library", result); - assertContains("Changes in this version include:", result); - assertContains("New features:", result); - assertContains("o Added additional documentation on how to configure the plugin.", result); - assertContains("Fixed Bugs:", result); - assertContains("o Enable retrieving component-specific issues. Issue: MCHANGES-88.", result); - assertContains("Changes:", result); - assertContains("o Handle different issue systems.", result); - assertContains("o Updated dependencies.", result); - assertContains("Removed:", result); - assertContains("o The element type \" link \" must be terminated by the matching end-tag.", result); - assertContains("Deleted the erroneous code.", result); } + private File prepareAnnouncementDirectory() throws IOException { + File announcementDirectory = new File(getBasedir(), "target/test"); + + if (announcementDirectory.exists()) { + FileUtils.deleteDirectory(announcementDirectory); + announcementDirectory.mkdirs(); + } else { + announcementDirectory.mkdirs(); + } + return announcementDirectory; + } + private static void assertContains(String content, String announce) { assertTrue(announce.indexOf(content) > 0); } diff --git a/src/test/java/org/apache/maven/plugins/changes/jira/JiraChangesReportTest.java b/src/test/java/org/apache/maven/plugins/changes/jira/JiraChangesReportTest.java index 9491f9a9..86567f3b 100644 --- a/src/test/java/org/apache/maven/plugins/changes/jira/JiraChangesReportTest.java +++ b/src/test/java/org/apache/maven/plugins/changes/jira/JiraChangesReportTest.java @@ -18,7 +18,9 @@ */ package org.apache.maven.plugins.changes.jira; -import org.apache.maven.plugin.testing.AbstractMojoTestCase; +import org.apache.maven.api.plugin.testing.InjectMojo; +import org.apache.maven.api.plugin.testing.MojoParameter; +import org.apache.maven.api.plugin.testing.MojoTest; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -29,8 +31,8 @@ * @author jrh3k5 * @since 2.8 */ -public class JiraChangesReportTest extends AbstractMojoTestCase { - private final JiraChangesReport mojo = new JiraChangesReport(null); +@MojoTest +public class JiraChangesReportTest { /** * If the mojo has been marked to be skipped, then it should indicate that the report cannot be generated. @@ -38,8 +40,9 @@ public class JiraChangesReportTest extends AbstractMojoTestCase { * @throws Exception If any errors occur during the test run. */ @Test - public void testCanGenerateReportSkipped() throws Exception { - setVariableValueToObject(mojo, "skip", Boolean.TRUE); + @InjectMojo(goal = "jira-changes") + @MojoParameter(name = "skip", value = "true") + public void testCanGenerateReportSkipped(JiraChangesReport mojo) { assertFalse(mojo.canGenerateReport()); } } diff --git a/src/test/java/org/apache/maven/plugins/changes/jira/JiraUnicodeTestCase.java b/src/test/java/org/apache/maven/plugins/changes/jira/JiraUnicodeTestCase.java index 5cef32ba..6b1003e7 100644 --- a/src/test/java/org/apache/maven/plugins/changes/jira/JiraUnicodeTestCase.java +++ b/src/test/java/org/apache/maven/plugins/changes/jira/JiraUnicodeTestCase.java @@ -18,25 +18,29 @@ */ package org.apache.maven.plugins.changes.jira; +import javax.inject.Inject; + import java.io.File; import java.util.Collections; -import java.util.List; import org.apache.commons.io.FileUtils; +import org.apache.maven.api.plugin.testing.InjectMojo; +import org.apache.maven.api.plugin.testing.MojoParameter; +import org.apache.maven.api.plugin.testing.MojoTest; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.execution.MavenSession; +import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.MojoExecution; -import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.apache.maven.plugins.changes.issues.Issue; import org.apache.maven.project.MavenProject; import org.eclipse.aether.DefaultRepositorySystemSession; -import org.eclipse.aether.RepositorySystem; -import org.eclipse.aether.repository.LocalRepository; import org.eclipse.aether.repository.RemoteRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -44,53 +48,66 @@ /** * @version $Id$ */ -public class JiraUnicodeTestCase extends AbstractMojoTestCase { +@MojoTest +public class JiraUnicodeTestCase { /* * Something in Doxia escapes all non-Ascii even when the charset is UTF-8. This test will fail if that ever * changes. */ private static final String TEST_TURTLES = "海龟一路下跌。"; + /** + * The project to test. + */ + @Inject + private MavenProject testMavenProject; + + @Inject + private MavenSession mavenSession; + + @Inject + private DefaultRepositorySystemSessionFactory repoSessionFactory; + + @Inject + private MojoExecution mojoExecution; + @BeforeEach public void setUp() throws Exception { - super.setUp(); - } + // prepare realistic repository session + ArtifactRepository localRepo = mock(ArtifactRepository.class); + when(localRepo.getBasedir()).thenReturn(new File(System.getProperty("localRepository")).getAbsolutePath()); - @Test - public void testUnicodeReport() throws Exception { + MavenExecutionRequest request = new DefaultMavenExecutionRequest(); + request.setLocalRepository(localRepo); - File pom = new File(getBasedir(), "/src/test/unit/jira-plugin-config.xml"); - assertNotNull(pom); - assertTrue(pom.exists()); + RemoteRepository centralRepo = + new RemoteRepository.Builder("central", "default", "https://repo.maven.apache.org/maven2").build(); - JiraChangesReport mojo = lookupMojo("jira-changes", pom); - MavenProject project = new JiraUnicodeTestProjectStub(); - MavenSession session = newMavenSession(project); - - RepositorySystem repositorySystem = lookup(RepositorySystem.class); + DefaultRepositorySystemSession systemSession = repoSessionFactory.newRepositorySession(request); + when(mavenSession.getRepositorySession()).thenReturn(systemSession); + when(testMavenProject.getRemoteProjectRepositories()).thenReturn(Collections.singletonList(centralRepo)); + when(mojoExecution.getPlugin()).thenReturn(new Plugin()); + } - DefaultRepositorySystemSession repositorySystemSession = - (DefaultRepositorySystemSession) session.getRepositorySession(); - repositorySystemSession.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager( - repositorySystemSession, new LocalRepository(System.getProperty("localRepository")))); + @InjectMojo(goal = "jira-changes", pom = "src/test/unit/jira-plugin-config.xml") + @MojoParameter(name = "siteDirectory", value = "non-existing") + @Test + public void testUnicodeReport(JiraChangesReport mojo) throws Exception { + RestJiraDownloader mock = mock(RestJiraDownloader.class); + when(mock.getIssueList()).thenReturn(Collections.singletonList(testIssue())); + mojo.setMockDownloader(mock); - // Test need to download a maven-fluido-skin if not present in local repo - List remoteRepositories = repositorySystem.newResolutionRepositories( - repositorySystemSession, - Collections.singletonList( - new RemoteRepository.Builder("central", "default", "https://repo.maven.apache.org/maven2") - .build())); + File outputDir = new File("target/jira-test-output"); + mojo.setReportOutputDirectory(outputDir); - setVariableValueToObject(mojo, "project", project); - setVariableValueToObject(mojo, "reactorProjects", Collections.singletonList(project)); - setVariableValueToObject(mojo, "repoSession", repositorySystemSession); - setVariableValueToObject(mojo, "remoteProjectRepositories", remoteRepositories); + mojo.execute(); - setVariableValueToObject(mojo, "siteDirectory", new File("non-existing")); - setVariableValueToObject(mojo, "mavenSession", session); - setVariableValueToObject(mojo, "mojoExecution", new MojoExecution(new Plugin(), "jira-changes", "default")); + String reportHtml = FileUtils.readFileToString(new File(outputDir, "jira-changes.html"), "utf-8"); + int turtleIndex = reportHtml.indexOf(TEST_TURTLES); + assertTrue(turtleIndex >= 0); + } - RestJiraDownloader mock = mock(RestJiraDownloader.class); + private Issue testIssue() { Issue issue = new Issue(); issue.setKey("PCSUNIT-2"); issue.setLink("http://pcsjira.slg.gr/browse/PCSUNIT-2"); @@ -98,15 +115,6 @@ public void testUnicodeReport() throws Exception { issue.setStatus("Closed"); issue.setResolution("Fixed"); issue.setAssignee("Nikolaos Stais"); - when(mock.getIssueList()).thenReturn(Collections.singletonList(issue)); - - mojo.setMockDownloader(mock); - File outputDir = new File("target/jira-test-output"); - outputDir.mkdirs(); - mojo.setReportOutputDirectory(outputDir); - mojo.execute(); - String reportHtml = FileUtils.readFileToString(new File(outputDir, "jira-changes.html"), "utf-8"); - int turtleIndex = reportHtml.indexOf(TEST_TURTLES); - assertTrue(turtleIndex >= 0); + return issue; } }