1 package org.apache.maven.plugin.surefire.report;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.surefire.report.ReportEntry;
23 import org.apache.maven.surefire.report.ReporterException;
24
25 import java.io.BufferedWriter;
26 import java.io.File;
27 import java.io.FileOutputStream;
28 import java.io.IOException;
29 import java.io.OutputStreamWriter;
30 import java.io.PrintWriter;
31 import java.io.Writer;
32 import java.nio.charset.Charset;
33 import java.util.List;
34
35 import static org.apache.maven.plugin.surefire.report.FileReporterUtils.stripIllegalFilenameChars;
36 import static org.apache.maven.surefire.util.internal.StringUtils.isNotBlank;
37
38
39
40
41
42
43
44 public class FileReporter
45 {
46 private final File reportsDirectory;
47 private final String reportNameSuffix;
48 private final Charset encoding;
49
50 public FileReporter( File reportsDirectory, String reportNameSuffix, Charset encoding )
51 {
52 this.reportsDirectory = reportsDirectory;
53 this.reportNameSuffix = reportNameSuffix;
54 this.encoding = encoding;
55 }
56
57 private PrintWriter testSetStarting( ReportEntry report )
58 {
59 File reportFile = getReportFile( reportsDirectory, report.getName(), reportNameSuffix, ".txt" );
60
61 File reportDir = reportFile.getParentFile();
62
63
64 reportDir.mkdirs();
65
66 try
67 {
68 Writer encodedStream = new OutputStreamWriter( new FileOutputStream( reportFile ), encoding );
69
70 PrintWriter writer = new PrintWriter( new BufferedWriter( encodedStream, 16 * 1024 ) );
71
72 writer.println( "-------------------------------------------------------------------------------" );
73
74 writer.println( "Test set: " + report.getName() );
75
76 writer.println( "-------------------------------------------------------------------------------" );
77
78 return writer;
79 }
80 catch ( IOException e )
81 {
82 throw new ReporterException( "Unable to create file for report: " + e.getMessage(), e );
83 }
84 }
85
86 static File getReportFile( File reportsDirectory, String reportEntryName, String reportNameSuffix,
87 String fileExtension )
88 {
89 String fileName =
90 reportEntryName + ( isNotBlank( reportNameSuffix ) ? "-" + reportNameSuffix : "" ) + fileExtension;
91 return new File( reportsDirectory, stripIllegalFilenameChars( fileName ) );
92 }
93
94 public void testSetCompleted( WrappedReportEntry report, TestSetStats testSetStats, List<String> testResults )
95 {
96 PrintWriter writer = null;
97 try
98 {
99 writer = testSetStarting( report );
100 writer.println( testSetStats.getTestSetSummary( report ) );
101 for ( String testResult : testResults )
102 {
103 writer.println( testResult );
104 }
105 writer.flush();
106 }
107 finally
108 {
109 if ( writer != null )
110 {
111 writer.close();
112 }
113 }
114 }
115 }