001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.mavenplugins.testsuite.report; 019 020 import org.apache.maven.artifact.handler.ArtifactHandler; 021 import org.apache.maven.model.ReportPlugin; 022 import org.apache.maven.project.MavenProject; 023 import org.apache.maven.reporting.AbstractMavenReport; 024 import org.apache.maven.reporting.MavenReportException; 025 import org.codehaus.doxia.site.renderer.SiteRenderer; 026 import org.codehaus.plexus.util.PathTool; 027 import org.codehaus.plexus.util.StringUtils; 028 029 import java.io.File; 030 import java.util.Iterator; 031 import java.util.Locale; 032 import java.util.ResourceBundle; 033 034 035 /** 036 * Creates a nicely formatted Surefire Test Report in html format. 037 * 038 * @author <a href="mailto:jruiz@exist.com">Johnny R. Ruiz III</a> 039 * @version $Id: SurefireReportMojo.java 514085 2007-03-03 06:09:54Z jdillon $ 040 * @goal generate-surefire-report 041 */ 042 public class SurefireReportMojo 043 extends AbstractMavenReport 044 { 045 /** 046 * Location where generated html will be created. 047 * 048 * @parameter expression="${project.build.directory}/site" 049 */ 050 private String outputDirectory; 051 052 /** 053 * Doxia Site Renderer 054 * 055 * @parameter expression="${component.org.codehaus.doxia.site.renderer.SiteRenderer}" 056 * @required @readonly 057 */ 058 private SiteRenderer siteRenderer; 059 060 /** 061 * Maven Project 062 * 063 * @parameter expression="${project}" 064 * @required @readonly 065 */ 066 private MavenProject project; 067 068 /** 069 * If set to false, only failures are shown. 070 * 071 * @parameter expression="${showSuccess}" default-value="true" 072 * @required 073 */ 074 private boolean showSuccess; 075 076 /** 077 * This directory contains the XML Report files that will be parsed and rendered to HTML format. 078 * 079 * @parameter expression="${project.build.directory}/surefire-reports" 080 * @required 081 */ 082 private File reportsDirectory; 083 084 /** 085 * The filename to use for the report. 086 * 087 * @parameter expression="${outputName}" default-value="surefire-report" 088 * @required 089 */ 090 private String outputName; 091 092 /** 093 * Location of the Xrefs to link. 094 * 095 * @parameter default-value="${project.reporting.outputDirectory}/xref-test" 096 */ 097 private File xrefLocation; 098 099 /** 100 * Whether to link the XRef if found. 101 * 102 * @parameter expression="${linkXRef}" default-value="true" 103 */ 104 private boolean linkXRef; 105 106 public void executeReport( Locale locale ) 107 throws MavenReportException 108 { 109 /* 110 if ( !"pom".equalsIgnoreCase(project.getPackaging()) ) { 111 System.out.println("Not a pom packaging."); 112 return; 113 } 114 */ 115 116 SurefireReportGenerator report = 117 new SurefireReportGenerator( reportsDirectory, locale, showSuccess, determineXrefLocation() ); 118 119 report.doGenerateReport( getBundle( locale ), getSink() ); 120 121 System.out.println("surefire-report.html generated."); 122 } 123 124 private String determineXrefLocation() 125 { 126 String location = null; 127 128 if ( linkXRef ) 129 { 130 String relativePath = PathTool.getRelativePath( outputDirectory, xrefLocation.getAbsolutePath() ); 131 if ( StringUtils.isEmpty( relativePath ) ) 132 { 133 relativePath = "."; 134 } 135 relativePath = relativePath + "/" + xrefLocation.getName(); 136 if ( xrefLocation.exists() ) 137 { 138 // XRef was already generated by manual execution of a lifecycle binding 139 location = relativePath; 140 } 141 else 142 { 143 // Not yet generated - check if the report is on its way 144 for ( Iterator reports = project.getReportPlugins().iterator(); reports.hasNext(); ) 145 { 146 ReportPlugin report = (ReportPlugin) reports.next(); 147 148 String artifactId = report.getArtifactId(); 149 if ( "maven-jxr-plugin".equals( artifactId ) || "jxr-maven-plugin".equals( artifactId ) ) 150 { 151 location = relativePath; 152 } 153 } 154 } 155 156 if ( location == null ) 157 { 158 getLog().warn( "Unable to locate Test Source XRef to link to - DISABLED" ); 159 } 160 } 161 return location; 162 } 163 164 public String getName( Locale locale ) 165 { 166 return getBundle( locale ).getString( "report.surefire.name" ); 167 } 168 169 public String getDescription( Locale locale ) 170 { 171 return getBundle( locale ).getString( "report.surefire.description" ); 172 } 173 174 protected SiteRenderer getSiteRenderer() 175 { 176 return siteRenderer; 177 } 178 179 protected MavenProject getProject() 180 { 181 return project; 182 } 183 184 public String getOutputName() 185 { 186 return outputName; 187 } 188 189 protected String getOutputDirectory() 190 { 191 return outputDirectory; 192 } 193 194 private ResourceBundle getBundle( Locale locale ) 195 { 196 return ResourceBundle.getBundle( "surefire-report", locale, this.getClass().getClassLoader() ); 197 } 198 199 /** 200 * @see org.apache.maven.reporting.AbstractMavenReport#canGenerateReport() 201 */ 202 public boolean canGenerateReport() 203 { 204 // Only execute reports for "pom" projects 205 return "pom".equalsIgnoreCase(project.getPackaging()); 206 } 207 }