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 java.util.ArrayList;
23 import java.util.Iterator;
24 import java.util.List;
25 import org.apache.maven.surefire.booter.StartupReportConfiguration;
26 import org.apache.maven.surefire.report.AbstractConsoleReporter;
27 import org.apache.maven.surefire.report.AbstractFileReporter;
28 import org.apache.maven.surefire.report.ConsoleLogger;
29 import org.apache.maven.surefire.report.DefaultDirectConsoleReporter;
30 import org.apache.maven.surefire.report.MulticastingReporter;
31 import org.apache.maven.surefire.report.Reporter;
32 import org.apache.maven.surefire.report.ReporterConfiguration;
33 import org.apache.maven.surefire.report.ReporterFactory;
34 import org.apache.maven.surefire.report.RunListener;
35 import org.apache.maven.surefire.report.RunStatistics;
36 import org.apache.maven.surefire.report.TestSetRunListener;
37 import org.apache.maven.surefire.report.XMLReporter;
38 import org.apache.maven.surefire.suite.RunResult;
39
40
41
42
43
44
45
46
47 public class FileReporterFactory
48 implements ReporterFactory
49 {
50
51 private final ReporterConfiguration reporterConfiguration;
52
53 private final RunStatistics globalStats = new RunStatistics();
54
55 private final MulticastingReporter multicastingReporter;
56
57 private final StartupReportConfiguration reportConfiguration;
58
59 public FileReporterFactory( StartupReportConfiguration reportConfiguration )
60 {
61 this.reportConfiguration = reportConfiguration;
62 this.reporterConfiguration = getReporterConfiguration();
63 multicastingReporter = new MulticastingReporter( instantiateReports() );
64 runStarting();
65 }
66
67 private ReporterConfiguration getReporterConfiguration()
68 {
69
70 return new ReporterConfiguration( reportConfiguration.getReportsDirectory(),
71 new Boolean( reportConfiguration.isTrimStackTrace() ) );
72 }
73
74 public RunListener createReporter()
75 {
76 return new TestSetRunListener( instantiateConsoleReporter(), instantiateFileReporter(),
77 instantiateXmlReporter(), instantiateConsoleOutputFileReporter(), globalStats );
78 }
79
80 private AbstractConsoleReporter instantiateConsoleReporter()
81 {
82 return reportConfiguration.instantiateConsoleReporter();
83 }
84
85 private AbstractFileReporter instantiateFileReporter()
86 {
87 return reportConfiguration.instantiateFileReporter();
88 }
89
90 private XMLReporter instantiateXmlReporter()
91 {
92 return reportConfiguration.instantiateXmlReporter();
93 }
94
95 private Reporter instantiateConsoleOutputFileReporter()
96 {
97 return reportConfiguration.instantiateConsoleOutputFileReporterName(
98 reporterConfiguration.getOriginalSystemOut() );
99 }
100
101 private List instantiateReports()
102 {
103 List result = new ArrayList();
104 addIfNotNull( result, instantiateConsoleReporter() );
105 addIfNotNull( result, instantiateFileReporter() );
106 addIfNotNull( result, instantiateXmlReporter() );
107 addIfNotNull( result, instantiateConsoleOutputFileReporter() );
108 return result;
109 }
110
111 private void addIfNotNull( List result, Reporter reporter )
112 {
113 if ( reporter != null )
114 {
115 result.add( reporter );
116 }
117 }
118
119 public RunResult close()
120 {
121 runCompleted();
122 return globalStats.getRunResult();
123 }
124
125 private ConsoleLogger createConsoleLogger()
126 {
127 return new DefaultDirectConsoleReporter( reporterConfiguration.getOriginalSystemOut() );
128 }
129
130 public void runStarting()
131 {
132 final ConsoleLogger consoleReporter = createConsoleLogger();
133 consoleReporter.info( "" );
134 consoleReporter.info( "-------------------------------------------------------" );
135 consoleReporter.info( " T E S T S" );
136 consoleReporter.info( "-------------------------------------------------------" );
137 }
138
139 private void runCompleted()
140 {
141 final ConsoleLogger logger = createConsoleLogger();
142 logger.info( "" );
143 logger.info( "Results :" );
144 logger.info( "" );
145 if ( globalStats.hadFailures() )
146 {
147 multicastingReporter.writeMessage( "Failed tests: " );
148 for ( Iterator iterator = this.globalStats.getFailureSources().iterator(); iterator.hasNext(); )
149 {
150 logger.info( " " + iterator.next() );
151 }
152 logger.info( "" );
153 }
154 if ( globalStats.hadErrors() )
155 {
156 logger.info( "Tests in error: " );
157 for ( Iterator iterator = this.globalStats.getErrorSources().iterator(); iterator.hasNext(); )
158 {
159 logger.info( " " + iterator.next() );
160 }
161 logger.info( "" );
162 }
163 logger.info( globalStats.getSummary() );
164 logger.info( "" );
165 }
166
167 public RunStatistics getGlobalRunStatistics()
168 {
169 return globalStats;
170 }
171 }