Skip to content

Commit

Permalink
Dynamically calculate xrefTestLocation
Browse files Browse the repository at this point in the history
  • Loading branch information
michael-o committed Dec 14, 2023
1 parent b1a7b09 commit 84e60c7
Show file tree
Hide file tree
Showing 18 changed files with 276 additions and 44 deletions.
Expand Up @@ -25,13 +25,15 @@
import java.net.URLClassLoader;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.Reporting;
import org.apache.maven.plugin.surefire.log.api.ConsoleLogger;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
Expand Down Expand Up @@ -77,16 +79,19 @@ public abstract class AbstractSurefireReport extends AbstractMavenReport {
private File reportsDirectory;

/**
* Location of the Xrefs to link.
* Link the violation line numbers to the (Test) Source XRef. Links will be created automatically if the JXR plugin is
* being used.
*/
@Parameter(defaultValue = "${project.reporting.outputDirectory}/xref-test")
private File xrefLocation;
@Parameter(property = "linkXRef", defaultValue = "true")
private boolean linkXRef;

/**
* Whether to link the XRef if found.
* Location where Test Source XRef is generated for this project.
* <br>
* <strong>Default</strong>: {@link #getReportOutputDirectory()} + {@code /xref-test}
*/
@Parameter(defaultValue = "true", property = "linkXRef")
private boolean linkXRef;
@Parameter
private File xrefTestLocation;

/**
* Whether to build an aggregated report at the root, or build individual reports.
Expand Down Expand Up @@ -149,7 +154,7 @@ public void executeReport(Locale locale) {
locale,
getConsoleLogger(),
getReportsDirectories(),
determineXrefLocation(),
constructXrefTestLocation(),
showSuccess);
r.render();
}
Expand Down Expand Up @@ -251,25 +256,27 @@ private List<MavenProject> getProjectsWithoutRoot() {
return result;
}

private String determineXrefLocation() {
private String constructXrefTestLocation() {
String location = null;

if (linkXRef) {
File xrefTestLocation = getXrefTestLocation();

String relativePath = PathTool.getRelativePath(
getReportOutputDirectory().getAbsolutePath(), xrefLocation.getAbsolutePath());
getReportOutputDirectory().getAbsolutePath(), xrefTestLocation.getAbsolutePath());
if (relativePath == null || relativePath.isEmpty()) {
relativePath = ".";
}
relativePath = relativePath + "/" + xrefLocation.getName();
if (xrefLocation.exists()) {
relativePath = relativePath + "/" + xrefTestLocation.getName();
if (xrefTestLocation.exists()) {
// XRef was already generated by manual execution of a lifecycle binding
location = relativePath;
} else {
// Not yet generated - check if the report is on its way
for (Object o : project.getReportPlugins()) {
ReportPlugin report = (ReportPlugin) o;

String artifactId = report.getArtifactId();
Reporting reporting = project.getModel().getReporting();
List<ReportPlugin> reportPlugins =
reporting != null ? reporting.getPlugins() : Collections.<ReportPlugin>emptyList();
for (ReportPlugin plugin : reportPlugins) {
String artifactId = plugin.getArtifactId();
if ("maven-jxr-plugin".equals(artifactId) || "jxr-maven-plugin".equals(artifactId)) {
location = relativePath;
}
Expand All @@ -283,6 +290,10 @@ private String determineXrefLocation() {
return location;
}

private File getXrefTestLocation() {
return xrefTestLocation != null ? xrefTestLocation : new File(getReportOutputDirectory(), "xref-test");
}

/**
* @param locale The locale
* @param key The key to search for
Expand Down
Expand Up @@ -90,7 +90,7 @@ public void testBasicSurefireReport() throws Exception {
File outputDir = (File) getVariableValueFromObject(mojo, "outputDirectory");
boolean showSuccess = (Boolean) getVariableValueFromObject(mojo, "showSuccess");
File reportsDir = (File) getVariableValueFromObject(mojo, "reportsDirectory");
File xrefLocation = (File) getVariableValueFromObject(mojo, "xrefLocation");
File xrefTestLocation = (File) getVariableValueFromObject(mojo, "xrefTestLocation");
boolean linkXRef = (Boolean) getVariableValueFromObject(mojo, "linkXRef");

assertEquals(new File(getBasedir() + "/target/site/unit/basic-surefire-report-test"), outputDir);
Expand All @@ -101,7 +101,7 @@ public void testBasicSurefireReport() throws Exception {
reportsDir.getAbsolutePath());
assertEquals(
new File(getBasedir() + "/target/site/unit/basic-surefire-report-test/xref-test").getAbsolutePath(),
xrefLocation.getAbsolutePath());
xrefTestLocation.getAbsolutePath());
assertTrue(linkXRef);

mojo.execute();
Expand Down
Expand Up @@ -18,7 +18,40 @@
*/
package org.apache.maven.plugins.surefire.report.stubs;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Model;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;

public class EnclosedStub extends SurefireReportMavenProjectStub {
private List<ReportPlugin> reportPlugins = new ArrayList<>();

public EnclosedStub() {
MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model = null;

try (InputStream is = new FileInputStream(getFile())) {
model = pomReader.read(is);
setModel(model);
} catch (Exception e) {
}

setReportPlugins(model.getReporting().getPlugins());
}

public void setReportPlugins(List<ReportPlugin> plugins) {
this.reportPlugins = plugins;
}

/** {@inheritDoc} */
@Override
public List<ReportPlugin> getReportPlugins() {
return reportPlugins;
}

@Override
protected String getProjectDirName() {
Expand Down
Expand Up @@ -18,7 +18,40 @@
*/
package org.apache.maven.plugins.surefire.report.stubs;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Model;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;

public class EnclosedTrimStackTraceStub extends SurefireReportMavenProjectStub {
private List<ReportPlugin> reportPlugins = new ArrayList<>();

public EnclosedTrimStackTraceStub() {
MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model = null;

try (InputStream is = new FileInputStream(getFile())) {
model = pomReader.read(is);
setModel(model);
} catch (Exception e) {
}

setReportPlugins(model.getReporting().getPlugins());
}

public void setReportPlugins(List<ReportPlugin> plugins) {
this.reportPlugins = plugins;
}

/** {@inheritDoc} */
@Override
public List<ReportPlugin> getReportPlugins() {
return reportPlugins;
}

@Override
protected String getProjectDirName() {
Expand Down
Expand Up @@ -18,7 +18,40 @@
*/
package org.apache.maven.plugins.surefire.report.stubs;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Model;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;

public class NestedClassStub extends SurefireReportMavenProjectStub {
private List<ReportPlugin> reportPlugins = new ArrayList<>();

public NestedClassStub() {
MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model = null;

try (InputStream is = new FileInputStream(getFile())) {
model = pomReader.read(is);
setModel(model);
} catch (Exception e) {
}

setReportPlugins(model.getReporting().getPlugins());
}

public void setReportPlugins(List<ReportPlugin> plugins) {
this.reportPlugins = plugins;
}

/** {@inheritDoc} */
@Override
public List<ReportPlugin> getReportPlugins() {
return reportPlugins;
}

@Override
protected String getProjectDirName() {
Expand Down
Expand Up @@ -18,7 +18,40 @@
*/
package org.apache.maven.plugins.surefire.report.stubs;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Model;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;

public class NestedClassTrimStackTraceStub extends SurefireReportMavenProjectStub {
private List<ReportPlugin> reportPlugins = new ArrayList<>();

public NestedClassTrimStackTraceStub() {
MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model = null;

try (InputStream is = new FileInputStream(getFile())) {
model = pomReader.read(is);
setModel(model);
} catch (Exception e) {
}

setReportPlugins(model.getReporting().getPlugins());
}

public void setReportPlugins(List<ReportPlugin> plugins) {
this.reportPlugins = plugins;
}

/** {@inheritDoc} */
@Override
public List<ReportPlugin> getReportPlugins() {
return reportPlugins;
}

@Override
protected String getProjectDirName() {
Expand Down
Expand Up @@ -18,7 +18,40 @@
*/
package org.apache.maven.plugins.surefire.report.stubs;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Model;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;

public class SingleErrorStub extends SurefireReportMavenProjectStub {
private List<ReportPlugin> reportPlugins = new ArrayList<>();

public SingleErrorStub() {
MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model = null;

try (InputStream is = new FileInputStream(getFile())) {
model = pomReader.read(is);
setModel(model);
} catch (Exception e) {
}

setReportPlugins(model.getReporting().getPlugins());
}

public void setReportPlugins(List<ReportPlugin> plugins) {
this.reportPlugins = plugins;
}

/** {@inheritDoc} */
@Override
public List<ReportPlugin> getReportPlugins() {
return reportPlugins;
}

@Override
protected String getProjectDirName() {
Expand Down
Expand Up @@ -47,22 +47,6 @@ public File getFile() {
return new File(getBasedir(), "plugin-config.xml");
}

/**
* {@inheritDoc}
*/
@Override
public List<ReportPlugin> getReportPlugins() {
Reporting reporting = new Reporting();

ReportPlugin reportPlugin = new ReportPlugin();
reportPlugin.setGroupId("org.apache.maven.plugins");
reportPlugin.setArtifactId("maven-jxr-plugin");
reportPlugin.setVersion("2.0-SNAPSHOT");
reporting.addPlugin(reportPlugin);

return reporting.getPlugins();
}

@Override
public List<ArtifactRepository> getRemoteArtifactRepositories() {
ArtifactRepository repository = new MavenArtifactRepository(
Expand Down
Expand Up @@ -29,7 +29,7 @@
<reportsDirectory>${basedir}/src/test/resources/unit/basic-surefire-report-anchor-test-cases/surefire-reports
</reportsDirectory>
<outputName>surefire-report</outputName>
<xrefLocation>${basedir}/target/site/unit/basic-surefire-report-anchor-test-cases/xref-test</xrefLocation>
<xrefTestLocation>${basedir}/target/site/unit/basic-surefire-report-anchor-test-cases/xref-test</xrefTestLocation>
</configuration>
</plugin>
</plugins>
Expand Down
Expand Up @@ -29,10 +29,18 @@
<reportsDirectory>${basedir}/src/test/resources/unit/basic-surefire-report-linkxref-false/surefire-reports
</reportsDirectory>
<outputName>surefire-report</outputName>
<xrefLocation>${basedir}/target/site/unit/basic-surefire-report-linkxref-false/xref-test</xrefLocation>
<xrefTestLocation>${basedir}/target/site/unit/basic-surefire-report-linkxref-false/xref-test</xrefTestLocation>
<linkXRef>false</linkXRef>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
Expand Up @@ -29,10 +29,18 @@
<reportsDirectory>${basedir}/src/test/resources/unit/basic-surefire-report-reporting-null/surefire-reports
</reportsDirectory>
<outputName>surefire-report</outputName>
<xrefLocation>${basedir}/target/site/unit/basic-surefire-report-test/xref-test</xrefLocation>
<xrefTestLocation>${basedir}/target/site/unit/basic-surefire-report-test/xref-test</xrefTestLocation>
<linkXRef>true</linkXRef>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>

0 comments on commit 84e60c7

Please sign in to comment.