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.nio.charset.Charset;
34  import java.util.List;
35  import java.util.Map;
36  import java.util.concurrent.ConcurrentHashMap;
37  
38  import static org.apache.maven.plugin.surefire.report.ConsoleReporter.BRIEF;
39  import static org.apache.maven.plugin.surefire.report.ConsoleReporter.PLAIN;
40  import static org.apache.commons.lang3.StringUtils.trimToNull;
41  
42  /**
43   * All the parameters used to construct reporters
44   * <br>
45   *
46   * @author Kristian Rosenvold
47   */
48  public final class StartupReportConfiguration
49  {
50      public static final String BRIEF_REPORT_FORMAT = BRIEF;
51  
52      public static final String PLAIN_REPORT_FORMAT = PLAIN;
53  
54      private final PrintStream originalSystemOut;
55  
56      private final PrintStream originalSystemErr;
57  
58      private final boolean useFile;
59  
60      private final boolean printSummary;
61  
62      private final String reportFormat;
63  
64      private final String reportNameSuffix;
65  
66      private final File statisticsFile;
67  
68      private final boolean requiresRunHistory;
69  
70      private final boolean redirectTestOutputToFile;
71  
72      private final boolean disableXmlReport;
73  
74      private final File reportsDirectory;
75  
76      private final boolean trimStackTrace;
77  
78      private final int rerunFailingTestsCount;
79  
80      private final String xsdSchemaLocation;
81  
82      private final Map<String, Map<String, List<WrappedReportEntry>>> testClassMethodRunHistory
83          = new ConcurrentHashMap<String, Map<String, List<WrappedReportEntry>>>();
84  
85      private final Charset encoding;
86  
87      private StatisticsReporter statisticsReporter;
88  
89      @SuppressWarnings( "checkstyle:parameternumber" )
90      public StartupReportConfiguration( boolean useFile, boolean printSummary, String reportFormat,
91                                         boolean redirectTestOutputToFile, boolean disableXmlReport,
92                                         @Nonnull File reportsDirectory, boolean trimStackTrace, String reportNameSuffix,
93                                         File statisticsFile, boolean requiresRunHistory,
94                                         int rerunFailingTestsCount, String xsdSchemaLocation, String encoding )
95      {
96          this.useFile = useFile;
97          this.printSummary = printSummary;
98          this.reportFormat = reportFormat;
99          this.redirectTestOutputToFile = redirectTestOutputToFile;
100         this.disableXmlReport = disableXmlReport;
101         this.reportsDirectory = reportsDirectory;
102         this.trimStackTrace = trimStackTrace;
103         this.reportNameSuffix = reportNameSuffix;
104         this.statisticsFile = statisticsFile;
105         this.requiresRunHistory = requiresRunHistory;
106         this.originalSystemOut = System.out;
107         this.originalSystemErr = System.err;
108         this.rerunFailingTestsCount = rerunFailingTestsCount;
109         this.xsdSchemaLocation = xsdSchemaLocation;
110         String charset = trimToNull( encoding );
111         this.encoding = charset == null ? Charset.defaultCharset() : Charset.forName( charset );
112     }
113 
114     public boolean isUseFile()
115     {
116         return useFile;
117     }
118 
119     public boolean isPrintSummary()
120     {
121         return printSummary;
122     }
123 
124     public String getReportFormat()
125     {
126         return reportFormat;
127     }
128 
129     public String getReportNameSuffix()
130     {
131         return reportNameSuffix;
132     }
133 
134     public boolean isRedirectTestOutputToFile()
135     {
136         return redirectTestOutputToFile;
137     }
138 
139     public boolean isDisableXmlReport()
140     {
141         return disableXmlReport;
142     }
143 
144     public File getReportsDirectory()
145     {
146         return reportsDirectory;
147     }
148 
149     public int getRerunFailingTestsCount()
150     {
151         return rerunFailingTestsCount;
152     }
153 
154     public StatelessXmlReporter instantiateStatelessXmlReporter()
155     {
156         return isDisableXmlReport()
157             ? null
158             : new StatelessXmlReporter( reportsDirectory, reportNameSuffix, trimStackTrace, rerunFailingTestsCount,
159                                         testClassMethodRunHistory, xsdSchemaLocation );
160     }
161 
162     public FileReporter instantiateFileReporter()
163     {
164         return isUseFile() && isBriefOrPlainFormat()
165             ? new FileReporter( reportsDirectory, getReportNameSuffix(), encoding )
166             : null;
167     }
168 
169     public boolean isBriefOrPlainFormat()
170     {
171         String fmt = getReportFormat();
172         return BRIEF_REPORT_FORMAT.equals( fmt ) || PLAIN_REPORT_FORMAT.equals( fmt );
173     }
174 
175     public TestcycleConsoleOutputReceiver instantiateConsoleOutputFileReporter()
176     {
177         return isRedirectTestOutputToFile()
178             ? new ConsoleOutputFileReporter( reportsDirectory, getReportNameSuffix() )
179             : new DirectConsoleOutput( originalSystemOut, originalSystemErr );
180     }
181 
182     public synchronized StatisticsReporter getStatisticsReporter()
183     {
184         if ( statisticsReporter == null )
185         {
186             statisticsReporter = requiresRunHistory ? new StatisticsReporter( getStatisticsFile() ) : null;
187         }
188         return statisticsReporter;
189     }
190 
191     public File getStatisticsFile()
192     {
193         return statisticsFile;
194     }
195 
196     public boolean isTrimStackTrace()
197     {
198         return trimStackTrace;
199     }
200 
201     public boolean isRequiresRunHistory()
202     {
203         return requiresRunHistory;
204     }
205 
206     public PrintStream getOriginalSystemOut()
207     {
208         return originalSystemOut;
209     }
210 
211     public String getXsdSchemaLocation()
212     {
213         return xsdSchemaLocation;
214     }
215 
216     public Charset getEncoding()
217     {
218         return encoding;
219     }
220 }