View Javadoc
1   package org.apache.maven.plugin.surefire;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.plugin.surefire.report.ConsoleOutputFileReporter;
23  import org.apache.maven.plugin.surefire.report.DirectConsoleOutput;
24  import org.apache.maven.plugin.surefire.report.FileReporter;
25  import org.apache.maven.plugin.surefire.report.StatelessXmlReporter;
26  import org.apache.maven.plugin.surefire.report.TestcycleConsoleOutputReceiver;
27  import org.apache.maven.plugin.surefire.report.WrappedReportEntry;
28  import org.apache.maven.plugin.surefire.runorder.StatisticsReporter;
29  
30  import javax.annotation.Nonnull;
31  import java.io.File;
32  import java.io.PrintStream;
33  import java.util.List;
34  import java.util.Map;
35  import java.util.concurrent.ConcurrentHashMap;
36  
37  import static org.apache.maven.plugin.surefire.report.ConsoleReporter.BRIEF;
38  import static org.apache.maven.plugin.surefire.report.ConsoleReporter.PLAIN;
39  
40  /**
41   * All the parameters used to construct reporters
42   * <br>
43   *
44   * @author Kristian Rosenvold
45   */
46  public final class StartupReportConfiguration
47  {
48      public static final String BRIEF_REPORT_FORMAT = BRIEF;
49  
50      public static final String PLAIN_REPORT_FORMAT = PLAIN;
51  
52      private final PrintStream originalSystemOut;
53  
54      private final PrintStream originalSystemErr;
55  
56      private final boolean useFile;
57  
58      private final boolean printSummary;
59  
60      private final String reportFormat;
61  
62      private final String reportNameSuffix;
63  
64      private final File statisticsFile;
65  
66      private final boolean requiresRunHistory;
67  
68      private final boolean redirectTestOutputToFile;
69  
70      private final boolean disableXmlReport;
71  
72      private final File reportsDirectory;
73  
74      private final boolean trimStackTrace;
75  
76      private final int rerunFailingTestsCount;
77  
78      private final String xsdSchemaLocation;
79  
80      private final Map<String, Map<String, List<WrappedReportEntry>>> testClassMethodRunHistory
81          = new ConcurrentHashMap<String, Map<String, List<WrappedReportEntry>>>();
82  
83      private StatisticsReporter statisticsReporter;
84  
85      @SuppressWarnings( "checkstyle:parameternumber" )
86      public StartupReportConfiguration( boolean useFile, boolean printSummary, String reportFormat,
87                                         boolean redirectTestOutputToFile, boolean disableXmlReport,
88                                         @Nonnull File reportsDirectory, boolean trimStackTrace, String reportNameSuffix,
89                                         File statisticsFile, boolean requiresRunHistory,
90                                         int rerunFailingTestsCount, String xsdSchemaLocation )
91      {
92          this.useFile = useFile;
93          this.printSummary = printSummary;
94          this.reportFormat = reportFormat;
95          this.redirectTestOutputToFile = redirectTestOutputToFile;
96          this.disableXmlReport = disableXmlReport;
97          this.reportsDirectory = reportsDirectory;
98          this.trimStackTrace = trimStackTrace;
99          this.reportNameSuffix = reportNameSuffix;
100         this.statisticsFile = statisticsFile;
101         this.requiresRunHistory = requiresRunHistory;
102         this.originalSystemOut = System.out;
103         this.originalSystemErr = System.err;
104         this.rerunFailingTestsCount = rerunFailingTestsCount;
105         this.xsdSchemaLocation = xsdSchemaLocation;
106     }
107 
108     /**
109      * For testing purposes only.
110      *
111      * @return StartupReportConfiguration fo testing purposes
112      */
113     public static StartupReportConfiguration defaultValue()
114     {
115         File target = new File( "./target" );
116         File statisticsFile = new File( target, "TESTHASH" );
117         return new StartupReportConfiguration( true, true, "PLAIN", false, false, target, false, null, statisticsFile,
118                                                false, 0, null );
119     }
120 
121     /**
122      * For testing purposes only.
123      *
124      * @return StartupReportConfiguration fo testing purposes
125      */
126     public static StartupReportConfiguration defaultNoXml()
127     {
128         File target = new File( "./target" );
129         File statisticsFile = new File( target, "TESTHASHxXML" );
130         return new StartupReportConfiguration( true, true, "PLAIN", false, true, target, false, null, statisticsFile,
131                                                false, 0, null );
132     }
133 
134     public boolean isUseFile()
135     {
136         return useFile;
137     }
138 
139     public boolean isPrintSummary()
140     {
141         return printSummary;
142     }
143 
144     public String getReportFormat()
145     {
146         return reportFormat;
147     }
148 
149     public String getReportNameSuffix()
150     {
151         return reportNameSuffix;
152     }
153 
154     public boolean isRedirectTestOutputToFile()
155     {
156         return redirectTestOutputToFile;
157     }
158 
159     public boolean isDisableXmlReport()
160     {
161         return disableXmlReport;
162     }
163 
164     public File getReportsDirectory()
165     {
166         return reportsDirectory;
167     }
168 
169     public int getRerunFailingTestsCount()
170     {
171         return rerunFailingTestsCount;
172     }
173 
174     public StatelessXmlReporter instantiateStatelessXmlReporter()
175     {
176         return isDisableXmlReport()
177             ? null
178             : new StatelessXmlReporter( reportsDirectory, reportNameSuffix, trimStackTrace, rerunFailingTestsCount,
179                                         testClassMethodRunHistory, xsdSchemaLocation );
180     }
181 
182     public FileReporter instantiateFileReporter()
183     {
184         return isUseFile() && isBriefOrPlainFormat()
185             ? new FileReporter( reportsDirectory, getReportNameSuffix() )
186             : null;
187     }
188 
189     public boolean isBriefOrPlainFormat()
190     {
191         String fmt = getReportFormat();
192         return BRIEF_REPORT_FORMAT.equals( fmt ) || PLAIN_REPORT_FORMAT.equals( fmt );
193     }
194 
195     public TestcycleConsoleOutputReceiver instantiateConsoleOutputFileReporter()
196     {
197         return isRedirectTestOutputToFile()
198             ? new ConsoleOutputFileReporter( reportsDirectory, getReportNameSuffix() )
199             : new DirectConsoleOutput( originalSystemOut, originalSystemErr );
200     }
201 
202     public synchronized StatisticsReporter getStatisticsReporter()
203     {
204         if ( statisticsReporter == null )
205         {
206             statisticsReporter = requiresRunHistory ? new StatisticsReporter( getStatisticsFile() ) : null;
207         }
208         return statisticsReporter;
209     }
210 
211     public File getStatisticsFile()
212     {
213         return statisticsFile;
214     }
215 
216     public boolean isTrimStackTrace()
217     {
218         return trimStackTrace;
219     }
220 
221     public boolean isRequiresRunHistory()
222     {
223         return requiresRunHistory;
224     }
225 
226     public PrintStream getOriginalSystemOut()
227     {
228         return originalSystemOut;
229     }
230 
231     public String getXsdSchemaLocation()
232     {
233         return xsdSchemaLocation;
234     }
235 }