Skip to content

Commit

Permalink
[SUREFIRE-2227] Dynamically calculate xrefTestLocation
Browse files Browse the repository at this point in the history
  • Loading branch information
michael-o committed Jan 2, 2024
1 parent c6a3efb commit 26d0677
Show file tree
Hide file tree
Showing 18 changed files with 276 additions and 44 deletions.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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>
Original file line number Diff line number Diff line change
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>
Loading

0 comments on commit 26d0677

Please sign in to comment.